Ответ: Вопрос к знатокам С - компилятор для АВР, 3.20 - он ошибается или я чего напортачил? Вот усеченный вариант программы:
#include
volatile __no_init __regvar struct
{
unsigned char flag0:1;
unsigned char flag1:1;
unsigned char flag2:1;
unsigned char flag3:1;
unsigned char flag4:1;
unsigned char flag5:1;
unsigned char flag6:1;
unsigned char flag7:1;
} @ 13 ;
int main(void)
{
while (1)
{
if (flag0!=0) flag0 = 0;
if (flag1) flag1 = 0;
flag0 = 0;
flag0 = 1;
flag1 = 0;
flag1 = 1;
}
}
Так вот, при компиляции с оптимизацией выше LOW он запись 0 в flag0 делает командой CLR R13! Запись 1 в него, а также все операции с другими флагами - нормально.
Вот и думаю - это ошибка компилятора или я чего-то не указал?