[an error occurred while processing this directive]
Народ у iar avr 4.10В на большой оптимизации есть глюки? Дело в том, что немогу понять где порылась собака. (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
Igor 14 сентября 2005 г. 11:23
Есть небольшая программа.Трахаюсь уже день третий... В основном цикле выполняются две задачи, которые запускаются по флагам. Один выставляется в прерывании RX, второй по таймеру, т.е. выставлятся асинхронно. Задача которая выполняется по флагу от таймера, через какое-то время (произвольное) перестает работать, т.е. флаг в какой-то момент теряется (достаточно одного пропадания). Прерывание вызываться продолжает. Этот глюк исчезает если я заремливаю обработку второй задачи. В конечном итоге вторая задача имеет вид: if (Flags.One==1) { Flags.One=0; } Даже этого действия достаточно, чтобы флаг начал терятся. Вот как объявленны флаги: union { unsigned char Byte; struct { unsigned char One:1; // флаг выставлемый в прерывании RX unsigned char Two:1; // флаг выставляемый в прерывании от таймера }; }Flags;
Понимаю, что информации может быть недостаточно, но если понадобится опишу поподробнее. Сейчас я отключил оптимизацию полностью. Глюк пока не проявляется. Попробую эту программулину откомпилировать в WinAvr, что получится отпишу. Но интересны и сейчас какие-нибудь мысли. Может нельзя так объявлять битовую поля? Хотя так рекомендовали объявлять иаровцы.