【发布时间】:2016-09-08 10:22:11
【问题描述】:
我想把一个通用寄存器分成三个独立的寄存器;两个 8 位寄存器和一个 16 位寄存器。这是我正在使用的方法,但我认为它可能是错误的。
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,要么限定演员。 -
看起来答案已被拥有所有 cmets 的人删除。简而言之,我目前使用的解决方案是否足够?