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

AVR Studio + C + symulator

Ajatol 18 Lip 2009 05:09 2216 8
  • #1 6792165
    Ajatol
    Poziom 15  
    Próbuje nauczyć się jakiś podstaw programowania AVRów w C.
    Napisałem bardzo prosty program (nic nierobiący ) żeby sobie w symulatorze z AVR Studio wykonać linie po lini i poobserwować zmiany.
    
    #define F_CPU 8000000L
    #include <avr/io.h>
    #include <util/delay.h>
    int a;
    int b;
    int c;
    int d; 
    int main(void)
    {
    a=1;
    b=4;
    c=7;
    d=5;
    d=a+b+c;
    return 0;
    }
    


    Problem jest taki że wygląda mi na to że symulacja jest jakaś dziwna , nawet jeżeli zdeasemblowałem wcześniej program to on nie widzi instrukcji

    to znaczy poprostują sobie omija jakby jej tam nie było. Spróbowałem przenieść tą linie kodu w inne miejsce ale bez zmian jak również spróbowałem wywoływać funkcje z tej lini ale również jej nie widzi i pomija.
    AVR Studio + C + symulator
    Czy to jest jakiś błąd symulatora czy ja robię coś nie tak
  • #2 6792183
    wdogli
    Poziom 18  
    Najprawdopodobniej jest to spowodowane optymalizacją jaka stosuje kompilator w czasie kompilowania tego programiku.
    Spróbuj zadeklarować te zmienną w ten sposób:

    volatile int d;


    powinno pomóc.
    Pozdrawiam
  • #3 6792186
    Ajatol
    Poziom 15  
    Pomogło i funkcja sie teraz wywołuje. Dzięki.

    Jak zmienić (znaczy gdzie wielkość optymalizacji) żeby narazie ustawić na stałe bez optymalizacji.
  • #4 6792208
    wdogli
    Poziom 18  
    Wszystkie ustawienia dotyczące kompilacji są w pliku Makeflie
    Pozdrawiam
  • #6 6792916
    marekdrobin
    Poziom 13  
    O fajny program wreszcie nauczę się programowania AVR. Czy jest on łatwy w obsłudze bo jestem troszkę początkującym programistą.
  • #7 6818673
    Ajatol
    Poziom 15  
    Próbuje lepiej poznać symulator i mam problem którego nie rozumie.
    
    #define F_CPU 8000000
    #include <avr/io.h>
    #include <util/delay.h>
    
    ala (int,int);
    int main (void)
    {
    DDRA = 0xff	;	//Port A jako wyjœcia
    while(1)
    	{
    	PORTA = 0x0f ;
    	PORTA = 0x11 ;
    	PORTA = 0x19 ;
    	ala(3,5);
    	}
    }
    //Moja funkcja
    ala (pierwszy , drugi)
    {
    PORTA = pierwszy + drugi;
    PORTA = 0x19 ;
    PORTA = 0x29 ;
    }
    

    W powyższym programiku próbuje używać klawiszy F10 (wejście do funkcji) oraz F11(wykonanie funkcji bez wchodzenia do niej).
    Niestety wciskając F11 w momencie gdy jestem w lini przed wywołaniem funkcją wchodzi mi do niej a przecież nie powinien bo w opisie jest F11(step over).

    Drugi problem to pierwszy obieg pętli nie zmienia mi stanu portu A ale już od drugiego przebiegu symulator pokazuje prawidłowe wartości.

    Proszę nie zwracać uwagi na jakość programu ponieważ służy on wyłącznie do testów.
  • #8 6820495
    Dr.Vee
    VIP Zasłużony dla elektroda
    Wyłącz opytmalizację (flaga kompilatora -O0). Krokowe wykonywanie zoptymalizowanego kodu mija się z celem, bo kolejność wykonania instrukcji może nie zgadzać się z kolejnością w kodzie źródłowym, część wywołań funkcji i przypisań może zostać usuniętych itp.

    Pozdrawiam,
    Dr.Vee
  • #9 6820531
    Ajatol
    Poziom 15  
    Dzięki wielkie właśnie tego mi było trzeba. Miałem ustawioną flagę Os myśląc ze to jest bez optymalizacji. Teraz jest jak powinno być.
REKLAMA