Problem mit leerer "do.while." Warteschleife

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
Gast
Ich hatte folgende Deklaration probiert:

volatile register u16 MesswNeu2Kanal_u16     asm("r2");

...und dann folgende Compilerwarnung übersehen:

"../../main.c:87: warning: volatile register variables don't work as you 
might wish
"

Wer lesen kann, ist klar im Vorteil.
Danke für den Tipp!

Viele Grüße
Harry

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.