La fonction ci-dessous me permet d'écrire dans une mémoire EEPROM, une chaine de caractères appelée eeprom_buffer
Il est possible de définir le un nombre de caractères à écrire et l'adresse de départ (en hexa) ou sera écrit ces caractères : ( testé ça fonctionne )
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
static void Eeprom2_save(size_t size, LWORD address_start)
{
int i;
XE2BeginWrite(EEPROM_CONTROL, address_start);
for(i = 0; i < size; ++i)
{
XE2Write(eeprom_buffer[i]);
}
XE2EndWrite();
} |
Je voudrais associer cette fonction dans le programme suivant ( sorte de ring buffer : qui stocke la chaine entree1_event_http dans un tableau de 4 lignes puis écrase la plus ancienne à chaque fois qu'un nouvel évenement se présente )
char entree1_event_http[4][3];
...
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
| // Detecte les changements d'états de ETAT_DIN1 :
new_state1 = ETAT_DIN1;
// Détection d'un changement d'état
if (old_state1 != new_state1)
{
if (new_state1 == 1)
{
// Traitement du front montant
time = GetTimeTick(); // Get time
offtime(&tm_time, time, LOCAL_OFFSET_SECS);
asctime(&tm_time, event_time_http, 7); // Met dans event_time_http l'heure au format n°7
// Sauvegarde des évenements dans tableau (tab_entree1_event_http qui contient 4 lignes :
for(i=1;i<4;i++) // Paramètre qui indique combien il y a de lignes a décaler ( ici 4 )
{
strcpy(entree1_event_http[i-1],entree1_event_http[i]); // On copie l'element i vers i-1 ( la ligne 4 est copiée sur la ligne 3 , etc ... )
}
strcpy(entree1_event_http[3],etiquette_entree1);
sstrcat(entree1_event_http[3],event_time_http); // On copie l'heure de l'evenement actuel dans la dernière ligne du tableau (ligne 3 car on débute à 0)
}
else
{
// Traitement du front descendant
}
old_state1 = new_state1;
} |
Je cherche à stocker avec la fonction Eeprom2_save décrite plus haut, la chaine entree1_event_http[3] dès que l'on décale les lignes dans le tableau, immédiatement après :
strcpy(entree1_event_http[i-1],entree1_event_http[i]);
Mais je voudrais que chaque dernière ligne du tableau : soit stockée à l'adresse de départ + 3 caractères :
Exemple, si l'adresse de départ est 0x000000, on aurait à chaque fois que l'on décale une ligne dans le tableau , la dernière ligne stockée à adresse + 3
1er evènement : entree1_event_http[3] stocké en 0x000000
2ème evènement : entree1_event_http[3] stocké en 0x000003
3ème evènemen t : entree1_event_http[3] stocké en 0x000006
4ème evènement : entree1_event_http[3] stocké en 0x000009
etc ...
Pourriez vous m'aider à réaliser cela svp ?
Je vous remercie,
Partager