Stockage et lecture dans EEPROM avec conversion char<->int

Signaler
Messages postés
97
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2009
-
Messages postés
97
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2009
-
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 EEPROMcar 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) et je trouve ça etonnant peut etre que ça ecrase les adresses suivantes de l'EEPROM et les relies ? 

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:


<hr />

 if(env_choice=='0')             //2905
       {
  
  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);
  }    

<hr />
Mon premier code d'initialisation pour charger les valeurs se trouvant dans l'EEPROM:
        EEP2408_ADDRESS = 0x62; //Force l'adresse ou doit être écrit les data
       EEP2408_read_byte(EEP2408_ADDRESS);
      printf("\n");
      seuil_bas0 =EEP_READ;
       
        EEP2408_ADDRESS = 0x63; //Force l'adresse ou doit être écrit les data 
       EEP2408_read_byte(EEP2408_ADDRESS);
       printf("\n");
       seuil_haut0 =EEP_READ;

<hr />Donc je pense faire comme ceci convertir mes int en char avant de les stocker en eeprom.

Mon nouveau code d'ecriture sur l'eeprom:

<hr />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];

<hr />Mais alors comment dois je faire pour initialiser, charger ces valeurs de l'EEPROM dans mes variables après un reset dois-je affecter à ma variable la somme des contenus des tableaux , et comment cela necessite surement une conversion ?

Merci

1 réponse

Messages postés
97
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2009

Rebonjour,

Voila, je pense que je n'ai pas était très clair, ce que j'ai posé comme question dans ce dernier topic c'est que; ayant stocké das valeurs dans l'eeprom je voulais savoir comment les restituer vers une variable lorsque le système redemarre en sachant que je les configurations je les stocke dans l'eeprom de cette manière:

<hr />
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];
.....
..
<hr />
Je ne sais pas si ce que je fait ici est juste mais si c'est le cas comment dois je faire après un reset pour restituer les dernières configurations qui sont donc ces 4 indices des tableaux de char dans une variable int?

Ou autrement formulé, comment aller prendre des addresses 62 à 65 de l'eeprom( contenu en char) le contenu pour les mettre dans une seule variable int?

Dois je  passer par un struct ou il y a t-il plus simple ?

Merci