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.