direkte Speicheradressierung

Persönliche Seite #738100
Lesenswert?

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.
#738105
Lesenswert?

Ö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...
Gast #738109
Lesenswert?

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.
#738111
Lesenswert?

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).
Gast #738114
Lesenswert?

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.
#738137
Lesenswert?

@  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
Gast #738148
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren