AVR Bootloader

Gast #875746
Lesenswert?

Moin,

ich versuche gerade einen Bootloader für meinen AVR in C zu 
programmieren. Meine ersten Versuche in ASM haben wunderbar 
funktioniert. Jetzt habe ich allerdings folgende Probleme welche sich in 
ASM einfach lösen ließen:

1) Wie springe ich in C an eine bestimmte Adresse ? D.h. wenn der 
Bootloader sich beenden soll habe ich in ASM einfach einen Sprung an 
0x0000 gemacht. Wie macht man sowas in C ?

2) Um herauszufinden ob ein Update der eigentlichen Firmware notwendig 
ist liest mein ASM-Bootloader die Firmwareversion an einer bestimmnten 
Adresse im Flash. Wie geht das in C ? In ASM war das einfach per LPM 
möglich. Die Version wurde im Hauptprogramm einfach per .ORG-Anweisung 
an eine bestimmte Adresse gelegt.

Danke.
Gast #875772
Lesenswert?

Prinzipiell ja nichts, aber kann ich da für das Problem 2) auch .ORG 
Benutzen dass das genau an der entsprechenden Stelle im Flash steht ? 
Weiß der C-Compiler dass er den entsprechenden Bereich aussparen muss ?
Gast #875967
Lesenswert?

Das Tutorial hatte ich mir schon angeschaut. Dort legt aber der Compiler 
(oder wer auch immer) fest wo das Ding nachher im Flash liegt. Ich will 
es halt an einer bestimmten Stelle haben. Muss es ja im Bootloader von 
genau dieser Stelle lesen.
#876012
Lesenswert?

Ich sehe da zwei Möglichkeiten:

1) Pack die Variable in eine separate Section und weise den Linker an, 
diese Section an eine bestimmte Adresse zu packen.

2) Lass Compiler und Linker aus dem Spiel und "bastle" (z.B. mit einem 
Shell-Script) die Versionsinfo direkt in das HEX-File. Dessen Format ist 
ja nicht soo kompliziert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren