我一直在阅读有关访问外围设备的内存映射寄存器的信息,似乎您可以通过多种方式进行操作。例如:
方法一:
#define MyReg 0x30610000
volatile int *ptrMyReg;
ptrMyReg = (volatile int *) MyReg;
*ptrMyReg = 0x7FFFFFFF; /* Turn ON all bits */
方法二:
#define MyReg 0x30610000
volatile unsigned char *ptrMyReg;
ptrMyReg = (volatile unsigned char *) MyReg;
*ptrMyReg = 0x7FFFFFFF; /* Turn ON all bits */
问题:是否有任何具体原因说明为什么选择一个而不是另一个?
假设:架构上的 int 大小为 4 个字节。
最佳答案
*ptrMyReg = 0x7FFFFFFF;
在第二种情况下, *ptrMyReg
是 unsigned char
类型,因此 0x7FFFFFFF
将在赋值之前转换为 unsigned char
(即转换后的值将是 0xFF
)并且只会写入一个字节。如果您最初打算写 4 个字节,我认为这不是您想要的。