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


von Tom M. (tomm) Benutzerseite


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.
1
...
2
000000ec <BlinkLed>:
3
4
void BlinkLed( uint8_t mytaskid ) {
5
   PINB |= (1<<PB4);       // toggle pin
6
  ec:   1c 9a           sbi     0x03, 4 ; 3
7
}
8
  ee:   08 95           ret
9
...

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:
1
   AddTask( BlinkLed, 0, hz );   // start immediately, run every second
2
 132:   86 e7           ldi     r24, 0x76       ; 118
3
 134:   90 e0           ldi     r25, 0x00       ; 0
4
 136:   60 e0           ldi     r22, 0x00       ; 0
5
 138:   70 e0           ldi     r23, 0x00       ; 0
6
 13a:   48 e5           ldi     r20, 0x58       ; 88
7
 13c:   52 e0           ldi     r21, 0x02       ; 2
8
 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
von Tom M. (tomm) Benutzerseite


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. :)

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.