|
Обычная переменная для ISR и volatile для всех остальных, как лучше реализовать? |
|
|
|
Jan 24 2009, 15:32
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Что-то вот задумался над одной мелочью, в принципе. Есть переменная таймера, которая объявлена как volatile, так как модифицируется в обработчике прерывания. Всё бы хорошо, да только хотелось бы, чтобы эта переменная была volatile для всех, кроме самого обработчика прерываний, так как лишние сохранения/загрузки в нём - это совершенно лишнее.  Есть мысля сделать так: Код union { dword isr_timer; volatile dword timer; } и в ISR юзать isr_timer, а в других местах - просто timer. Что скажете?
|
|
|
|
|
 |
Ответов
|
Jan 25 2009, 17:31
|
Участник

Группа: Свой
Сообщений: 46
Регистрация: 4-02-05
Из: Москва
Пользователь №: 2 430

|
точно не помню  но нарывался уже на непонимание анонимного union, и вроде как даже не в одном месте. И это был С без плюсов. zltigo: вам виднее,и спорить не хочется. мне лично две длинные переменные вместо одной короткой - лишняя сущность (по оккаму). Тем не менее хочется отметить что вы везунчик - у вас есть выбор как минимум из 3х подходов реализации задачи
|
|
|
|
|
Jan 25 2009, 19:50
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(sonycman @ Jan 25 2009, 21:48)  Но разве безымянные объединения не являются фичей исключительно C++? Не только. Насколько я ничего не помню, в С безымянные структуры могут быть, но они должны обязательно включаться в конечном итоге в именованные структуры или объединения. типа: Код struct { union { int a; char c[2]; }; int b; } w; только с безымянными объединениями нужно в любом случае быть очень аккуратными...
|
|
|
|
|
Jan 25 2009, 21:08
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
И раз уж зашла речь о безымянных обединениях и структурах, вот такой пример: Код volatile union { struct { int a; union { int a; int b; }; }; int b; int c; } t;
volatile int A, B, C;
int main() { t.a = 1; t.b = 2; t.c = 3;
A = t.a; B = t.b; C = t.c;
return 0; } Чему будут равны A,B,C в конце main ?
|
|
|
|
Сообщений в этой теме
sonycman Обычная переменная для ISR и volatile для всех остальных Jan 24 2009, 15:32 kimstik ISR сделай в отдельном файле и используй как
dword... Jan 24 2009, 16:43 sonycman Цитата(kimstik @ Jan 24 2009, 20:43) ISR ... Jan 24 2009, 17:47  ReAl Цитата(sonycman @ Jan 24 2009, 19:47) А я... Jan 24 2009, 20:39 Сергей Борщ Цитата(sonycman @ Jan 24 2009, 17:32) Что... Jan 24 2009, 18:33 sonycman Цитата(Сергей Борщ @ Jan 24 2009, 22:33) ... Jan 24 2009, 19:51 singlskv А я вот чего-то совсем не припоминаю из стандарта ... Jan 24 2009, 18:55 Сергей Борщ Цитата(singlskv @ Jan 24 2009, 20:55) А я... Jan 24 2009, 19:39  singlskv Цитата(Сергей Борщ @ Jan 24 2009, 22:39) ... Jan 24 2009, 19:53   sonycman Цитата(singlskv @ Jan 24 2009, 23:53) Без... Jan 24 2009, 19:55 zltigo Цитата(sonycman @ Jan 24 2009, 18:32) Что... Jan 24 2009, 19:04 sonycman Хм, спасибо!
Если будут проблемы с extern, то ... Jan 24 2009, 22:12 kimstik Я стараюсь union реже использовать - это одна из с... Jan 25 2009, 11:43 sonycman Цитата(kimstik @ Jan 25 2009, 15:43) Я ст... Jan 25 2009, 12:42 zltigo Цитата(kimstik @ Jan 25 2009, 14:43) Длин... Jan 25 2009, 13:21  777777 А ты не пробовал объявлять ее вообще без volatile?... Jan 26 2009, 07:51   Сергей Борщ Цитата(777777 @ Jan 26 2009, 09:51) А ты ... Jan 26 2009, 08:20    777777 Цитата(Сергей Борщ @ Jan 26 2009, 11:20) ... Jan 26 2009, 17:45     sonycman Цитата(777777 @ Jan 26 2009, 21:45) Но с ... Jan 26 2009, 18:56     Сергей Борщ Цитата(777777 @ Jan 26 2009, 19:45) А так... Jan 26 2009, 19:18   sonycman Цитата(777777 @ Jan 26 2009, 11:51) А ты ... Jan 26 2009, 11:38    _Pasha Цитата(sonycman @ Jan 26 2009, 14:38) Код... Jan 26 2009, 11:55     Сергей Борщ Цитата(_Pasha @ Jan 26 2009, 13:55) Порти... Jan 26 2009, 13:24     sonycman Цитата(_Pasha @ Jan 26 2009, 15:55) Пусть... Jan 26 2009, 14:02      _Pasha Цитата(sonycman @ Jan 26 2009, 18:02) Тог... Jan 26 2009, 14:40       Сергей Борщ Цитата(_Pasha @ Jan 26 2009, 16:40) Согла... Jan 26 2009, 15:20        _Pasha Цитата(Сергей Борщ @ Jan 26 2009, 18:20) ... Jan 26 2009, 15:40     singlskv Цитата(zltigo @ Jan 26 2009, 00:19) Для н... Jan 25 2009, 21:40      zltigo Цитата(singlskv @ Jan 26 2009, 00:40) тол... Jan 25 2009, 21:51       singlskv Цитата(zltigo @ Jan 26 2009, 00:51) Что б... Jan 25 2009, 22:10        zltigo Цитата(singlskv @ Jan 26 2009, 01:10) Vis... Jan 25 2009, 22:33         singlskv Цитата(zltigo @ Jan 26 2009, 01:33) Ну фи... Jan 25 2009, 22:39          zltigo Цитата(singlskv @ Jan 26 2009, 01:39) Стр... Jan 25 2009, 22:42 kimstik живодеры!!
вот увидете - перестанет компил... Jan 25 2009, 21:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|