
Re: Structures, unions... ? |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Désolé, je n'avais pas vu ton message #11.
Charly t'a répondu. pas grand chose à ajouter. Juste peut-être pour dire que si ta structure était définie comme un type, ça n'occuperait aucune place puisqu'un type est abstrait. Mais chaque variable instanciée à partir de ce type va occuper physiquement la place nécessaire en RAM. Cette place peut être obtenue par l'opérateur sizeof (si, si, c'est bien un opérateur) comme Charly l'a évoqué.
Posté le : 06/05/2020 14:10
|
|
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Salut, mauvaise nouvelle, La virtualisation sous Windows pose encore pas mal de problèmes: soit je peux utiliser VMware, soit je peux émuler un terminal Android, et comme je m'essaie à Android pendant le confinement ...
Donc pas de machine virtuelle et pas de CodeWarrior. J'ai tout de même fait quelques tests. Mais ce sera du code pour du PC. J'ai fait les tests grâce à WSL (Windows Subsystem for Linux, une distribution Debian en l'occurrence), donc compilateur gcc. test1:
#include <stdint.h>
A la compilation: Citation : testStruct_S08.c:13:17: warning: initialization of ‘uint8_t *’ {aka ‘unsigned char *’} from incompatible pointer type ‘struct myStruct *’ [-Wincompatible-pointer-types] C'est un warning, correspondant je pense au problème d'incompatibilité que tu as du rencontré. Mais l'exécutable est généré et l'affichage (en hexadécimal) donne: Citation : 05 7f 07 00 17 00 00 00 02 00 00 00 J'applique la solution que je t'ai donnée hier pour supprimer le problème d'incompatibilité:
uint8_t* p = (uint8_t*)&str;
Sinon, pour le problème d'alignement (que tu ne devrais pas rencontrer je pense), je l'ai supprimé avec un attribut au niveau de la structure:
struct __attribute__((__packed__)) myStruct {
Résultat:Citation : 05 07 00 17 00 00 00 02 00 00 00 A+
Posté le : 06/05/2020 12:08
|
|
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Merci David,
Ben le soucis, c'est que cette structure dois servir de buffer à la fois pour l'emission que pour la réception, donc en ram. En gros il faut envoyer cette structure avec quelques valeurs initialisées au serveur, et, après vérification, ce même serveur renvoi la même trame avec l'heure actuelle.
Posté le : 06/05/2020 11:45
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
23/10/2005 11:40 De Aix les Bains (73)
Messages:
1943
![]() |
Salut
Une structure n'est qu'un regroupement de plusieurs variables, ça se comporte donc pareil. Perso en C je m'en sers avec a l'esprit l'idée d'en faire la "programmation objet" du C. je regroupe dans une structure tout ce qui relève de la même responsabilité, du même "objet". La place occupée va dépendre de la quantité de choses que tu mets dedans et de l'alignement dont t'as déjà parlé Jacques. Sur le S08 l'alignement doit pas poser soucis il me semble mais sur 32 bit ça met un gros bazar. Tu peux faire un sizeof(mastructure) pour connaitre la taille; sachant que s'il y a alignement et que ça pose soucis alors tu as des commandes de compilation qui te permettent de dire au compilo de ne pas aligner. (perte de perf mais gain de place et suppression des effets de bord) Par défaut c'est pris en RAM mais tu peux, comme pour toute donnée la définir en constante en flash.
Posté le : 06/05/2020 11:31
|
|
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
|
||
![]() |
Re: Structures, unions... ? |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Salut Jacques,
Et dis moi, comment est stockée une structure en mémoire ? Est-elle en ram en permanence à la manière d'un tableau ou bien chargée uniquement lorsqu'on s'en sert ? Un telle structure prend quand même pas ma de mémoire !
Posté le : 06/05/2020 11:21
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
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 !
|
||
![]() |
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
![]() |
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
![]() |
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
![]() |
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 !
|
||
![]() |