Microtec 68000 et alignement mémoire
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:
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.
Citation:
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...
Citation:
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.