Forum: Mikrocontroller und Digitale Elektronik Zugriff auf ImprintTable (hier Tiny441) in C?


von H.Joachim S. (crazyhorse)


Lesenswert?

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
}

von Jim M. (turboj)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

Nimm boot_signature_byte_get() aus der <boot.h>

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.