www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler-Frage


Autor: Jan Krause (jeangonzales)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgenden Ausschnitt eines C-Programms, das an einer Stelle 
synchron auf das Setzen eines Bits warten muss (wird über einen 
Interrupt gesetzt - und ja, ich bin sicherm dass der Interrupt ausgelöst 
wuird und das bit auch wirklich gesetzt wird!):

uint8_t miTWIMode;

...

while (!(miTWIMode == TWI_MODE_IDLE))
  ;


TWI_MODE_IDLE = 0. Ich will also so lange warten, bis die Variable 
miTWIMode den Wert "0" annimmt.

Das Problem ist nun, dass obwohl miTWIMode über einen Interrupt auf 0 
gesetzt wird, diese Schleife niemals verlassen wird.

Der erzeugte Assemblercode sieht so aus:
lds r24,miTWIMode
.L94
tst r24
brne .L94

Das kann doch nicht funktionieren - der Wert von miTWIMode wird doch nur 
einmal vor der Schleife eingelesen, oder?

Bin ich total bescheuert, oder was mache ich falsch?

Wenn ich in der Schleife irgend was kompilizierteres mache (z.B. ein 
Zeichen auf der UART ausgeben), dann klappts wunderbar.

Autor: Jan Krause (jeangonzales)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar,  Problem gelöst - jetzt hab ich endlich mal das 
Schlüsselwort "volatile" verwenden können ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.