Forum: Mikrocontroller und Digitale Elektronik UART im AVR Studio simulieren


von Burkhard (Gast)


Lesenswert?

hi

Ich habe ein Programm für meinen at90S3213 geschrieben. Um Fehler in
dem Programm zu finden
würde ich es gerne debuggen. Ich benutze dafür das AVR Studio von
Atmel.
Leider hab ich in meinem Programm eine Stelle, an der mein weiterer
Programmablauf von
einem über den UART empfangenen Zeichen abhängt. Da ich in der
Simulationsumgebung dieses Zeichen
nicht gesendet bekomme, wird der Codeteil in dem ich den Fehler vermute
nie ausgeführt.

also konkret:



  c = uart_getc();

        if ( c & UART_NO_DATA )
        {
            /*
             * no data available from UART
             */
        }
        else
        {
            /*
             * new data available from UART
             */

  //... weiterverarbeitung des empfangenen Zeichens - diesen Teil würde
ich gerne in meiner Simulationsumgebung prüfen
  }


gibt es eine Möglichkeit den Empfang eines Zeichens zu simulieren, oder
können die variablen geziehlt aus dem AVRStudio so
verändert werden, dass man in solche Fälle springen kann???

Burkhard

von Markus (Gast)


Lesenswert?

Hallo

ich nehme mal an, daß du in der Funktion "uart_getc()" das
UDR-Register ausliest. Wenn du kurz davor einen Breakpoint setzt und
dann das UDR mit dem Zeichen manuell lädst, das du empfangen willst,
dann sollte das gehen.

Gruß
Markus

von Sven (Gast)


Angehängte Dateien:

Lesenswert?

danke dir Markus - der Tip war schon mal sehr gut. Meine "uart_getc()"
 ist allerdings etwas komplizierter aufgebaut. Zugegebenermaßen ist sie
aber nicht von mir, sondern ich binde sie aus der uart Bibliothek von
Peter Fleury in mein Programm mit ein.
Das UDR Register manuell zu laden funktioniert leider nicht. Allerdings
find ich mich auch nicht so recht in dem Code zurecht, den ich da
eingebunden habe, und was der genau von mir will. Ich habe ihn mal mit
angehängt - wär nett, wenn du meal einen Blick auf die uart_getc
Funktion werfen koenntest.

von Thorsten (Gast)


Lesenswert?

Machs doch einfach so:

#define DEBUG
...
...
#ifdef DEBUG
   weiterverarbeitung des empfangenen Zeichnes
#else
   deine normale Routine wie oben beschrieben
#endif

Also mit anderen Worten du tust einfach so, als ob das richtige Zeichen
empfangen wurde und keine weiteren Zeichen im UART sind und siumulierst
nur diesen Teil.

von Sven (Gast)


Lesenswert?

danke dir Thorsten,
das denke ich ist genau das gesuchte, ich wäre dir jetzt nur noch für
einen kleinen Hinweis dankbar, wohin ich die einzelnen zeilen zu
schreiben habe und was noch zusätzlich hineinkommt an der Stelle der
Punkte.

Ich nehm mal an alles in den Headerbereich und statt der Punkte meine
anderen #define's. So wars gemeint nehm ich an. Richtig ?

Sven

von Thorsten (Gast)


Lesenswert?

> Ich nehm mal an alles in den Headerbereich und statt der Punkte
> meine anderen #define's. So wars gemeint nehm ich an. Richtig ?

Ja genau. Das #define kommt in den Headerbereich, das #ifdef etc. in
dein Programm.

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.