|
volatile не помагает |
|
|
|
Feb 10 2011, 13:16
|
Группа: Участник
Сообщений: 13
Регистрация: 10-02-11
Из: Украина
Пользователь №: 62 859

|
Есть некоторый код, проблема в том что имеется переменная которая после выхода из прерывания восстанавливает своё значение, т.е. независимо от volatile компилятор по ходу разместил переменную event_flag в регистре??!!! При чём данная ситуация возникает не часто, иногда установленное значение в прерывании остаётся и после выхода из него((
///////////////////////////////// // AVR Studio 4.16 Build 628 // // WinAVR-20090313 // // Atmega8535 // /////////////////////////////////
............................ volatile uint8_t event_flags; #define START 0x01 ............................ #define PACK_NOW 0x20
volatile uint8_t macro_rx = 0;
ISR (USART_RX_vect) { ............. ............. event_flags |= PACK_NOW; macro_rx = 1;
//тут PACK_NOW устанавливается, но после выхода из прерывания, //в event_flags восстанавливается предыдущее значение
}
void main_loop() { ............ ............ if(macro_rx) { if(!(event_flags & PACK_NOW)) { //!!!!!! ОШИБКА !!!!!! //т.е. macro_rx так и осталась в установленном в прерывании значении //а event_flags нет!!! } } ............ ............ }
int main() { while (true) { main_loop(); } }
Помогите разобраться в ситуации...
|
|
|
|
|
 |
Сообщений в этой теме
vROMAv volatile не помагает Feb 10 2011, 13:16 sonycman Переменная сама по себе никак не может принимать п... Feb 10 2011, 13:40 vROMAv А где написано что event_flags принимает произволь... Feb 10 2011, 13:49 GetSmart Цитата(vROMAv @ Feb 10 2011, 18:49) Весь ... Feb 10 2011, 14:03 vROMAv Я же описал выше: Хожу по коду пошагово по F11,
По... Feb 10 2011, 14:15 GetSmart Ходите по асм-коду. Там всё предельно ясно - в рег... Feb 10 2011, 14:28 Oldring Цитата(vROMAv @ Feb 10 2011, 16:16) т.е. ... Feb 10 2011, 14:39 _Артём_ В AVRStudio добавте переменную в Watch и увидите г... Feb 10 2011, 14:50 vROMAv В файле mega32.map переменной event_flags нет вооб... Feb 10 2011, 14:56 firstvald А есть опции оптимизатора? Если есть возможность ... Feb 10 2011, 16:28 demiurg_spb Цитата(vROMAv @ Feb 10 2011, 16:16) // ... Feb 10 2011, 17:19 ar__systems Цитата(demiurg_spb @ Feb 10 2011, 12:19) ... Feb 11 2011, 13:43  demiurg_spb Цитата(ar__systems @ Feb 11 2011, 16:43) ... Feb 11 2011, 15:39   Сергей Борщ QUOTE (demiurg_spb @ Feb 11 2011, 17:39) ... Feb 11 2011, 18:05   ar__systems Цитата(demiurg_spb @ Feb 11 2011, 10:39) ... Feb 11 2011, 18:30    demiurg_spb Цитата(ar__systems @ Feb 11 2011, 21:30) ... Feb 11 2011, 20:10 XVR А у вас в main_loop'е случайно нет локальной п... Feb 11 2011, 08:34 vROMAv Всем спасибо за помощь. Действительно в одном из у... Feb 11 2011, 08:53 _Pasha Цитата(vROMAv @ Feb 11 2011, 12:53) А вед... Feb 11 2011, 09:05  demiurg_spb Цитата(_Pasha @ Feb 11 2011, 12:05) Присм... Feb 11 2011, 09:08   _Pasha Цитата(demiurg_spb @ Feb 11 2011, 13:08) ... Feb 11 2011, 09:10    demiurg_spb Цитата(_Pasha @ Feb 11 2011, 12:10) Если ... Feb 11 2011, 09:46 GetSmart А я тоже без стеснений юзал битовые поля в неиспол... Feb 11 2011, 09:22 vROMAv Попутно ещё вопросик:
Например есть код
ISR()
{
... Feb 11 2011, 10:22 GetSmart Цитата(vROMAv @ Feb 11 2011, 15:22) Т.е. ... Feb 11 2011, 10:27 vROMAv ЦитатаПеременная однобайтовая. Какая атомарность?
... Feb 11 2011, 16:12
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|