IAR 3.2 eeprom bug
Fuzesi Arnold
arno at externet.hu
Wed Nov 9 09:36:01 CET 2005
Rögtön utána ahogy rájöttem mi a hiba, a while(1);
volt a következő amit kiprobaltam.
Ugyan az.
Aztan for(;;) temp++;
Hogy legyen "ertelme" az ures ciklusnak.
De semmi. Csak a fuggvenyhivas szeruseg ami utan bennmarad a mentes.
Arnold
----- Original Message -----
From: "Bali Zoltan" <eltexto at freemail.hu>
To: <avr-hun at x-dsl.hu>; <elektro at tesla.hu>; <Retro at lists.tmp.hu>
Sent: Wednesday, November 09, 2005 7:38 AM
Subject: Re: IAR 3.2 eeprom bug
> Hali !
>
> Nálam is hasonló mentés van a végén végtelen ciklussal.
> (4.10B-2)
> IT- ben van a mentés a végén while(1); -el.
> Próbáld meg egyszer ezt. Nálam jól müködik
> max. opt.-al.
>
>
> Üdv Zoli
>
>
>
>
> ----- Original Message -----
> From: Fuzesi Arnold
> To: elektro at tesla.hu ; Retro at lists.tmp.hu ; avr-hun at x-dsl.hu
> Sent: Tuesday, November 08, 2005 11:08 PM
> Subject: Re: IAR 3.2 eeprom bug
>
>
> 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
>
>
>
> _______________________________________________
> Avr-hun mailing list
> Avr-hun at x-dsl.hu
> http://www.x-dsl.hu/cgi-bin/mailman/listinfo/avr-hun
More information about the Elektro
mailing list