Hallo, ich will gerne meine Konfigurationen in die hinteren 64kbyte meines atmega128 speichern, da der EEPROM etwas zu klein ist. Wie ist das möglich, gibt es so eine Funktion wie write_byte_progmem()? vielleicht hat jemand ja ein Beispiel für mich.
Programspeicher schrieb: > Wie ist das möglich, gibt es so eine Funktion wie write_byte_progmem()? > vielleicht hat jemand ja ein Beispiel für mich. steht alles im Abschnitt "Self-Programming the Flash" vom Datenblatt.
Datenblatt, unter "Self-Programming the Flash". Steht alles da drin. Mit Beispielcode. Ansonsten google mit dem Stichwort bootloader befragen. Oliver
Im Datenblatt steht nur ASM code, würde es gerne in C machen.
Programspeicher schrieb: > Im Datenblatt steht nur ASM code, würde es gerne in C machen. Da wirst du aber Probleme kriegen. Die Spezial-Register zu beschreiben ist noch nicht das große Problem. Aber den Compiler dazu zu zwingen, den Z-Pointer bzw. eine SPM Instruktion einzusetzen, das wird schon schwieriger. -> Solche Dinge kann man nur in Assembler vernünftig machen. Klar kann man sich dann um die Assembler-Abschnitte C-Funktionen bauen. Aber im Kern kriegst du das nur in Assembler hin.
Ich würde lieber einen kleinen, externen EEPROM nehmen, ehe ich den Krampf mit dem Flashschreibzugriff in C mache.
Sollte es nicht mit den Routinen funktionieren, die in boot.h definiert sind (boot_page_write() als Beispiel)? Dann hat der TO sein C Interface und "unten" ist alles (erprobter) Assembler.
Georg G. schrieb: > Sollte es nicht mit den Routinen funktionieren, die in boot.h definiert > sind (boot_page_write() als Beispiel)? Keine so schlechte Idee. Im Prinzip müsste das gehen. Bleibt aber immer noch das Problem, dass diese Flash-Zugriffe aus dem Bootloader-Bereich des Mega heraus erfolgen müssen. D.h. man muss den Linker dazu überreden, die Funktionen da rauf zu verschieben. Allerdings kenne ich mich da nicht besonders aus. Ich würde auch ein extenes EEPROM nehmen, wenn der Platz nicht reicht. 4KB EEprom sind schon eine Menge Holz. Was ist da alles an Konfigurationsdaten drinn enthalten? Kann man da etwas abspecken?
:
Bearbeitet durch User
Karl Heinz Buchegger schrieb: > man muss den > Linker dazu überreden, die Funktionen da rauf zu verschieben. Bei AVR-Studio in den Configuration Options unter Memory eine neue section an passender Stelle definieren und den Code per attribute dort ablegen lassen. (Ein serielles EEPROM mit etwas Heißkleber kopfüber auf der Platine geht vermutlich einfacher, aber das will der TO ja nicht.)
Hi. Die SPM-Instruktion kann nicht von jeder Stelle im Flash erfolgreich ausgefuehrt werden. Also einfach den hinteren Speicher beschreiben wird fehlschlagen. (Bzw. einfach nicht durchgefuehrt.) Um eine Updatefunktion fuer das tinyUSBboard zu realisieren ( http://matrixstorm.com/avr/tinyusbboard/ ) habe ich vor einiger Zeit eine API implementiert mit der man beliebig Flash schreiben kann. Im Beitrag Beitrag "Re: [ATMega] Programm aus externem EEprom laden" habe zudem ein Beispiel vorgestellt, wie man es benutzt. Ich hoffe es hilft dir, und wuerde mich um Feedback freuen. MfG Stephan Nachtrag: Anfangs falscher Link jetzt korrigiert.
:
Bearbeitet durch User
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.