Forum: Mikrocontroller und Digitale Elektronik AVR Register loggen


von Luigi A. (spok)


Lesenswert?

Hallo zusammen, gibt es ein Tool oder Programm um die Register während 
der Simulation im AVR Studio 4 zu loggen? So dass die Inhalte und 
Änderngen z.B.in einer txt Datei gelistet werden oder ähnlich?

Danke!

von Karl M. (Gast)


Lesenswert?

Luigi,

ein Simulation funktioniert nie zu 100% geschweige 100% richtig.

So Überprüfe ich Programmabschnitte
a) durch Ausgabe über einen seriellen Datenstrom - Uart,
b) bilde den Programmablauf einer Funktion geschrieben in einer 
Hochsprache auf dem Papier nach und kann dann deren Funktionalität 
beweisen oder
c) untersuche den Programmablauf einer Funktion auf Assemblerebene.

Dazu benötigt man nur das erzeugte Assembler Listing und zum Verständnis 
der Anweisungen, das Atmel AVR 8-bit Instruction Set:

* http://www.atmel.com/images/atmel-0856-avr-instruction-set-manual.pdf

von Wolfgang A. (Gast)


Lesenswert?

Luigi A. schrieb:
> Hallo zusammen, gibt es ein Tool oder Programm um die Register während
> der Simulation im AVR Studio 4 zu loggen?

Wozu, guck dir die kritischen Stellen an und denke mit.

von Luigi A. (spok)


Lesenswert?

Wolfgang A. schrieb:
> Wozu, guck dir die kritischen Stellen an und denke mit.

... Um eine Routine zu verstehen würde es mir helfen die Veränderungen 
der Register beim Ablauf aufzulisten. .. Bitte geht bei mir davon aus 
dass ich sehr wenig Erfahrung habe und nicht so schnell die Hintergründe 
einer Routine nachvollziehen kann.

von Dietrich L. (dietrichl)


Lesenswert?

Luigi A. schrieb:
> So dass die Inhalte und
> Änderngen z.B.in einer txt Datei gelistet werden oder ähnlich?

Die Information alleine ist aber (meist) wenig hilfreich, wenn man nicht 
auch die Programmstellen kennt, an denen sich die Inhalte ändern. Das 
mit zu protokollieren wäre bestimmt nicht trivial und außerdem 
umfangreich.

Gruß Dietrich

von Luigi A. (spok)


Lesenswert?

Die Programmstelle müsste ich natürlich markieren können.. Sonst bleibt 
nur die manuelle Variante , Schritt für Schritt debuggen und die 
Registeänderungen auf Papier schreiben. Diese wollte ich damit 
vermeiden.

von S. Landolt (Gast)


Lesenswert?

in memoriam KLEN

DER INFORMATIONSVERDICHTER

Stumm berechnet gern und viel
darum ärgert ihn das Spiel
des (fast niemals Angeguckten)
Angezeigten, Ausgedruckten.

Meiste Information
steckt in sechs, acht Wörtern schon,
doch ein dump auf hundert Seiten
kann Entsetzen nur verbreiten.

Es erfindet drum sein Geist
etwas, was ihn dem entreißt:
Subroutinen, die verdichten
weil sie Redundanz - vernichten!

Beispielsweise dies Produkt
würd' - gelöscht, nicht ausgedruckt.
Tausend K gefüllt damit
gäben grade erst - Ein - - Bit!!

von hui (Gast)


Lesenswert?

S. Landolt schrieb:
> in memoriam KLEN
>
> DER INFORMATIONSVERDICHTER

Spam vom Freizeittroll.

von Karl M. (Gast)


Lesenswert?

Luigi A.,

wie Du feststellen konntest, ist uns so eine Funktion nicht bekannt, 
deshalb auch die vielen anderen Wege.
Es kann schon sein, dass ein Anwender so ein Tool mal programmiert hat, 
aber ober der deinen Beitrag hier liest, ist eher unwahrscheinlich.

Bitte beschreibe genau um was es denn hier geht und was Dir unklar bei 
einem Programm ist.

Hast Du den Quellcode, nur den Assemblercode oder nur ein Intel HEX- 
oder Binär Datei ?

von Luigi A. (spok)


Lesenswert?

... Es geht um die Routine hier aus dem Tutorial von P. Danneger. Unten 
habe ich meine Interpretation daneben geschrieben soweit ich es 
verstabden habe. Einige Schritte sind mir noch unklar.
1
timer_overflow0:               ; Timer Overflow Interrupt
2
 
3
    push    r0                 ; temporäre Register sichern
4
    in      r0, SREG
5
    push    r0
6
    push    iwr0
7
    push    iwr1
8
 
9
get8key:                       ;/old      state     iwr1      iwr0
10
    mov     iwr0, key_old      ;00110011  10101010            00110011
11
    in      key_old, key_pin   ;11110000
12
    eor     iwr0, key_old      ;                              11000011
13
    com     key_old            ;00001111
14
    mov     iwr1, key_state    ;                    10101010
15
    or      key_state, iwr0    ;          11101011
16
    and     iwr0, key_old      ;                              00000011
17
    eor     key_state, iwr0    ;          11101000
18
    and     iwr1, iwr0         ;                    00000010
19
    or      key_press, iwr1    ; gedrückte Taste merken
20
;
21
;
22
    pop     iwr1               ; Register wiederherstellen
23
    pop     iwr0
24
    pop     r0
25
    out     SREG, r0
26
    pop     r0
27
    reti

Hier meine Interpretation:
1
    mov     iwr0, key_old     ;alter Tastenzustand nach iwr0 sichern
2
    in      key_old, key_pin  ;Tastenzustand abfragen
3
    eor     iwr0, key_old     ;prüfen ob ein Flankenwechsel erfolgt ist 
4
    com     key_old           ;Tastenstastatus umkehren
5
    mov     iwr1, key_state   ;? 
6
    or      key_state, iwr0   ;?
7
    and     iwr0, key_old     ;Prellzähler hochzählen wenn Taste gedrückt.
8
    eor     key_state, iwr0   ;? 
9
    and     iwr1, iwr0        ;wenn Prellzähler Wert 3 erreicht Tastenzustand gedrückt weitergeben.
10
    or      key_press, iwr1   ;gedrückte Taste merken

: Bearbeitet durch User
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.