enregistrer des int dans une EEPROM dont les adresses sont en byte
Bonjour,
Je ne m y connais pas trop en programation d EEPROM comment faire en sorte que par exemple je puisse mettre un int dans une eeprom qui stocke des bytes? Dois je allouer deux adresses de l eeprom et/ou utiliser un tableau et comment?
Quelle est la meilleure methode ?
Merci
Stockage et lecture dans EEPROM avec conversion char<->int
Bonjour,
Voila dans mon programme à base de microcontrolleur, je dois sauvegarder les valeurs des configs
dans une EEPROM de façon à ce que lors d'un reset je puisse avoir les dernières configurations.
Pour ce j'ai fait au depart un code qui ecrivait bien dans l'eeprom malgrès que j'écrivais des types int dans une addresse de type char de la EEPROM
car un reverification avec printf me donne les valeurs saisies (ex: seuil_bas = 150 et seuil_haut = 280).
A priori lorsque le programme tourne ça fonctionne bien ( car avec un printf je relis les valeurs saisies)
mais si je fait un reset j'ai comme valeur à cette adresse d'EEPROM pour seuil_bas 150 et pour seuil_haut = 255).
Apparement comme c'est un byte il y a depassement
Mon premier code d'ecriture sur l'eeprom:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
if(env_choice=='0')
{
seuil_bas0=seuil_bas;
EEP2408_ADDRESS = 0x62; //addresse du seuil_bas niveau 0
EEP2408_VALUE = seuil_bas0;
EEP2408_write_byte(EEP2408_ADDRESS,EEP2408_VALUE);
EEP2408_ADDRESS = 0x66; //addresse du seuil_haut niveau 0
seuil_haut0=seuil_haut;
EEP2408_VALUE = seuil_haut0;
EEP2408_write_byte(EEP2408_ADDRESS,EEP2408_VALUE);
}
else if(env_choice=='1') //2905
{
EEP2408_ADDRESS = 0x70; //addresse du seuil_bas niveau 1
seuil_bas1=seuil_bas;
EEP2408_VALUE = seuil_bas1;
EEP2408_write_byte(EEP2408_ADDRESS,EEP2408_VALUE);
EEP2408_ADDRESS = 0x74; //addresse du seuil_haut niveau 1
seuil_haut1=seuil_haut;
EEP2408_VALUE = seuil_haut1;
EEP2408_write_byte(EEP2408_ADDRESS,EEP2408_VALUE);
} |
Mon premier code d'initialisation pour charger les valeurs se trouvant dans l'EEPROM:
Code:
1 2 3 4 5 6 7 8 9 10
|
EEP2408_ADDRESS = 0x62; //Force l'adresse ou doit être écrit les data du
EEP2408_read_byte(EEP2408_ADDRESS);
printf("\n");
seuil_bas0 =EEP_READ;
EEP2408_ADDRESS = 0x63; //Force l'adresse ou doit être écrit les data du
EEP2408_read_byte(EEP2408_ADDRESS);
printf("\n");
seuil_haut0 =EEP_READ; |
donc je pense faire comme ceci convertir mes int en char avant de les stocker en eeprom et ce avec des tableaux ?
Mon nouveau code d'ecriture sur l'eeprom:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
seuil_bas0=seuil_bas;
arraybas[0]=(seuil_bas0 & 0xff000000) >> 24;
arraybas[1]=(seuil_bas0 & 0xff0000) >> 16;
arraybas[2]=(seuil_bas0 & 0xff00) >> 8;
arraybas[3]=(seuil_bas0 & 0xff);
EEP2408_ADDRESS = 0x62; //addresse du seuil_bas niveau 0
EEP2408_VALUE = arraybas[0];
EEP2408_ADDRESS = 0x63; //addresse du seuil_bas niveau 0
EEP2408_VALUE = arraybas[1];
EEP2408_ADDRESS = 0x64; //addresse du seuil_bas niveau 0
EEP2408_VALUE = arraybas[2];
EEP2408_ADDRESS = 0x65; //addresse du seuil_bas niveau 0
EEP2408_VALUE = arraybas[3];
seuil_haut0=seuil_haut;
arrayhaut[0]=(seuil_haut0 & 0xff000000) >> 24;
arrayhaut[1]=(seuil_haut0 & 0xff0000) >> 16;
arrayhaut[2]=(seuil_haut0 & 0xff00) >> 8;
arrayhaut[3]=(seuil_haut0 & 0xff);
EEP2408_ADDRESS = 0x66; //addresse du seuil_haut niveau 0
EEP2408_VALUE = arraybas[0];
EEP2408_ADDRESS = 0x67; //addresse du seuil_haut niveau 0
EEP2408_VALUE = arraybas[1];
EEP2408_ADDRESS = 0x68; //addresse du seuil_haut niveau 0
EEP2408_VALUE = arraybas[2];
EEP2408_ADDRESS = 0x69; //addresse du seuil_haut niveau 0
EEP2408_VALUE = arraybas[3]; |
Mais alors comment dois je faire pour initialiser, charger ces valeurs de l'EEPROM dans mes variables après un reset ?
Merci