www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM Segmentierung & Speicherung


Autor: Sopest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich versuche seit Wochen Werte (welche ich über USB bekomme) in mein 
EEPROM(internes vom AtMega) zu speichern. Ich verwende einen ATMega128 
programmiere ihn über AVR Studio 4 (avr gcc).

Folgende deklaration für die Variablen wurde getroffen:
#include <avr/eeprom.h>
#include <avr/io.h>

#define EEMEM  __attribute__ ((section (".eeprom")))

#define EE_DUMMY      0x000
#define EE_WERT       ( 0x000 + sizeof( uint8_t ) )
#define EE_ANZAHL     ( EE_WERT + sizeof( uint8_t ) )
#define EE_NAME       ( EE_ANZAHL + sizeof( uint16_t ) )
#define EE_WERTIGKEIT ( EE_NAME + 10 * sizeof( uint8_t ) )
#define EE_LAST       ( EE_WERTIGKEIT + sizeof( uint8_t ) )

Nun habe ich mir das AVR-GCC-Tutorial des öfteren durchgelesen, und bin 
der Meinung, dass der obere Code die Variablen auf dem EEPROM definiert.

Wie kann ich auf diese Variablen zugreifen? Wie kann ich sie verändern? 
Sind sie so richtig definiert? in z.B EE_ANZAHL wie kann ich da eine 
Zahl (z.B 101) hinein schreiben.
uint8_t   temp1;
uint16_t  temp2;
 
temp1 = eeprom_read_byte(EE_WERT);
temp2 = eeprom_read_word(EE_NAME);

Kann ich so Die Variablen auslesen, es klappt nicht so ganz...
eeprom_write_block(myWordBuffer,eeFooWordArray1,sizeof(myWordBuffer));

Einmal hat das kompilieren geklappt aber beim übertragen war ein 
HEX-Wert out of range?

Könnte mich eventuell jemand informieren, wie ich das dann in den 
ATMega128 spiele? Muss ich da ein extra File rüberladen?

Im AVR-Studio befindet sich eine Option "Edit Current Configuration 
Options" dort auf "Memory Settings" muss/kann ich dort auch etwas 
eingeben?

Ich wäre sehr erfreut, und dankbar, wenn mir jemand ein kleines C-File 
schreiben könnte ich verzweifle schon 0,o. Eine Erklährung wäre 
natürlich auch spitze!

Ich freue mich über jede Hilfe, bin auf dem Gebiet noch relativ neu.

Danke

Sopest:)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sopest wrote:
> Folgende deklaration für die Variablen wurde getroffen:
>
>
#include <avr/eeprom.h>
> #include <avr/io.h>
> 
> #define EEMEM  __attribute__ ((section (".eeprom")))
> 
> #define EE_DUMMY      0x000
> #define EE_WERT       ( 0x000 + sizeof( uint8_t ) )
> #define EE_ANZAHL     ( EE_WERT + sizeof( uint8_t ) )
> #define EE_NAME       ( EE_ANZAHL + sizeof( uint16_t ) )
> #define EE_WERTIGKEIT ( EE_NAME + 10 * sizeof( uint8_t ) )
> #define EE_LAST       ( EE_WERTIGKEIT + sizeof( uint8_t ) )
>
> Nun habe ich mir das AVR-GCC-Tutorial des öfteren durchgelesen, und bin
> der Meinung, dass der obere Code die Variablen auf dem EEPROM definiert.

Das definiert überhaupt keine Variablen, sondern stellt lediglich
eine Reihe von Zahlen bereit. Im Grunde ist es dasselbe, wie wenn
du geschrieben hättest
#define EE_DUMMY        0
#define EE_WERT         1
#define EE_ANZAHL       2
#define EE_NAME         4
#define EE_WERTIGKEIT   14
#define EE_LAST         15

> Wie kann ich auf diese Variablen zugreifen?

Du kannst eeprom_read_byte / eeprom_read_word benutzen und
dort diese Zahlen als Adresse angeben, von wo im EEPROM gelesen
bzw. geschrieben werden soll.
Nochmal: Du hast hier keine Variablen, du hast lediglich Zahlen
die du als Adresse im EEPROM Speicher benutzen kannst um
von dort zu lesen bzw. zu schreiben.

> Sind sie so richtig definiert? in z.B EE_ANZAHL wie kann ich da eine
> Zahl (z.B 101) hinein schreiben.
>
>
uint8_t   temp1;
> uint16_t  temp2;
> 
> temp1 = eeprom_read_byte(EE_WERT);
> temp2 = eeprom_read_word(EE_NAME);
> 

Aufpassen. EE_NAME hat den Wert 4. Die nächste Adresse die du
berechnet hast, EE_WERTIGKEIT, hat den Wert 14, dazwischen liegt
also eine Differnz von 10. 10 Bytes sind aber kein Word.

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.