Bonjour tout le monde,
Je suis entrain de tester le bout de code suivant:
W_Data_Str est du type structuré suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 //Initialise la donnée: FonctionWritingData(&W_Data_Str); //lire la donnée: FonctionReadingData(W_Data_Str);
Le problème que j'ai c'est que; quand j'appelle la fonction FonctionReadingData et je vérifie après si ce que je lui passe en entrée est bien ce que j'initialise dans FonctionWritingData. Le dernier élément du dernier champ ne prend pas la bonne valeur!
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 typedef enum EnumType_e { Enum_1 , Enum_2 , Enum_3 } EnumType_t; typedef struct rxfqdc_Info_Common_s { unsigned char A[45]; EnumType_t B[45]; EnumType_t C[53]; EnumType_t D[53]; EnumType_t E[53]; EnumType_t F[53]; EnumType_t G[43]; EnumType_t H[43]; EnumType_t I[43]; EnumType_t J[2]; EnumType_t K[2]; EnumType_t L[2]; EnumType_t M[2]; EnumType_t N[2]; EnumType_t O[2]; EnumType_t P[2]; EnumType_t Q[2]; EnumType_t R[2]; EnumType_t S[2]; EnumType_t DataLastTable[2]; } My_struct_t __attribute__ ((aligned (2))) ;
ie: Supposons que j'initialise tous les éléments de ma structure à 2 (dans FonctionWritingData), dans FonctionReadingData je récupère le dernier élément W_Data_Str.DataLastTable[1] avec une valeur de 0 alors que tous les autres éléments de tous les champs prennent bien 2.
Sachant que:
1- Quand je fais pas d'alignement (je supprime le __attribute__ ((aligned (2))) ) le problème disparaît!
2- Quand je passe la sortie de la premiere fonction à la deuxieme par adresse (FonctionReadingData)là aussi le problème disparaît! (en gardant l'alignement)
Je n'arrive pas à trouver une explication à:
- ce qui arrive avec et sans l'instruction d'alignement.
- et avec le passage de la donnée par adresse et par valeur.
S'il vous plaît pouvez vous m'éclaircir un peu.
Par avance, je vous remercie énormément!
Cordialement,
Partager