Problema de empaquetamiento de unión y estructura
Estoy escribiendo un software donde cada bit debe ser exacto (es para la CPU), por lo que __packed es muy importante.
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;
esa es mi estructura y unión. Sin embargo, no funciona:
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;
debería crear el mismo uint32. Pero no crean lo mismo.
¿Hay algo que no puedo ver que esté mal con mi sindicato?