Klar, ist mit ein paar Zeilen Assemblercode erledigt und funktioniert auch. Geht aber davon aus, dass die zu lesende Adresse in R26 übergeben wird und das Ergebnis in R30 zurückgegeben wird. Und genau das gefällt mir nicht. Mit nem anderen Compiler wird das wahrscheinlich eh nicht funktionieren (damit kann ich leben), aber wer weiss schon wie es nach einem Compilerupdate aussieht? Diese Konvention muss ja nicht erhalten bleiben. Kann man das komplett in C erledigen? unsigned char ReadImprintTable (unsigned char adr) { #asm .equ RSIG=5 .equ SPMEN=0 .equ SPMCSR=0x37 push r16 in r16, sreg mov r30, r26 clr r31 ldi r26, ((1<<RSIG)|(1<<SPMEN)) out SPMCSR, r26 lpm r30,Z out sreg, r16 pop r16 #endasm }
H.Joachim S. schrieb: > Diese Konvention muss ja nicht erhalten > bleiben. Es ist extrem unüblich, das C-ABI beim Compiler zu ändern. Dazu zählt in welchen Registern/Memory Locations Funktionsargumente und Rückgabewerte liegen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.