Hallo! Möchte bei meinen Atmega8 im Flash Speicher nach dem Programmcode Daten schreiben. Woher bekomme ich das Ende des Programmcodes und wie kann ich fortlaufend dort Daten eintragen? Probiere jetzt schon seit einigen Stunden ohne Erfolg.
;-) das ist schon klar. Aber wie? Woher bekomme ich die erste Speicherstelle nach dem Programmcode? Und wie schreibe ich dort dann direkt hin?
Schau dir dein Linkercontrolscript (LCS) an (avr/lib/ldscripts). Es gibt für jede AVR Architektur gesonderte. Welche zu deinem µC passt, musst du in der Doku nachschlagen bzw. aus den Commandlineinfos vom Kompilieren her oder aus den Hilfsdateien rauspfriemeln. Im LCS ist die Speicheraufteilung von FLASH-ROM und SRAM beschrieben. Insbesondere gibt es eine Zeile: __data_load_end = __data_load_start + SIZEOF(.data); Das Symbol __data_load_end ist die letzte von Programmcode und initialisierten Daten belegte Adresse im FLASH-ROM. Dahinter ist das von dir gewünschte leere ROM und anschliessend ggf. der Bootloaderbereich im ROM (Grösse und Position vielleicht per Fusebits abfragbar oder eh bekannt). Dass du aus deiner Applikation dahin schreiben kannst, weiss ich nicht. Es gibt Möglichkeiten seitens des Bootloaders das zu unterbinden (Exklusives Schreibrecht durch den Bootloader). Analyse von Bootloadercode ist wahrscheinlich eine gute Methode, um das ROM-Schreiben zu lernen.
Öhm, geht um das Eintragen von Daten beim Programmieren (Also LUTs oder so), oder um das Schreiben zur Laufzeit? Letzteres ist nur aus dem Bootloader möglich und der weiss wiederum nix vom eigentlichen Programm, sodass du die Adresse entweder beispielsweise im EEPROM ablegen oder fest einprogrammieren musst...
Vielleicht sollte ich kurz beschreiben was ich machen will. Der Atmega soll die ausgelesenen Daten vom Drucksensor am Ende des Programmcodes in den Flashspeicher schreiben. Die Daten sollen fortlaufend geschrieben werden. Wenn ich im laufenden Betrieb den Atmega mit PONYPROG2000 auslese, müsste ich dann ja eigentlich die Daten haben.
Wie gesagt, den Flash kannst du nur aus dem Bootloader beschreiben. Also entweder haust du dein ganzes Programm in den Bootloader und nutzt den App-Code als Datenspeicher (Würde ich nicht empfehlen), oder du verwendest externen Speicher, beispielsweise eine SD-Karte. Oder für kleine Datenmengen den EEPROM, ist aber halt relativ klein (AFAIK 512 Byte beim m8).
Da hatte ich mir das wohl zu einfach vorgestellt. Der EEprom ist zu klein. Da muss ich mich wohl belesen wie ich ne SD-Card am Atmega zum laufen bekomme. Hat vielleicht einer einen Link dafür für mich.
@ Burkhard (Gast) >Da hatte ich mir das wohl zu einfach vorgestellt. Der EEprom ist zu >klein. Da muss ich mich wohl belesen wie ich ne SD-Card am Atmega zum >laufen bekomme. Hat vielleicht einer einen Link dafür für mich. Es gibt noch einen recht günstigen Zwischenschritt. Nimm ein externes, serielles EEPROM, die gibt es bis 128kB und mehr. Einfach anzusteuern, billig. MFG Falk
Wie waere es denn ein separates Flash daneben zu haben ? zB ein Atmel AT45DB321, ein 32MBit = 4MByte im SO8 gehaeuse. Kostet 2 euro oder so. Dessen schnittstelle ist SPI, machbar mit 6 Pins. Guenstiger ist zB ein AT45DB041, 4MBit = 512kByte, kostet 50 cents oder so.
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.