对嵌入式系统的绝对支持。现在我正试图在nRF52832中编写一个名为C的设备。我知道GPIO的基址是0x50000000,输出寄存器的偏移量是0x504。如何创建指向GPIO输出地址的指针并打印地址?
我知道吗

volatile unsigned int* GPIO_BASE = (unsigned int*) 0x50000000;
volatile unsigned int* GPIO_OUT = GPIO_BASE + 0x504; ?

最佳答案

请记住,指针运算总是以指针基类型的单位完成的。
这意味着表达式GPIO_BASE + 0x504将添加一个字节偏移量0x504 * sizeof *GPIO_BASE,即0x504 * sizeof(int)(在大多数系统上,偏移量为5136字节,而不是1284字节)。
如果要添加0x504字节的偏移量,则需要将其除以指针基类型的大小:

volatile unsigned int* GPIO_OUT = GPIO_BASE + (0x504 / sizeof *GPIO_BASE);

除了这个问题,你的代码是正确的,并且是一种非常常见的访问硬件寄存器的方法。

09-15 15:07