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 :
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];
Je veux obtenir des blocs sans alignement et donc deux index sur un octet.
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
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|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|
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...

Quelqu'un a une idée ? Pourquoi cela fonctionnerait sur un enum et pas un struct ?

Cordialement,
xTG.