У меня есть некоторая 32-битная область памяти, заполненная аппаратным обеспечением данными этого типа:
reg1 : 63 | 62 | ... | 32 | reg0 : 31| ... | 0
-------------------------- | ----------------
val | time value upper | time value lower
Я пытаюсь получить значение времени и значение 'val' одновременно с struct и union .
Сначала я попробовал:
typedef struct
{
uint64_t time : 63;
uint64_t value : 1;
} myStruct;
, но это не работает, myStruct.time
не может быть больше 32 бит.
Я пробовал несколько вещей, событие somethign, подобное этому:
typedef union
{
union{
struct{
uint32_t lower : 32;
uint32_t upper : 31;
} spare;
uint64_t value;
} time;
struct{
uint32_t spare_low : 32;
uint32_t spare_upp : 31;
uint32_t value : 1;
} pin;
} myStruct;
Но в этом случае myStruct.time.value
, очевидно, получает бит 63. Я получаю некоторые значения, например 0x8000_0415_4142_3015 вместо 0x0000_0415_4142_3015.
Как Могу ли я легко получить значение времени в 63 бита и значение 1-битного вывода?
PS: я знаю, что могу создать макрос чего-то подобного, я ищу прямой метод.