www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Boot-Loader selber schreiben


Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Guile Lampert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du die Frage konkretisieren?

Autor: unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabio (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hans Wurst (hans_wurst)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.