Bonjour tout le monde
je veux déclarer une structure censée représenter un télégramme radio. Ce télégramme est supposé contenir:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
struct Telegramme
{
  uint8_t   u8choice;             //identifiant
  uint8_t   u8Header;            
  uint8_t   u8Data[];             //données applicatives
  uint32_t  u32SenderId;        // ID
  uint8_t   u8Status;             //statut
  uint8_t   u8Chk;                 //Checksum
};
le datagramme doit avoir cet ordre bien précis. Le problème je ne connais pas la taille des données applicatives avant exécution car elle dépend justement du u8Header.Le header est censé définir la longueur du champ u8Data[].Disons que suivant le type du télégramme le tableau u8Data[] peut inclure 1, 2 ou 3 de ces variables :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
uint32_t  u32RLC   // 4 byte
uint32_t  u32RND   // 4 byte
uint32_t  u32CMAC  // 4 byte
Ne faites pas attention aux noms des variables (c'est des notions souvent utilisés en cryptographie) peu importe. je veux que le tableau prenne la taille des variables qui seront incluses suivant les types de telegrammes (si deux variables le tableau aura une taille de 8 bytes si 3 alors 12 bytes) je ne veux pas de buffer non plus avec une taille maximale de 12 bytes pour le worst case.

J'ai donc pensé à déclarer une structure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
struct Telegramme
{
  uint8_t   u8choice;             //identifiant
  uint8_t   u8Header;            
  uint32_t  u32SenderId;        // ID
  uint8_t   u8Status;             //statut
  uint8_t   u8Chk;                 //Checksum
  uint8_t   u8LengthData;       //Taille des données applicatives    
  uint8_t*   u8Data[];             //données applicatives
 };
avec un pointeur sur le tableau u8Data[] car sur mon development tool je n'ai pas le droit d'utiliser malloc.donc je me suis dit qu'avec un pointeur sur u8Data[] je pourrais suivant u8LengthData remplir les champs du tableau au cas par cas.
Une autre contrainte: u8Header est un champ de bits comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
struct header {
uint8          u1Prpse:  1;
uint8          u1PrpseInfo: 1;
uint8              : 4;                      // unused bits 
uint8          u1RNDinc: 1;
uint8          u1CMACinc: 1;
} ;
struct header u8Header;
j'ignore totalement comment "agencer" cette structure Telegramme avec toutes ces contraintes et surtout comment remplir u8Data dans l'application.j'imagine qu'avec une boucle for ca devrait faire l'affaire mais je ne vois pas comment:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
int main()
{
   int i;    //counter
   struct Telegramme myTel;     //je déclare une structure de type Telegramme
   for(i=0;i<2;i++)    //prenons le cas u8LengthData est égal à 2 c-à-d les données applicatives font 8 bytes
   {
      myTel.u8Data[i]= 0x11223344;   //comment faire?? est-ce juste?
   }
Merci merci !!