Gast
#1512838
Hallo zusammen, ich habe eine Software, die mit WinAVR aus 2006 compilliert wurde und problemlos läuft. Mit WinAVR-20090313 lässt sie nicht mehr lauffähig übersetzen. Es handelt sich um folgenden Codeschnipsel: ---------------------------------------------------- Deklaration: register u16 MesswNeu2Kanal_u16 asm("r2"); ---------------------------------------------------- Codeschnipsel, der darauf wartet, dass die Variable im Interrupt verändert wird: do { } while (0 == MesswNeu2Kanal_u16); ---------------------------------------------------- Im AVR Simulator hängt sich die Software hier weg: +00000235: 2823 OR R2,R3 Logical OR +00000236: F009 BREQ PC+0x02 Branch if equal +00000237: CFFF RJMP PC-0x0000 Relative jump +00000238: CFFF RJMP PC-0x0000 Relative jump Gibt es bekanntermaßen Probleme mit solch leeren Schleifen? Zeile 237 und 238 sind doch wohl ein komplettes Aufhängen der Software? Optimierung ist auf S, eine 0 hilft hier aber auch nicht. Ein volatile vor der Variablen hilft auch nicht. Und so sieht das läuffähige mit WinAVR-20060421 aus: +0000026A: 0143 MOVW R8,R6 Copy register pair 1254: } +0000026B: 1421 CP R2,R1 Compare +0000026C: 0431 CPC R3,R1 Compare with carry +0000026D: F3E9 BREQ PC-0x02 Branch if equal Viele Grüße Harry