реклама на сайте
подробности

 
 
> volatile не помагает
vROMAv
сообщение Feb 10 2011, 13:16
Сообщение #1





Группа: Участник
Сообщений: 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();
}
}


Помогите разобраться в ситуации...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ar__systems
сообщение Feb 10 2011, 16:06
Сообщение #2


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Дался вам этот волатайл. При чем тут вообще это? Обычная статическая переменная. Ей без разницы, где она лежит, в регистре или в памяти. Если компилятор ее в регистр положил, наверное этот регистр никто больше не используют. 99% процентов что ваша программа кривая.

Сообщение отредактировал ar__systems - Feb 10 2011, 16:07
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016