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

Zapis do zmiennej zawiesza program [winavr][m128]

AVRowiec 19 Lip 2010 14:25 1097 3
REKLAMA
  • #1 8307985
    AVRowiec
    Poziom 18  
    Mam w programie zmienną o nazwie fuses. Do tej pory używałem jej bez problemu. Do czasu odczytania jej z eeprom.
    Ku mojemu zdziwieniu zmienna o niemal identycznej nazwie, zadeklarowana tak samo działa. Dlaczego?

     unsigned char fuses2=0b10001111;
     unsigned char fuses=0b10001111;
    
    //----
    
     unsigned char xxx;
     xxx =  eeprom_read_byte(FUSES_OFFSET);
     fuses2 = xxx;	 
     fuses = xxx;   // ta linijka zawiesza program!


    Odczyt eeprom przez zmienną pomocniczą to pomysł z jakiegoś forum. Z tym czy bez tego program staje w miejscu gdzie jest 'fuses = ...'

    Najbardziej dziwi mnie to że wszystko od pół roku działało dobrze aż przestało kiedy wprowadziłem pare zmian w organizacji pamięci.

    Zmienna fuses nie jest nigdzie indziej używana. Co ciekawe w programie mam więcej zmiennych tego typu w ten sam sposób zapisywanych i odczytywanych z eeprom. I tylko fuses robi problemy. W necie nie znalazłem nic na temat fuses jako słowa zastrzeżonego czy czegoś w tym stylu.

    Zawiesza się tylko funkcja main. Timer migający diodą działa. Przed odczytaniem zmiennej kasuje całą pamięć EEPROM. O dziwo kiedy wcześniej podstawie tam jakąś wartość (np 0xAF) to odczyt jest poprawny. Jak są zera to coś nawala.

    Ma ktoś pomysł co jest grane?
  • REKLAMA
  • Pomocny post
    #2 8308269
    tmf
    VIP Zasłużony dla elektroda
    Z pewnością nie ta linijka jest przyczyną zawieszania programu. Jeśli się robią takie cuda to oznaka, że brakuje pamięci, albo gdzieś wychodzisz poza indeksy tablic itd. Także szukaj w innym miejscu.
  • REKLAMA
  • #3 8308567
    rpal
    Poziom 27  
    włącz sobie symulator i zobaczysz gdzie się program wykrzacza tak jak wspominał tmf pewnie brakuj ram i program zmienia informacje zapisane w stosie. Nie masz komunikatów podczas kompilacji o braku pamięcie ?
  • #4 8308612
    AVRowiec
    Poziom 18  
    Nie, pamięci nie brakuje.
    Zajęte jest ok 40% pamięci kodu i ok 80% na zmienne.
    To atmega128. Nie łatwo ją zapchać.
    Najbardziej dziwi mnie to że program wykrzacza się tylko na tej jednej zmiennej. Niezależnie od jej nazwy. Jak mówiłem w programie jest więcej zmiennych podobnego typu i zastosowania ale problem jest tylko z tą.

    Dodano po 15 [minuty]:

    Zabijcie mnie - jestem idiotą.

    Błąd był rzeczywiście gdzie indziej - poprostu TA zmienna była odpowiedzialna za prace terminala. if zmienna==0 then wyłącz terminal ;]

    Niech ktoś skasuje ten temat bo mi wstyd ;/

    Dodano po 40 [sekundy]:

    cóż.. po pół roku pisania kodu zapomina się co do czego służy... ;/
REKLAMA