AVR-Studio Simulator und erzeugter Code

Gast #284815
Lesenswert?
• ▲
▼
Hallo,

ich bin mir nicht ganz sicher ob das hier das richtige Unterforum ist.
Ich beschreibe mal das Phänomen auf das ich gestoßen bin. Ich habe ein
Projekt in C (winavr) angelegt und will dieses nun im AVR-Studio
simulieren (Atmega88).

Eine Zeile wie diese (data ist uint8_t):
1
data = UDR0;

wird folgendermaßen im Disassembler angezeigt:
+00000231:   914000C6    LDS     R20,0x00C6       Load direct from data
space

Wenn ich nun mit F11 durch das Programm gehe und an dieser Stelle in
der I/O-View das UDR0 Register verändere und dann den lds Befehl
ausführen lasse, wird der Wert aus dem UDR0 nicht in r20 oder data
kopiert. Das bedeutet, dass ich nicht vernünftig debuggen kann und im
watch-Fenster immer die Werte manuell ändern muss. Ist das ein
Simulator-Bug oder kommt der Simulator mit den erzeugten Code des
avr-gcc nicht klar?

Entschuldigt bitte, wenn es sich wirr anhört.
Gast #284816
Lesenswert?
• ▲
▼
Hallo Slowflyer,

der Simulator verhält sich prinzipiell richtig. Wenn du 'per Hand bzw.
Maus' den Inhalt des UDR0-Registers setzt, so ist das genauso, als ob
du es per Programm machen würdest. Du übergibst damit ein Byte an den
USART welches er ausgeben soll. Schau doch mal den Inhalt des Registers
nach F11 an. Dann steht es sofort wieder auf 0, da dein eingetragenens
Byte zum Senden in ein internes Register übernommen wurde. Der LDS
Befehl liest daher den Wert 0 aus dem UDR0 in das Register R20.
Die Simulation eines Empfangs über den USART ist nicht ganz einfach, da
dabei am RXD-Pin die Bits seriell gesetzt werden müssen, und dies auch
noch im richtigen Takt.
Einfacher ist es da deine Variable 'data' direkt auf den zu
simulierenden Wert zu setzen.
Gast #284817
Lesenswert?
• ▲
▼
Hi Slowflyer,

ich hab deinen Fehler mal bei einem von mir lauffähigen Programm
getestet und musste feststellen, dass dieser Fehler auch bei mir
auftritt. Dies liegt wohl daran, dass das Register UDR0 nur aus dem
Prgrammcode oder von der Hardware verändert werden darf.

Kleiner Tip: verändere data direkt nach dem lesen von UDR0 und du
kannst dann auch gleich weiter debuggen.

Gruß
   Sascha

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 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.