EEMEM et initialisation des valeurs par défaut

Bonjour,

Je rencontre un petit souci avec l'utilisation de l'attribut EEMEM.
Visiblement cette directive fonctionne, le sketch compile, mais les valeurs par défaut ne semble pas écrient dans l'EEPROM au moment du flash.

Par exemple :

#include <avr/pgmspace.h>
#include <avr/eeprom.h>

// EEPROM data.
const uint16_t EEMEM settingBeam = 512;
const uint16_t EEMEM settingTest = 0;
const uint16_t EEMEM settingBeep = 0;
const uint16_t EEMEM settingSDCard = 0;
const uint16_t EEMEM settingBluetooth = 0;

const uint8_t EEMEM test[4] = "ABC";

Va générer un fichier .eep lors de la compilation, mais lorsque que je vais tenter de lire la première valeur j'obtiens tout sauf la valeur attendu...
Si je fixe les valeurs manuellement, via code, dans l'EEPROM, plus de souci. Mais évidemment dans ces conditions EEMEM ne sert plus à grand chose :~

Y'a-t-il une astuce quant à l'utilisation de EEMEM ?

Merci !

Bonjour,

Tu utilises l'ide arduino pour programmer ta carte ?
Si oui oublie, l'ide arduino et le bootloader optiboot ne supportent pas l'écriture de la mémoire EEPROM lors de la programmation.

Si tu veut programmer ton fichier .eep dans la carte il faut utiliser un vrai programmateur d'AVR câblé sur le port ICSP.
Sinon il faut faire un skecth dédié qui écrit l'EEPROM et le programmer/exécuter une fois avant le vrai programme.

Merci pour cette réponse rapide.

Ca résoud le problème vu que j'utilise l'IDE Arduino :slight_smile:

Une question tout de même, si l'IDE n'accepte pas l'écriture de l'EEPROM lors du flash, l'attribut EEMEM est-il néanmoins correctement calculé ? Plutôt que de maintenir une table d'offset manuellement, ce serait plus facile... Ou les #define restent-il la meilleurs alternative ?

Merci.

Même si l'ide ne gère pas le fichier .eep le code généré est tout de même compiler par avr-gcc donc normalement c'est bon.
Personnellement je préfère faire une structure avec mes variables et la stocker/lire en EEPROM d'un seul bloc au démarrage.

J'ai vu la solution avec une structure oui, je vais tester cela aussi.

Ce que je cherche à stoker sont en priorité des strings (pour affichage lcd) afin de faire diminuer (un peu) la taille du code (la librairie SD est assez volumineuse, couplé à une carte Leonardo qui possède un bootloader lui aussi volumineux... Du coup manque de place :astonished: )

Merci !