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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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,