6 votes

Problème d'emballage d'unions et de structures

J'écris un logiciel où chaque bit doit être exact (c'est pour le CPU) donc __packed est très important.

typedef union{
uint32_t raw;
struct{
    unsigned int present:1;
    unsigned int rw:1;
    unsigned int user:1;
    unsigned int dirty:1;
    unsigned int free:7;
    unsigned int frame:20;
} __packed;
}__packed page_union_t;

c'est ma structure et mon union. Mais cela ne fonctionne pas :

page_union_t p; //.....
//This:
p.frame=trg_page;
p.user=user;
p.rw=rw;
p.present=present;
//and this:
p.raw=trg_page<<12 | user<<2 | rw<<1 | present;

devrait créer le même uint32. Mais ils ne créent pas la même chose.

Y a-t-il quelque chose que je ne vois pas qui ne va pas dans mon syndicat ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X