Hi, auf meinem Mega16, an den ich bei diesem Projekt gebunden bin, ist der EEPROM voll, ich bräuchte aber noch Platz für 128 Byte zusätzliche Daten. Nun habe ich mir folgendes überlegt: Da ich sowieso einen Bootloader habe, könnte ich bin Bootloader Bereich eine Funktion installieren, welche einen Pointer auf einen Bereich im Ram als Argument nimmt und dann 128 Byte an eine definierte Adresse in den Flash schreibt. Die Vorgensweise wäre also folgende: Im Hauptprogramm: -Ram beschreiben mit Daten -Jump zu funktion im Bootloader mit (((void(*)(void))0x3F00)(&data)); //0x3F00 ist Adresse der Funktion im Bootloader Im Bootloader: - Löscht Page(s) - Beschreibt sie aus Ram - Springt zurück ins Hauptprogramm Im Hauptprogramm kann man dann auf die Daten zugreifen, da die Adresse im Flash bekannt ist.. Bevor ich mich jetzt stundenlang da dran setzte: Ist das machbar, oder habe ich einen Denkfehler? Habt ihr Ideen für konkrete Ansätze? Danke PS.: Nein ich kann keinen Prozessor mit größerem EEPROM nehmen, ich bin an die Hardware gebunden.
sollte gehen, aber warum in den bootloader springen? Es sollte doch auch so möglich sein, eine Page zu schreiben. Eventuell kann man auch darüber nachdenken den eeprom zu packen.
@ ben (Gast) >auf meinem Mega16, an den ich bei diesem Projekt gebunden bin, Wirklich? Es gibt genügend pinkompatible AVRs mit mehr EEPROM. > ist der >EEPROM voll, ich bräuchte aber noch Platz für 128 Byte zusätzliche >Daten. Auch hier kann man überlegen, ob man diese Daten ober bestehende Daten komprimieren kann. >-Ram beschreiben mit Daten >-Jump zu funktion im Bootloader mit (((void(*)(void))0x3F00)(&data)); >//0x3F00 ist Adresse der Funktion im Bootloader >Im Bootloader: >- Löscht Page(s) >- Beschreibt sie aus Ram >- Springt zurück ins Hauptprogramm Kann man machen, würde ich aber erst als allerletzten Ausweg nehmen, zumal der Flash offiziell nur 10k Löschzyklen verträgt. >PS.: Nein ich kann keinen Prozessor mit größerem EEPROM nehmen, ich bin >an die Hardware gebunden. Dann Daten sinnvoll komprimieren.
danke, werde mal schauen, ob ich was komprimieren kann..
Vielleicht gibt es bei den schon vorhandenen EEPROM-Daten welche die nur einmal geschrieben, aber dann nur noch gelesen werden. Dies könnnte man ins Flash verschieben. Produktionsdaten wie HW revision, Herstellungsdatum usw sind da Kandidaten.
Eben. Vor allem die Frage stellen, welche Daten WIRKLICH während der Laufzeit neu geschrieben werden müssen. Wertetabellen, Texte etc. meist nicht, die packt man besser in den Flash.
ben schrieb: > Bevor ich mich jetzt stundenlang da dran setzte: Ist das machbar, oder > habe ich einen Denkfehler? Habt ihr Ideen für konkrete Ansätze? Dies wird in aktuellen Autos so gemacht ;) Die Hersteller sparen sich die paar Cent für ein EEPROM und schreiben stattdessen ins Flash. Es müssen nur ausreichend viele Pages vorgehalten werden, um die maximale Schreibzyklenzahl pro Page nicht zu überschreiten. Wenn man bedenkt, daß pro Fahrzyklus einmal geschrieben wird, funktioniert das doch ganz gut. Allerdings mußt Du eine sinnvolle Strategie haben, wie oft Du Daten speichern willst. Beim Auto ist das einfach: wenn die Zündung ausgeschaltet wird, ist das Steuergerät nicht sofort tot, sondern es entscheidet selbst, wann es sich den Strom abstellt. Daher geht es hier problemlos, die Daten zum Ende des Fahrzyklus (im sog. "Nachlauf") einmalig ins Flash zu speichern. Wenn bei einer Anwendung aber jederzeit der Strom weg sein kann, muß man die Daten natürlich rechtzeitig gespeichert haben. (In diesem Fall muß man die Daten korrekterweise redundant und mit Checksumme speichern, falls der Strom genau während eines Schreibzugriffes ausgeht.)
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.