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:
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
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 };
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.
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
J'ai donc pensé à déclarer une structure:
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.
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 };
Une autre contrainte: u8Header est un champ de bits comme suit:
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 struct header { uint8 u1Prpse: 1; uint8 u1PrpseInfo: 1; uint8 : 4; // unused bits uint8 u1RNDinc: 1; uint8 u1CMACinc: 1; } ; struct header u8Header;
Merci merci !!
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? }
Partager