Witam Mam dziwny problem z WinAVR-20050214. Chodzi o atrybut volatile na zmiennej zadeklarowanej w rejestrze.
// deklaracja volatile register struct { char WaitRC: 1; } Flags asm("r17");
// fragment kodu while (Flags.WaitRC) { wdt_reset();
// wynik kompilacji 34a: 81 2f mov r24, r17 34c: 88 70 andi r24, 0x08 ; 8 34e: 13 ff sbrs r17, 3 350: 03 c0 rjmp .+6 ; 0x358 352: a8 95 wdr 354: 88 23 and r24, r24 356: e9 f7 brne .-6 ; 0x352
kompilator pobiera zawartość rejestru R17 do rejestru R24 tylko raz przy wejściu do pętli while, a póżniej juz program biega w kółko na podstawie "mocno nieaktualnej" zawartości R24. Usuniecie volatile w delkaracji zmiennej daje dokładnie taki sam kod wynikowy.
Rozwiązałem to wstawką assemblerową, ale czy ktoś z Grupowiczów spotkał się z podobnym problemem w nowszych wersjach WinAVR.
Pozdrawiam Grzegorz