Pages: [1]   Go Down
Author Topic: EEMEM et initialisation des valeurs par défaut  (Read 402 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :

Code:
#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  smiley-confuse

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

Merci !
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour cette réponse rapide.

Ca résoud le problème vu que j'utilise l'IDE Arduino smiley-kitty

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.
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 26
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-eek )

Merci !
Logged

Pages: [1]   Go Up
Jump to: