|
Обычная переменная для 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 24 2009, 19:39
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(singlskv @ Jan 24 2009, 20:55)  А я вот чего-то совсем не припоминаю из стандарта почему исходный вариант неправильный ? Он не неправильный. Он несколько... некрасивый. Как вы организуете доступ к этому безымянному unionу из другого файла? Вы вынесете его в заголовочный файл с extern, и при этом сделаете видимым не-volatile пременную. Никакой гарантии, что случайно не используете эту переменную вне прерывания. Если есть возможность железно ограничить область видимости не-volatile переменной обработчиком прерывания, сделав ее локальной - почему не использовать ее? Цитата(sonycman @ Jan 24 2009, 19:47)  А я почему-то подумал, что extern должен быть с точно таким-же типом, что и оригинальная переменная... Думаю, что он может накладывать дополнительные ограничения (volatile, const) на переменную, но не снимать их. Искать в стандарте лень, никогда не использовал такой финт.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
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, 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 kimstik точно не помню но нарывался уже на непонимание ан... Jan 25 2009, 17:31 sonycman Цитата(kimstik @ Jan 25 2009, 21:31) точн... Jan 25 2009, 18:48  singlskv Цитата(sonycman @ Jan 25 2009, 21:48) Но ... Jan 25 2009, 19:50   singlskv И раз уж зашла речь о безымянных обединениях и стр... Jan 25 2009, 21:08    zltigo Цитата(singlskv @ Jan 26 2009, 00:08) Чем... Jan 25 2009, 21:19     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
|
|
|