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 )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 )
...
Code : Sélectionner tout - Visualiser dans une fenêtre à part char entree1_event_http[4][3];
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Mais je voudrais que chaque dernière ligne du tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part strcpy(entree1_event_http[i-1],entree1_event_http[i]);soit stockée à l'adresse de départ + 3 caractères :
Code : Sélectionner tout - Visualiser dans une fenêtre à part entree1_event_http[3]
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