Ohne avr-gcc Dokumentation zu wühlen, gehe ich davon aus, dass EEMEM ein Attribut ist, mit dem Speicher im EEPROM reserviert wird, ähnlich wie PROGMEM für den Flash. Und dass dieser Speicher einen eigenen Adressbereich hat, unabhängig und parallel zu Flash und RAM.
Mich würde interessieren, welches Byte mir der Compiler zuweist:
#include <EEPROM.h>
byte speicher EEMEM {4}; // Arduino erzeugt *.eep Datei, die beim Upload den EEPROM überschreibt
void setup() {
Serial.begin(9600);
uint16_t pos= (uint16_t) &speicher;
Serial.print("EEPROM Adr. 0x");
Serial.print(pos, HEX);
Serial.print( " : ");
Serial.println(EEPROM[pos], HEX);
Serial.println(speicher, HEX); // Wäre schön, wenn dasselbe Ergebnis heraus käme, aber da geht das EEMEM Attribut verloren
EEPROM[pos]++; // 1 Byte im EEPROM ändern
// ( beim nächsten Reset ohne neuen Upload zu sehen )
}
void loop() { }
Immer blöd Das ist das Dilemma, wenn man sich die Innereien anschaut, statt nur gegen das dokumentierte Interface zu programmieren. Damit ist man für alle Probleme beim Portieren selber verantwortlich.