mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik direkte Speicheradressierung


Autor: Burkhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Indem du deine Daten einfach hinter das Programm hinschreibst?

Autor: Burkhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
;-) das ist schon klar. Aber wie? Woher bekomme ich die erste 
Speicherstelle nach dem Programmcode? Und wie schreibe ich dort dann 
direkt hin?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Burkhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Burkhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://elm-chan.org/fsw/ff/00index_e.html

Funktioniert ziemlich gut.

Autor: 1234 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.