Hallo,
ich schreibe nach der Anleitung im AVR-GCC bei einem ATTiny85 8bit Werte
in den EEPROM. Nun habe ich mir den EEPROM Inhalt nach Programmlauf per
avrdude ausgelesen und verstehe einiges nicht.
# laut Datenblatt soll der ATTiny85 512byte für EEPROM haben. Ich dachte
das wären maximal z.B. 512 8bit Variablen im EEPROM hex File???
Im hexfile sind es aber deutlich mehr als 512 byte Einträge, sogar mehr
als 1024. Wie ist das zu verstehen?
Auch habe ich Verständnisprobleme für die Schreibreihenfolgen. Arrays
werden mit der "Nummerrierung" und die Variablen (Platzhalter) gegen die
Reihenfolge der Definition geschrieben.
Nur welchen Zustand hat der EEPROM (wenn nicht leer) und wie wird dann
in die jeweiligen Adressen geschrieben. Beim Auslesen habe ich das
Gefühl, dass die Variablen von den Speicheradressen her nicht einfach
nacheinander geschrieben wurden...
Über z.B.
1 | #include <stdint.h>
|
2 | #include <avr/eeprom.h>
|
3 | ..
|
4 | /* Byte */
|
5 | uint8_t eeFooByte11 EEMEM = 0;
|
6 | uint8_t eeFooByte12 EEMEM = 0;
|
7 | ..
|
8 | eeprom_write_byte(&eeFooByte11, Bytewert1);
|
9 | eeprom_write_byte(&eeFooByte12, Bytewert2);
|
10 | ..
|
mit den AVR-GCC Tutorial sollte man ja auch direkt in die Adressen des
EEPROM schreiben können.
1 | // Byte in das EEPROM schreiben
|
2 | void EEPWriteByte(uint16_t addr, uint8_t val)
|
3 | {
|
4 | eeprom_write_byte((uint8_t *)addr, val);
|
5 | }
|
6 |
|
7 | oder als Makro:
|
8 | #define EEPReadByte(addr) eeprom_read_byte((uint8_t *)addr)
|
9 | #define EEPWriteByte(addr, val) eeprom_write_byte((uint8_t *)addr, val)
|
10 |
|
11 | Verwendung:
|
12 | EEPWriteByte(0x20, 128); // Byte an die Adresse 0x20 schreiben
|
Kann ich die erste 8bit Variable auf Adresse 0x00, die zweite 8bit dann
auf 0x08, 0x10 ... schreiben?
Über Tipps und Infos wäre ich sehr dankbar.
Gruß und Dank Markus