www.mikrocontroller.net

Forum: Compiler & IDEs [avr] avr-gcc assembler listing


Autor: Tom M. (tomm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo


Ich rätzle gerade über dem von avr-gcc Assembler Listing (.lst Datei). 
Die Einsprungsadresse für meine function BlinkLed() scheint nicht zu 
passen. Funktionieren tut das Programm allerdings schon.
...
000000ec <BlinkLed>:

void BlinkLed( uint8_t mytaskid ) {
   PINB |= (1<<PB4);       // toggle pin
  ec:   1c 9a           sbi     0x03, 4 ; 3
}
  ee:   08 95           ret
...

Soweit, sogut. Die BlinkLed function steht also an 0x00EC. Dasselbe 
steht auch im .map file, wird also wirklich so sein - oder?

Wenn ich das Listing weiter verfolge, steht da:
   AddTask( BlinkLed, 0, hz );   // start immediately, run every second
 132:   86 e7           ldi     r24, 0x76       ; 118
 134:   90 e0           ldi     r25, 0x00       ; 0
 136:   60 e0           ldi     r22, 0x00       ; 0
 138:   70 e0           ldi     r23, 0x00       ; 0
 13a:   48 e5           ldi     r20, 0x58       ; 88
 13c:   52 e0           ldi     r21, 0x02       ; 2
 13e:   0e 94 ec 00     call    0x1d8   ; 0x1d8 <AddTask>

Das Registerpaar r25:r24 sollte doch 0x00EC enthalten?! ("hz" ist mit 
600 #define'd, das sind 0x0258 in r21:r20, die 0 ist in r23:22 
abgelegt).

AddTask() übernimmt die Adresse in ein array, damit die function durch 
den scheduler periodisch ausgeführt wird. Das funktioniert auch - aber 
weshalb??? %)

: Verschoben durch Admin
Autor: Tom M. (tomm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Pinkelpause tut immer gut... ;)

Ich compiliere für einen atmega168 und mag mich erinnern, dass ich im 
Datenblatt irgendwo von der "Wortgrösse" gelesen habe. Meine function 
beginnt auf Byte-Adresse 0xEC oder eben Word-Adresse 0x76. Dezimal sieht 
man's besser: 236 vs. 118.

Ich vermute mal, das ist des Rätzels Lösung...

Schönen Abend noch & happy hacking. :)

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.