(ESP8266) EEPROM Speichernutzung: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Hier nur ein kleiner Reminder. Bei Gelegenheit will ich hier noch ein paar Testproggies auflisten. EEPROM.put und EEPROM.get kommen scheinbar mit Strings ni…“) |
|||
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | =Allgemeines== | ||
+ | <span style="color:red">EEPROM-Bibliothek hat Problem mit Strings!</span> | ||
+ | |||
Hier nur ein kleiner Reminder. Bei Gelegenheit will ich hier noch ein paar Testproggies auflisten. | Hier nur ein kleiner Reminder. Bei Gelegenheit will ich hier noch ein paar Testproggies auflisten. | ||
+ | =Fallbschreibung= | ||
EEPROM.put und EEPROM.get kommen scheinbar mit Strings nicht zurecht. In einem meiner Programme habe ich | EEPROM.put und EEPROM.get kommen scheinbar mit Strings nicht zurecht. In einem meiner Programme habe ich | ||
KonfigurationsVariablen im EEPROM abgelegt. Die Struktur in der die Variablen abgelegt waren enthielt auch einen String, bzw. Character vom Typ 'const char*'. Das Programm kam damit nicht ueber das EEPROM.begin hinweg und verfing sich in einer Dauerbootschleife. | KonfigurationsVariablen im EEPROM abgelegt. Die Struktur in der die Variablen abgelegt waren enthielt auch einen String, bzw. Character vom Typ 'const char*'. Das Programm kam damit nicht ueber das EEPROM.begin hinweg und verfing sich in einer Dauerbootschleife. | ||
− | FEHLER!!! | + | <span style="color:red">FEHLER!!!</span> |
+ | |||
+ | <span style="color:red">VVVVVVVV</span> | ||
<pre> | <pre> | ||
Zeile 14: | Zeile 20: | ||
unsigned long checksum; | unsigned long checksum; | ||
} settings; | } settings; | ||
− | + | </pre> | |
− | Nachdem ich Die Markierung vom Typ 'const char*' gegen byte ASCIICode ausgetauscht hatte lief das Programm so wie erwartet. | + | <span style="color:red">^^^^^^^</span> |
+ | |||
+ | <span style="color:red">FEHLER!!!</span> | ||
+ | |||
+ | Nachdem ich Die Markierung vom Typ 'const char*' gegen byte ASCIICode ausgetauscht hatte, lief das Programm so wie erwartet. | ||
<pre> | <pre> | ||
struct EEPROMValues{ // use a struct to store and retrieve to/from EEPROM | struct EEPROMValues{ // use a struct to store and retrieve to/from EEPROM | ||
− | byte mark = 34; | + | byte mark = 34; // auch das hier muss ich nochmal testen |
unsigned long timeActiveDir1; // Seconds aktive till relaisstate[] back to {false,false} | unsigned long timeActiveDir1; // Seconds aktive till relaisstate[] back to {false,false} | ||
unsigned long timeActiveDir2; // Seconds aktive till relaisstate[] back to {false,false} | unsigned long timeActiveDir2; // Seconds aktive till relaisstate[] back to {false,false} | ||
Zeile 26: | Zeile 36: | ||
} settings; | } settings; | ||
</pre> | </pre> | ||
+ | |||
+ | Die Markierung am Anfang hat keinen tieferen Sinn. Sie dient mir nur, gemeinsam mit der Checksumme, die Reliabilitaet der Konfigurationswerte zu bestimmen. | ||
+ | |||
+ | EEPROM.h haelt die Daten nach einem Reset oder PowerOff nicht. | ||
+ | |||
+ | ESP_EEPROM.h zeigt das gewuenschte Verhalten. | ||
+ | |||
+ | Murks im Quadrat. |
Aktuelle Version vom 19. August 2022, 20:24 Uhr
Allgemeines=
EEPROM-Bibliothek hat Problem mit Strings!
Hier nur ein kleiner Reminder. Bei Gelegenheit will ich hier noch ein paar Testproggies auflisten.
Fallbschreibung
EEPROM.put und EEPROM.get kommen scheinbar mit Strings nicht zurecht. In einem meiner Programme habe ich KonfigurationsVariablen im EEPROM abgelegt. Die Struktur in der die Variablen abgelegt waren enthielt auch einen String, bzw. Character vom Typ 'const char*'. Das Programm kam damit nicht ueber das EEPROM.begin hinweg und verfing sich in einer Dauerbootschleife.
FEHLER!!!
VVVVVVVV
struct EEPROMValues{ // use a struct to store and retrieve to/from EEPROM const char* mark="#"; // Before C++11, members of a struct could not be default initialized. Instead they must be initialized after an instance struct is created. //EEPROMValues() : str("\0"){} unsigned long timeActiveDir1; // Seconds aktive till relaisstate[] back to {false,false} unsigned long timeActiveDir2; // Seconds aktive till relaisstate[] back to {false,false} unsigned long checksum; } settings;
^^^^^^^
FEHLER!!!
Nachdem ich Die Markierung vom Typ 'const char*' gegen byte ASCIICode ausgetauscht hatte, lief das Programm so wie erwartet.
struct EEPROMValues{ // use a struct to store and retrieve to/from EEPROM byte mark = 34; // auch das hier muss ich nochmal testen unsigned long timeActiveDir1; // Seconds aktive till relaisstate[] back to {false,false} unsigned long timeActiveDir2; // Seconds aktive till relaisstate[] back to {false,false} unsigned long checksum; } settings;
Die Markierung am Anfang hat keinen tieferen Sinn. Sie dient mir nur, gemeinsam mit der Checksumme, die Reliabilitaet der Konfigurationswerte zu bestimmen.
EEPROM.h haelt die Daten nach einem Reset oder PowerOff nicht.
ESP_EEPROM.h zeigt das gewuenschte Verhalten.
Murks im Quadrat.