Bonjour,
j'ai actuellement un problème d'alignement mémoire avec un champ de bits.
Je travaille avec le compilateur Microtec pour Motorola 68000.
L'option -x permet d'activer les extensions Microtec pour le langage C (option activée cependant par défaut à lire la doc) et notamment l'utilisation du mot clé packed permettant de gérant l'alignement en mémoire.
Mon souci est qu'avec la structure suivante :
Je veux obtenir des blocs sans alignement et donc deux index sur un octet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 typedef packed struct { u8_T test1:1; u8_T test2:2; u8_T test3:1; }test_T; static test_T tab[5][5];
Sauf que systématiquement avec ou sans le mot clé packed il m'aligne chaque index sur 16bits...Octet 1 : |test1|test2(1/2)|test2(2/2)|test3|test1|test2(1/2)|test2(2/2)|test3|
Octet 2 : |test1|test2(1/2)|test2(2/2)|test3|test1|test2(1/2)|test2(2/2)|test3|
ect
Je pensais au début que c'était du au système d'adressage qui est sur 16bits mais j'ai trouvé des zones mémoire contenant des "booléens" qui ont étés alignés sur un bit...Octet 1 : |test1|test2(1/2)|test2(2/2)|test3|bit_align|bit_align|bit_align|bit_align|bit_align|bit_align|bit_align|bit_align|
Octet 2 : |test1|test2(1/2)|test2(2/2)|test3|bit_align|bit_align|bit_align|bit_align|bit_align|bit_align|bit_align|bit_align|
Quelqu'un a une idée ? Pourquoi cela fonctionnerait sur un enum et pas un struct ?
Cordialement,
xTG.
Partager