Witam! Mam taki oto problem dotyczący fragmentu kodu dołączonego do tego postu. Po wyłączeniu optymalizacji poniższy kod wyrzuca mi na wyświetlacz (funkcja write_char) znaki "ba" , czyli wszystko jest OK. Gdy optymalizacja jest włączona to wyrzuca mi "aa"! Czy ktoś wie jak coś takiego rozwiązać. Środowisko AVRStudio 4.
Chciałem sobie zrobić elegancki sposób zapisu danych z UARTu do bufora w przerwaniach. Po odbiorze ostatniego znaku jakiejś komendy (znak 0x0A) miała być ustawiana jakaś flaga w jakimś nazwijmy to rejestrze stanu (jakaś zmienna) następnie gdzieś w pętli głównej programu odbywałby się polling m.in tej flagi. Problem polega na tym, że jeżeli włączona jest optymalizacja kodu (Project/konfigueation option/optimization) to w ogóle to nie działa!
Czy ktoś wie jak to obejść? Z góry dzięki
Chciałem sobie zrobić elegancki sposób zapisu danych z UARTu do bufora w przerwaniach. Po odbiorze ostatniego znaku jakiejś komendy (znak 0x0A) miała być ustawiana jakaś flaga w jakimś nazwijmy to rejestrze stanu (jakaś zmienna) następnie gdzieś w pętli głównej programu odbywałby się polling m.in tej flagi. Problem polega na tym, że jeżeli włączona jest optymalizacja kodu (Project/konfigueation option/optimization) to w ogóle to nie działa!
Czy ktoś wie jak to obejść? Z góry dzięki
[...]
char zmienna = 0;
void main()
{
[...]
zmienna = 'b';
while(1)
{
zmienna = 'b';
}
}
SIGNAL (SIG_UART_RECV)
{
char znak = UDR;
bufor[indexx++] = znak;
if(znak == 0x0A)
{
//ustaw flage
write_char(zmienna);
zmienna = 'a';
write_char(zmienna);
//zakoncz bufor
bufor[indexx] = 0x00;
indexx = 0;
}
}