Forum: Mikrocontroller und Digitale Elektronik Wie bekomme ich ein paar Bytes an eine feste Adresse?


von H.Joachim S. (crazyhorse)


Lesenswert?

Hintergrund: das ganze ist ein updatefähiges Gerät (mit AVRootloader).
Beim Brennen des Bootladers möchte ich gern auch gleich die aktuelle 
Anwendungssoftware mit draufbraten, klappt auch, allerdings gibts dann 
ein Problem mit der Versionsnummer.
In meiner Version (Mega8, Bootlader ab 0x1c00) steht die Versionsnummer 
auf 0x0dfe und 0x0dff, also 4 Byte. Solange man die Sache mit dem 
Bootlader macht, ist das auch ganz easy.
Also ich brauch sowas:
#asm
.cseg
.org 0x0dfe
.db 1,2,3,4
#endasm
allerdings in einem C-Programm

Ja, man könnte das Hex-File zu Fuss bearbeiten (so ist es im moment auch 
:-)
Schöner und weniger fehleranfällig wäre es, das direkt im C-Programm zu 
machen.

Irgendwelche Ideen?

von 1gast (Gast)


Lesenswert?


von Simon K. (simon) Benutzerseite


Lesenswert?

Ganz so einfach geht es nicht, da es sich hier um den Flash-Speicher 
handelt. Da musst du mit Sections arbeiten.

von H.Joachim S. (crazyhorse)


Lesenswert?

Genau, der flash ist das Problem, eine einfache Lösung scheint es dafür 
nicht zu geben.
Eh ich mich durch unbekanntes Terrain wühle (und mir womöglich 
irgendwelche Fallstricke einbaue), werde ich die Versionsverwaltung doch 
dem Bootlader überlassen bzw. nur dort einstellen.
Nach erfolgtem update an meinem Testgerät Chip auslesen und das Hex-file 
zum Bestücker schicken.

von Simon K. (simon) Benutzerseite


Lesenswert?

Nicht aufgeben. Schau mal in die avr-libc. Da gibts sogar was dazu:
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_binarydata

EDIT: Noch mal nachgedacht: Das geht doch viel einfacher. Einfach eine 
statische/globale Variable mit PROGMEM anlegen und initialisieren. Aber 
die Variable muss dann trotzdem per section angeordnet werden.

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.