Forum: Mikrocontroller und Digitale Elektronik Boot-Loader selber schreiben


von Hans W. (hans_wurst)


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?

von nils (Gast)


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.

von Peter D. (peda)


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

von Guile Lampert (Gast)


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

von Hans W. (hans_wurst)


Lesenswert?

Danke für die vielen Antworten.

Ich nutze den MSP430F247. Einen EEPROM hat er nicht, allerdings ist doch 
der flash (meines Wissen nach) genauso ein nichtflüchtiger Speicher.

Einen zusätzlichen Speicher kann ich leider nicht hinzufügen, da die 
Hardware bereits fix vorgegeben ist.

von Hans W. (hans_wurst)


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?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Kannst Du die Frage konkretisieren?

von unbekannter (Gast)


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

von Fabio (Gast)


Lesenswert?

Kann ich Stefan nur zustimmen! Verwende den MSP430F449 und muss in 
unserer Anwendung auch Daten speichern. Habe jetzt schon über 6000 Stück 
augeliefert und keinen Datenverlust gehabt. Wer oder was soll den in den 
Flashspeicher schreiben?

von Hans W. (hans_wurst)


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.

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.