N. G. schrieb:> Wie man sieht werden im Prolog der Funktion 2x RCALL . erzeugt.>> Ich kann mir das nicht erklären.
Die zwei RCALLS dienen lediglich dazu, 6 Bytes Platz auf dem Stack für
dein lokales Array zu schaffen. Das dient der Optimierung der Codegröße,
da es das mit lediglich zwei Instruktionen schafft. Alle anderen
Möglichkeiten wären größer.
Rolf M. schrieb:> Die zwei RCALLS dienen lediglich dazu, 6 Bytes Platz auf dem Stack für> dein lokales Array zu schaffen. Das dient der Optimierung der Codegröße,> da es das mit lediglich zwei Instruktionen schafft. Alle anderen> Möglichkeiten wären größer.
Ach so okay, danke!
Diese Möglichkeit kannte ich noch nicht.
Das wäre dann schon geklärt, so einfach kanns manchmal sein.
Danke und frohe Weihnachten
N.G.
Rolf M. schrieb:> Die zwei RCALLS dienen lediglich dazu, 6 Bytes Platz auf dem Stack für> dein lokales Array zu schaffen.
Da gilt aber nur für den ATmega2560/1. Auf kleineren AVRs pusht RCALL
nur 2 Byte.
Peter D. schrieb:> Rolf M. schrieb:>> Die zwei RCALLS dienen lediglich dazu, 6 Bytes Platz auf dem Stack für>> dein lokales Array zu schaffen.>> Da gilt aber nur für den ATmega2560/1. Auf kleineren AVRs pusht RCALL> nur 2 Byte.
Ja, das gilt nur für AVRs mit der avr6-Architektur (alle mit 256kB
Flash, z.B. auch der ATmega256rfr2), da diese einen PC von > 16bit (= 3
Byte) haben.
Auf einem kleineren AVR mit nur 2 Byte Program Counter sind es auch
wirklich 3x RCALLs.
N. G. schrieb:> Ja, das gilt nur für AVRs mit der avr6-Architektur
Du hattest ja geschickterweise erwähnt, dass sich um so einen handelt:
N. G. schrieb:> wird mit avr-gcc -s -Os -mmcu=avr6
Ich hatte anfangs auch gedacht, dass da doch eigentlich noch 2 Bytes
fehlen, und dann hab ich obige Zeile gesehen.