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?
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.
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
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
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.
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?
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.