logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

optymalizacja kodu w C...

r06ert 24 Mar 2009 21:33 1211 3
REKLAMA
  • #1 6328122
    r06ert
    Poziom 25  
    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

    
    [...]
    
    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;
    
    	}
    }
  • REKLAMA
  • Pomocny post
    #2 6328184
    BoskiDialer
    Poziom 34  
    typowe przeoczenie, bardzo częste na forum: brak volatile.
  • REKLAMA
  • Pomocny post
    #3 6328198
    rrata
    Poziom 19  
    volatile gdzie jest?

    edit:
    Widzę,że się spóźniłem :|
REKLAMA