Boot-Loader selber schreiben

#914669
Lesenswert?

Hallo,

ich möchte im Flash des uC einige Werte abspeichern, die auch nach einem 
Neustart erhalten bleiben.

Um sicher zu gehen, dass ich diese auf eine Adresse schreibe, die nicht 
anderweitig überschrieben wird, habe ich an das Verfahren vom Bootloader 
gedacht. Ich würde in den ersten Adressen die Werte ablegen und danach 
an die Stelle des eigentlichen Programms springen.

Hierbei ist mir jedoch unklar wie ich dem Programm sagen kann an WELCHE 
Adresse er springen soll. In C kann ich sie zumindest nirgends 
herausfinden.

Kennt sich damit jemand aus?
Gast #914734
Lesenswert?

Sowas läuft mit (inline-) Assembler. Aber wenn du Werte ablegen willst, 
hast du keinen eeprom im Controller? Ansonsten, ein 24C512 ist nich 
teuer und du hast ordentlich Platz da drin. Benötigt 2 Leitungen am 
Controller und ne Hand voll Bytes im Code.
#914738
Lesenswert?

Hans Wurst wrote:
> ich möchte im Flash des uC einige Werte abspeichern

Welcher µC denn?

Ohne diese Angabe kann man nichts zum Bootloader sagen.


> Ich würde in den ersten Adressen die Werte ablegen und danach
> an die Stelle des eigentlichen Programms springen.

Das ist ne Schnapsidee.
Bei den meisten MCs sind zu Anfang die Interruptvektoren, die möchte man 
ja benutzen.

Wenn Dein MC keinen EEPROM hat, speichere die Daten hinter das Programm.


Peter
Gast #914763
Lesenswert?

Also um mal mit dem Gerücht aufzuräumen, daß man nur mit Assembler durch 
die Gegend springen kann, hier mal eins von vielen Beispielen in C:

// Sprung an die Adresse 0x1F000
((void(*)())0x1F000)();

Für das dauerhafte Speichern von Werten ist eigentlich das interne 
EEPROM gedacht. Warum verwendest Du das nicht (vorausgesetzt Dein uC 
besitzt ein internes EEPROM - eine Angabe zum verwendeten uC fehlt ja)?

Schönen Gruss
#915103
Lesenswert?

Wenn ich meine Daten an eine feste Adresse (auch wenn es die letzte im 
Speicher ist) ablege, kann ich dann eigentlich sicher davon ausgehen, 
dass sie bei einem reset nicht überschrieben wird? Oder ist es eher so 
dass es zwar meistens funktioniert, man aber nicht 100%ig sicher sein 
kann?
Gast #915137
Lesenswert?

Hallo Hans,

dein uC wird bei einem Reset nicht ins Flash schreiben. Das tut er nur

a) wenn du einen Schreibprozess ins Flash programmiert hast oder
b) du ihn neu programmierst.

Um Daten ins Flash zu schreiben muss man (z.B. beim dsPic) eine Sequence 
einhalten. Vorher muss die ganze SpeicherPage(512 Adressen) geloescht 
werden!
Du musst natuerlich sicherstellen, dass beim Loeschen der SpeicherPage 
nicht Teile deines Programmcodes geloescht werden!

Lese im Datenblatt deines uC wie man ins Flash schreiben kann. Danach 
ist dir einiges klarer.


Deine Parameter sind im Flash somit eigentlich sicher.

Stefan
#915173
Lesenswert?

Ich möchte einfach nur ein paar Werte wie z.B. "Fehler xy ist 
aufgetreten" oder "Aktion xy wurde ausgeführt" vom uC in seinen eigenen 
flash abspeichern können.
Egal wie lange er in der Zwischenzeit keine Stromversorgung hatte, soll 
er diese Daten bei einem Neustart wieder auslesen können.

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