IAR 3.2 eeprom bug

Fuzesi Arnold arno at externet.hu
Tue Nov 8 23:08:56 CET 2005


Közben a 4.1-el is előjött. Kezdtem ideges lenni... aztan olyan helyen futottam a hibaba, amire nem szamítottam:

Ezt nezzetek:

A // -el jelolt resz az eredeti C forras.

//  129 void exception(uint line)
exception:
//  130 {
//  131  slong temp;
//  132  __watchdog_reset();
        WDR
//  133  
//  134  if(exception_log[line]<1000) exception_log[line]++;
        LDI R18, LOW(exception_log)
        LDI R19, (exception_log) >> 8
        LSL R16
        ROL R17
        ADD R18, R16
        ADC R19, R17
        MOVW R21:R20, R19:R18
        RCALL __eeget16_16
        CPI R16, 232
        LDI R20, 3
        CPC R17, R20
        BRCC ??exception_0
        SUBI R16, 255
        SBCI R17, 255
        MOVW R21:R20, R19:R18
        RCALL __eeput16_16
//  135 
//  136  temp=gettimer(TMR_MONOSTABLE);
??exception_0:
        LDI R16, 5
        LDI R17, 0
        RCALL gettimer
//  137 
//  138     if(ee_tmr_monostable!=temp) ee_tmr_monostable=temp;            !!!!!!!!!Hoppáááá - nincs asm kód hozzá :)
//  139     if(cfg.ee_netalarm_no) ee_netalarm_no=cfg.netalarm_no;         !!!!!!!!!Hoppáááá - ehhez sem... :-/
//  140 
//  141  for(;;);            //wait for WDT reset
??exception_1:
        RJMP ??exception_1
//  142 
//  143 }


Ha mókolok kicsit:

//  129 void exception(uint line)
exception:
//  130 {
        RCALL ?PROLOGUE4_L09
//  131  slong temp;
//  132  __watchdog_reset();
        WDR
//  133  
//  134  if(exception_log[line]<1000) exception_log[line]++;
        LDI R18, LOW(exception_log)
        LDI R19, (exception_log) >> 8
        LSL R16
        ROL R17
        ADD R18, R16
        ADC R19, R17
        MOVW R21:R20, R19:R18
        RCALL __eeget16_16
        CPI R16, 232
        LDI R20, 3
        CPC R17, R20
        BRCC ??exception_0
        SUBI R16, 255
        SBCI R17, 255
        MOVW R21:R20, R19:R18
        RCALL __eeput16_16
//  135 
//  136  temp=gettimer(TMR_MONOSTABLE);
??exception_0:
        LDI R16, 5
        LDI R17, 0
        RCALL gettimer
        MOVW R25:R24, R17:R16
        MOVW R27:R26, R19:R18
//  137 
//  138     if(ee_tmr_monostable!=temp) ee_tmr_monostable=temp;
        LDI R22, LOW(ee_tmr_monostable)
        LDI R23, (ee_tmr_monostable) >> 8
        MOVW R21:R20, R23:R22
        RCALL __eeget32_16
        CP R16, R24
        CPC R17, R25
        CPC R18, R26
        CPC R19, R27
        BREQ ??exception_1
        MOVW R17:R16, R25:R24
        MOVW R19:R18, R27:R26
        MOVW R21:R20, R23:R22
        RCALL __eeput32_16
//  139     if(cfg.ee_netalarm_no) ee_netalarm_no=cfg.netalarm_no;
??exception_1:
        LDS R16, (cfg + 119)
        TST R16
        BREQ ??exception_2
        LDS R16, (cfg + 24)
        LDI R20, LOW(ee_netalarm_no)
        LDI R21, (ee_netalarm_no) >> 8
        RCALL __eeput8_16
//  140  
//  141     __delay_cycles(1);                                             !!!!!!!!Ezt betettem, es megjavult...
??exception_2:
        NOP
//  142  for(;;);        //wait for WDT reset
??exception_3:
        RJMP ??exception_3
//  143 
//  144 }


Ez most BUG?

A for(;;); ele akar mit tehetek, a törzsébe is. Ha nem vmi függvénynek látszó dolog, akkor kioptimalizalja az előtte levő eeprom írást...
Low optimalizacional hagyja egyedul benne...felette kuka.

Hümm...

Arnold

----- Original Message ----- 
From: "Fuzesi Arnold" <arno at externet.hu>
To: <elektro at tesla.hu>; <Retro at lists.tmp.hu>; <avr-hun at x-dsl.hu>
Sent: Monday, November 07, 2005 7:38 PM
Subject: IAR 3.2 eeprom bug


> Sziasztok!
> 
> Valami bug van a 3.2-es IAR eeprom kezeleseben.
> Felraktam a 4.1-est es azzal ugy modik ahogy kene...
> 
> Csak gondoltam szolok, hatha mas is belefut.
> 
> Nem egyertelmu a hiba, nem tudtam lokalizalni.
> Tobb idot meg nem akarok már elcseszni vele...
> 
> Egyszeruen csak annyit akartam hogy:
> hiba eseten elmentek bizonyos regisztereket, majd for(;;)-al megvarom a wdt 
> resetet.
> Aztan ujraindulaskor meg betoltom.
> 
> De tök értelmetlenül működött.
> Nemelyik wdt reset utan törölte...vagy en nem is tudom mit csinalt.
> 
> Az eeprom valtozot ponyval kiolvasva maradt ami volt a kezdeti erteke. 
> Marhara nem ertem...
> Aztan a 4.1-el meg jo...
> 
> Szal gyanus hogy nem en hibaztam...
> 
> Arnold
> 


More information about the Elektro mailing list