Forum: Mikrocontroller und Digitale Elektronik ATMEGA EEMEM: zwei Applikationen greifen auf dieselbe Variablen zu?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Thomas B. (xantiac)


Bewertung
0 lesenswert
nicht lesenswert
Liebe Kollegen,

an einem Messgerät auf Basis von ATMEGA1284 sollen zwei unterschiedliche 
Applikationen laufen. Applikation 1 hat einmalig in EEPROM mehrere 
HW-Parameter gespeichert und kann sie jetzt jedesmal auslesen. (Das 
Speichern ins EEPROM ist jetzt nicht mehr aktiv).
1
//Applikation 1
2
uint8_t    EEMEM HW_ver;
3
eeprom_write_byte(&EEMEM HW_ver, 2);


Diesen abgespeicherten Wert würde ich gerne nach dem Flashen der zweiten 
Applikaton lesen können. Wie macht man es?
1
//Applikation 2
2
uint8_t    EEMEM HW_ver;
3
uint8_t HW_ver_SRAM = eeprom_read_byte(&HW_ver);

Nach dem Flashen der zweiten applikation, lese ich aber eine 0. 
Wahrscheinlich stimmt der Speicherort nicht, obwohl ich die gleiche 
Reihenfolge in der Definition der EEMEM variablen in beiden apps habe.

Wenn ich die Applikation 1 darauf spiele, kann ich die Variable aus 
EEPROM wieder richtig lesen, d.h. EEPROM wird nicht beim Flashen 
gelöscht! (wir kennen ja die Bugs mit EESAVE beim Flashen und im 
Debugger).

Wie geht es denn?

Vielen Dank für alle Tipps!
Karel

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Thomas B. schrieb:
> Wahrscheinlich stimmt der Speicherort nicht, obwohl ich die gleiche
> Reihenfolge in der Definition der EEMEM variablen in beiden apps habe.
Das darf der Compiler trotzdem in beliebiger Reihenfolge ablegen. Wenn 
du eine Speicherzelle direkt ansprechen willst, dann musst du eine fixe 
Adresse festlegen und direkt diese Adresse verwenden.

> an einem Messgerät auf Basis von ATMEGA1284 sollen zwei unterschiedliche
> Applikationen laufen.
Passen die nicht in ein einziges Programm? Es ist unüblich, für einen 
Betriebsartenwechsel den Controller umzuprogrammieren...

von Johann L. (gjlayde) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Zunächst muss sichergestellt sein, dass das Flashen den EEPROM nicht 
löscht / leert, und dass App 2 keine Werte in den EEPROM lokatiert.

Doku zu ld:
1
-R filename
2
--just-symbols=filename
3
4
Read symbol names and their addresses from filename, but do not relocate
5
it or include it in the output. This allows your output file to refer
6
symbolically to absolute locations of memory defined in other programs.
7
You may use this option more than once.

D.h. Beim Linken von App 2 linkt man auf diese Weise gegen App 1, um die 
entsprechenden (absoluten) Adressen von App 1 bekannt zu manchen und zu 
verwenden.

Evtl. ist ratsam, zunächst den "EEPROM-Anteil" von App 1 zu extrakieren, 
um unerwünschte Fehler bei doppelt vergebenen Namen zu vermeiden.

von Thomas O. (kosmos)


Bewertung
-3 lesenswert
nicht lesenswert
um 4 kByte du adressieren benötigts du 12 Bits oder eben 2 Bytes, ich 
vermute das du einen Fehler in der Adressierung hast evtl. die Bytes 
vertauscht.

Nichts desto trotz mit dem AVR Studio kannst du das komplette EEPROM 
auslesen und dort solltest du deine Daten finden auch wenn sie aufgrund 
eines Adressierungsfehlers etwas verschoben wurden.

von Thomas B. (xantiac)


Bewertung
0 lesenswert
nicht lesenswert
Liebe Kollegen,

danke für eure Tipps.

Lothar M. schrieb:
>> an einem Messgerät auf Basis von ATMEGA1284 sollen zwei unterschiedliche
>> Applikationen laufen.
> Passen die nicht in ein einziges Programm? Es ist unüblich, für einen
> Betriebsartenwechsel den Controller umzuprogrammieren...

Lothar, es get um eine alte und neue Firmware (was ich nicht erwähnt 
habe) und ich wollte die schon abgelegten Daten weiter verwenden. Und 
der Unterschied zwischen uns beiden ist der, dass Du an fertige Produkte 
denkst und ich arbeite im Bereich Demonstratoren/Prototypenbau, wo man 
tatsächlich für den Betriebsartenwechsel den Controller umprogrammieren 
kann/darf :-)

Johann, danke für die Lösung mit ld! Für mich war schneller die 
Datenstruktur einfach aus dem alten Quellcode zu nehmen und im Programm 
"manuell" initialisieren.

Grüße
Karel

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]
  • [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.