Parcourir ce sujet :
1 Utilisateur(s) anonymes
Structures, unions... ? |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Bonjour à tous,
Si je créé une structure avec des types différents, ai-je le moyen, par adressage par exemple, de retrouver l'ensemble de mes données 8bits en mémoire, puisque j'ai un S08 ? Par exemple la structure suivante (non codée) : struct(U8 = 0xFF , U16 = 0x0AB1 , U32 = 0x11223344) Je dois bien pouvoir récupérer quelque par l'équivalent stocké de chaque octet à la suite : FF,0A,B1,11,22,33,44 Vous l'aurez compris, il me faut envoyer et recevoir des types plus grand qu'un U8 via ma sci ...
Posté le : 05/05/2020 15:51
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Avec un pointeur sur la structure, tu dois pouvoir accéder à n'importe quel octet.
Attention, certains compilateurs alignent les champs en taille pour favoriser la rapidité d'accès. Bon, avec un processeur 8 bits ça ne présente pas d'intérêt, mais je préfère préciser.
Posté le : 05/05/2020 18:17
|
|
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Tu veux dires que les données ne seraient pas stockées dans le bon ordre ?
Posté le : 05/05/2020 21:43
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Non, ce n'est pas un problème d'endiannes, mais d'alignement:
Par exemple, tu crées une structure qui stocke un float, un char et un long int (32 bits). Si le compilateur se contente de se faire succéder les octets de ces 3 champs, ça va poser un problème sur un processeur 32 bits par exemple: le char faisant 1 octet, le long int qui suit va démarrer sur une adresse impaire et il faudra donc 2 accès mémoire pour le récupérer en entier. Du coup, le compilateur va préférer aligner les champs sur des adresse multiples de 4 et le char prendra 4 octets même s'il n'y en a qu'un d'utile.
Posté le : 05/05/2020 21:58
|
|
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Ah ok compris.
Bon je viens de réussir. Par contre, ça ne marche pas lorsque je récupère l'adresse de la structure dans un pointer, car au moment de la copier dans une case U8, le compilateur me plante une erreur de type, puisque le type d'une structure est différent d'un U8 ... En guise de test, j'ai rempli mon buffer Tx de ma SCI à partir de valeurs arbitraires de la structure. Donc j'ai été obligé de faire l'adressage à partir du premier membre.
struct ntp_timestamp {
Puis dans le C :
for(;;) {
Posté le : 05/05/2020 23:47
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Pffff quelle poisse les structures les unions ça m'a pris la tête !
Posté le : 05/05/2020 23:52
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Tu peux me montrer le code qui ne fonctionne pas avec l'erreur générée?
Posté le : 05/05/2020 23:54
|
|
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
for(;;) {
Si j'utilise
pointer
p
J'ai créé un pointer de structure (pointer) et un du 1er membre (p)
Posté le : 06/05/2020 00:00
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Qu'est-ce que tu utilises pour développer. Je devrais pouvoir retrouver une vielle machine virtuelle XP avec CodeWarrior encore installé au cas où.
C'est un compilateur C ou C++? Sinon, en attendant, si tu fais:
U8 *p = &test;
Au cas où ça coince encore, essaies ça:
U8 *p = (U8*)&test;
Posté le : 06/05/2020 00:09
|
|
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Je suis sous Codewarrior 10.6 éclipse. En C.
J'essaye ça dés demain. En tout cas merci.
Posté le : 06/05/2020 00:18
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.