Forum: Mikrocontroller und Digitale Elektronik EEPROM Zugriffe aus Bootloader und Hauptprogramm


von Manuel H. (manu77)


Lesenswert?

Hallo,
Wie sind Eeprom Zugriffe sowohl vom Bootloader als auch vom 
Hauptprogramm auf eine Variable am Besten zu realisieren?
Momentan arbeite ich mit Sections für jede Variable, gleichzusetzen mit 
direkter Adressierung.

von holger (Gast)


Lesenswert?

Nur so ne blöde Idee:

Speichere deinen Variablennamen und deren Wert als Text im EEPROM.

"Var1=1234\n"

Danach können Bootloader und Applikation dann suchen und
entprechend den Wert extrahieren oder ändern.

von Manuel H. (manu77)


Lesenswert?

Es geht

holger schrieb:
> Nur so ne blöde Idee:
>
> Speichere deinen Variablennamen und deren Wert als Text im EEPROM.
>
> "Var1=1234\n"
>
> Danach können Bootloader und Applikation dann suchen und
> entprechend den Wert extrahieren oder ändern.

Es geht um Binärdaten, leider nicht zu gebrauchen.

von jz (Gast)


Lesenswert?

Ist das dein Ernst? ^^
Irgendwie lassen sich alle Daten, die du irgendwo nutzt, auf 
"Binärdaten" zurückführen. Wie soll der PC damit auch sonst was 
anfangen...

von Manuel H. (manu77)


Lesenswert?

jz schrieb:
> Ist das dein Ernst? ^^
> Irgendwie lassen sich alle Daten, die du irgendwo nutzt, auf
> "Binärdaten" zurückführen. Wie soll der PC damit auch sonst was
> anfangen...

Trotzdem ist es nicht Sinnvoll Daten als "Klartext" in den Eeprom zu 
schreiben. Was ich zum Ausdruck bringen wollte ist, dass das 
Terminierungszeichen wegfällt. Auf die Effizienz gehe ich erst gar nicht 
ein ^^

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Manuel H. schrieb:
> Wie sind Eeprom Zugriffe sowohl vom Bootloader als auch vom
> Hauptprogramm auf eine Variable am Besten zu realisieren?

 Array.

von holger (Gast)


Lesenswert?

>Trotzdem ist es nicht Sinnvoll Daten als "Klartext" in den Eeprom zu
>schreiben. Was ich zum Ausdruck bringen wollte ist, dass das
>Terminierungszeichen wegfällt. Auf die Effizienz gehe ich erst gar nicht
>ein ^^

Nur weil es dir nicht gefällt ist es nicht sinnlos.
Es ist ein gangbarer Weg der viel flexibler ist als
deine Sections. Von Effizienz war nicht die Rede.
Also beschwer dich nicht;)

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Manuel H. schrieb:
> Wie sind Eeprom Zugriffe sowohl vom Bootloader als auch vom
> Hauptprogramm auf eine Variable am Besten zu realisieren?

 Und wenn du nicht mit Array arbeiten willst...
 Variablen werden so ins Eeprom geschrieben, wie sie deklariert
 werden.
 Wenn Bootloader und Hauptprogramm zusammen kompiliert werden:
   Eine Deklaration genügt.
 Wenn Bootloader und Hauptprogramm getrennt kompiliert werden:
   Deklaration copy & paste.

von holger (Gast)


Lesenswert?

> Wenn Bootloader und Hauptprogramm getrennt kompiliert werden:
>   Deklaration copy & paste.

Nein, eine C Datei wo der ganze Kram drin steht und
diese in beiden Projekten hinzufügen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

holger schrieb:
> Nein, eine C Datei wo der ganze Kram drin steht und
> diese in beiden Projekten hinzufügen.

 Oder so.

von Frank K. (fchk)


Lesenswert?

Vorschlag: TLV: Tag-Length-Value
Tag: uint32 bzw 4 Byte Parametername, zB als FOURCC, zB 'Vers'
siehe auch http://www.fourcc.org
1
#define MAKEFOURCC(ch0, ch1, ch2, ch3)  \ 
2
    ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |  \ 
3
    ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ));
4
5
ulTag=MAKEFOURCC('V','e','r','s');

Length: uint32 Länge des nachfolgenden Datenbereiches in Bytes

Value: binäre Daten, auf eine durch 4 teilbare Länge aufgefüllt

Danach kommt das nächste TLV-Tupel.

Endeerkennung: entweder enthält das erste TLV-Tupel die restlichen TLVs 
als Value, dann steht in dessen Length-Feld die Datenlänge (so macht es 
das WAV oder RIFF oder IFF-Dateiformat)
oder das letzte TLV-Tupel enthält eine Länge von 0 Bytes

Dieses Schema wird öfters verwendet.

fchk

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.