Moin,
so sieht das listing eines Timer Overflows bei mir aus. Den mittleren
Teil habe ich mal entfernt, da passiert nichts wirklich relevantes
(nichts was den Stack betrifft und keine Sprünge in den dargestellten
Text).
Was mich interessiert, was sollen die beiden "rcall .+0"?
Es wird die Rücksprungadresse dann ja mit POP R0 vom Stack genommen,
aber was passiert dann?
Rcall bewirkt, dass der Programm Counter auf dem Stack gespeichert wird
und der Stack Pointer erhöht. AVR-GCC scheint sich auf diese Weise
dynamsich RAM zu allokieren.
1
bc8:00d0rcall.+0;0xbca<__vector_13+0x2a>
2
bca:00d0rcall.+0;0xbcc<__vector_13+0x2c>
3
bcc:cdb7inr28,0x3d;61
4
bce:deb7inr29,0x3e;62
Hier wird der Y-Pointer vor den mit RCALL reservierten Bereich gesetzt.
Andy H. schrieb:> Register 61 und 62 sind ja der Stackpointer, das kann man leicht> übersehen.
Dann schau dir statt des disassemblierten Codes doch den generierten
Code des Compilers an (Compileroption -S):