Hallo zusammen,
ich habe folgendes Problem, ich möchte gerne den verfügbaren Speicher verwalten. es soll unbestimmt oft eine 16bit Variable gespeichert werden. Dazu möchte ich gerne den verfügbaren Speicher durchlaufen. Dazu der Ansatz immer drei Byte zu nutzen:
| Flip | High Byte | Low Byte |
Der Inhalt von Flip wird beim speichern invertiert, also ist dieser 0x00 oder 0xFF, so dass ich erkennen kann, wo zuletzt gespeichert worden ist.
Das Problem dabei ist, dass ich nach dem Auslesen des ersten Flips (erste Speicherzelle) 0xFF erwarte, da der Speicher im default auf allen Zellen 0xFF hinterlegt hat. Nun soll der erste Speicher Wert den Inhalt 0x00 erhalten und die beiden nachfolgenden Plätze den Speicherwert der 16bit Variable.
Beim auslesen durch den programmer erhalte ich folgendes Ergebniss:
:10000000 FF0003FF0002FF0001FFFFFFFFFFFFFFF4
:10001000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
wenn ich in dem Code die else Abfrage raus lasse funktioniert es:
:10000000 000003000002000001FFFFFFFFFFFFFFF1
:10001000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
Hat jemand eine Idee was ich falsch mache?
bin um jede Hilfe dankbar ![]()
Der Code ist mit platformIO in einem Arduino framwork geschrieben
#include <Arduino.h>
#include <EEPROM.h>
// Speichersetup
#define START_ADRESS 0
#define RETURN_ADRESS 15
uint16_t limitation = 3;
uint16_t adress = START_ADRESS;
uint16_t flip;
void save();
void setup() {
}
void loop() {
if(limitation > 0){
save();
limitation--;
}
}
void save(){
flip = EEPROM.read(adress);
if(flip == 0xFF){
EEPROM.write(adress + 1, (limitation >>8)&0xFF); // Speichere HBYTE
EEPROM.write(adress + 2, limitation&0xFF); // Speichere LBYTE
EEPROM.write(adress, 0x00);
}
// ohne die else Abfrage funtioniert es?
else{
EEPROM.write(adress, 0xFF);
}
if(adress < RETURN_ADRESS){
adress = adress + 3;
}
else{
adress = START_ADRESS;
}
}