我一直在阅读有关访问外围设备的内存映射寄存器的信息,似乎您可以通过多种方式进行操作。例如:

方法一:

#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;
在第二种情况下, *ptrMyRegunsigned char 类型,因此 0x7FFFFFFF 将在赋值之前转换为 unsigned char (即转换后的值将是 0xFF )并且只会写入一个字节。如果您最初打算写 4 个字节,我认为这不是您想要的。

10-08 04:05