Forum: Compiler & IDEs AVR-Studio Simulator und erzeugter Code


von Slowflyer (Gast)


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.

von Irgwer (Gast)


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.

von Sascha (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.