Код
typedef union _CAN_ID
{
struct {
unsigned r1 : 3;
unsigned prior : 3;
unsigned sid : 8;
unsigned did : 8;
unsigned mes : 10;
} id;
struct {
unsigned int d;
} w;
struct {
unsigned char d[4];
} b;
} CAN_ID;
{
struct {
unsigned r1 : 3;
unsigned prior : 3;
unsigned sid : 8;
unsigned did : 8;
unsigned mes : 10;
} id;
struct {
unsigned int d;
} w;
struct {
unsigned char d[4];
} b;
} CAN_ID;
С полем mes, которое 10 бит, возникают проблемы. Вот результат с тестовым числом:
Код
id = 0x01000100
d0 = 0
d1 = 8
d2 = 0
d3 = 1
prior = 0
did = 0
sid = 20
mes = 4
d0 = 0
d1 = 8
d2 = 0
d3 = 1
prior = 0
did = 0
sid = 20
mes = 4
Т.е. возникло смещение на 2 бита. Компилятор хочет выровнять все по 8-бит границе.
Нельзя это победить какими-нибудь директивами компилятора?