Bonjour
Je suis me inspiré de l'exemple pref2struct fourni avec l'ESP32 pour écrire ceci :
La structure est déclarée dans un .h indépendant :
typedef struct {
public:
bool used = false;
uint8_t roller = 0;
uint8_t hour = 0;
uint8_t minute = 0;
bool command = false;
}prgm_t;
prgm_t * prgms[PRGM_COUNT];
void loadprgms() {
Serial.println("PREFS - loadprgms");
preferences.begin("prgms");
size_t prgms_length = preferences.getBytesLength("prgms");
Serial.print("PREFS - loadprgms - Size in memory :");
Serial.println(prgms_length);
if (prgms_length != PRGM_COUNT * sizeof(prgm_t)) { // simple check that data fits
Serial.println("PRGM - loadprgms - Memory invalid or empty, cleaning");
Serial.println(sizeof(prgms) * sizeof(prgm_t));
preferences.putBytes("prgms", prgms, PRGM_COUNT * sizeof(prgm_t));
}
char buffer[PRGM_COUNT * sizeof(prgm_t)];
preferences.getBytes("prgms", buffer, prgms_length);
*prgms = (prgm_t *) buffer;
Serial.println("PREFS - loadprgms - Data loaded");
for (int i=0;i<prgms_length;i++) {
Serial.println(buffer[i], HEX);
}
prgm_t *zprgms = (prgm_t *) buffer;
for (int i=0;i<PRGM_COUNT;i++) {
Serial.print("PREFS - loadprgms - prgm : ");
Serial.print(i);
Serial.print("/");
Serial.println(PRGM_COUNT);
Serial.print("PREFS - loadprgms - zprgms Roller : ");
Serial.println(zprgms[i].roller);
Serial.print("PREFS - loadprgms - prgms Roller : ");
Serial.println(prgms[i]->roller);
}
preferences.end();
zprgms est local à la fonction, j'accède à roller (zprgms*.roller) correctement*
prgms est global, l'ESP reboote quand j'accède à roller (prgms*->roller)*
Mon but est de valoriser prgms dans la fonction et de pouvoir y accéder à l'extérieur.
J'ai un peu de mal à comprendre les types que j'utilise, c'est la cause du problème
Merci.
David.