mikrocontroller.net

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


Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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):
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.

Autor: Irgwer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.