Pages: [1]   Go Down
Author Topic: (résolu) Stocker un float dans l'EEPROM  (Read 731 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 1
Posts: 52
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

J'aurais besoin de stocker un float dans l'EEPROM interne, mais je ne vois pas comment faire. La fonction EEPROM.write ne permet que de stocker du byte, et un float est sur 4 bytes.

Il faudrait donc que "j'explose" mon float pour récupérer chacun de ses 4 octets pour pouvoir ensuite les stocker individuellement, et ensuite pouvoir reconstruire le float suite à un EEPROM.read

Mais là, je sèche... Un champion du monde du code pourrait-il me filer un 'tit coup de main, SVP ?
« Last Edit: March 08, 2013, 04:25:15 am by fking » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 39
Ardui-Novice
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut, j'ai rencontré le même problème qui est résolu aujourd'hui ...

http://arduino.cc/forum/index.php/topic,147297.0.html

Bon test.
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 52
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci à toi, moi j'ai trouvé ça :

http://thijs.elenbaas.net/2012/07/extended-eeprom-library-for-arduino/
Logged

France S-O
Offline Offline
Edison Member
*
Karma: 41
Posts: 2167
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
La fonction EEPROM.write ne permet que de stocker du byte

La curiosité n'est jamais un défaut dans le domaine technique, elle réserve souvent des surprises très agréables.
La première forme de curiosité est de lire le code de la fonction EEprom.write d'origine arduino (librairie EEprom de l'ide) :
Code:
void EEPROMClass::write(int address, uint8_t value)
{
eeprom_write_byte((unsigned char *) address, value);
}

Deuxièmme expression de la curiosité on voit que le fichier cpp fait l'inclusion suivante :
#include <avr/eeprom.h>
On continue en faisant une recherche google sur avr/eeprom.h et on arrive ici :
http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html

Et là on s'apperçoit qu'Arduino a :
- encapsulé une fonction avr sans rien y modifier. Opération inutile a part éviter aux utilisateurs d'utiliser un pointeur,
- limité les choix possibles au seul octet mais qu'il existe bien d'autres possibilités d'écriture dont celle du float qui n'attend que tu t'en serves.
Code:
uint8_t eeprom_read_byte (const uint8_t *__p) __ATTR_PURE__
uint16_t eeprom_read_word (const uint16_t *__p) __ATTR_PURE__
uint32_t eeprom_read_dword (const uint32_t *__p) __ATTR_PURE__
float    eeprom_read_float (const float *__p) __ATTR_PURE__
void         eeprom_read_block (void *__dst, const void *__src, size_t __n)
void         eeprom_write_byte (uint8_t *__p, uint8_t __value)
void         eeprom_write_word (uint16_t *__p, uint16_t __value)
void         eeprom_write_dword (uint32_t *__p, uint32_t __value)
void         eeprom_write_float (float *__p, float __value)
void         eeprom_write_block (const void *__src, void *__dst, size_t __n)
void         eeprom_update_byte (uint8_t *__p, uint8_t __value)
void         eeprom_update_word (uint16_t *__p, uint16_t __value)
void         eeprom_update_dword (uint32_t *__p, uint32_t __value)
void         eeprom_update_float (float *__p, float __value)
void         eeprom_update_block (const void *__src, void *__dst, size_t __n)

Et cerise sur le gateau toutes les fonctions sont documentées.
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 52
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci beaucoup !!!
C'est vrai que je n'ai pas cherché plus loin après avoir lu la référence de EEPROM.h
Je ne suis pas assez curieux, donc...
Logged

Pages: [1]   Go Up
Jump to: