Я хочу разбить регистр общего назначения на три отдельных регистра; два 8-битных регистра & один 16-разрядный регистр. Это подход, который я использую, но я думаю, что это может быть неправильно.Разбиение 32-битного регистра в байтах с переменным размером
typedef struct {
volatile uint8_t reg_0;
volatile uint8_t reg_1;
volatile uint16_t reg_2;
} reg_split;
#define REG_BASE (0xA040000C)
#define REG ((reg_split *)REG_BASE)
И это, как я доступа к регистру:
REG->reg_0 = 0xFF;
Является ли это неправильный подход или их уборщик решение?
подход нормально, если ABI гарантии вашей платформы правильный макет. В любом случае это зависит от платформы. например ARM AAPCS, например. Однако не делайте одиночные поля 'volatile'. Либо квалифицируйте 'struct', либо cast. – Olaf
Похоже, что ответ был удален кем-то со всеми комментариями. Короче, это решение, которое я сейчас использую достаточно? – homeGrown