对嵌入式系统的绝对支持。现在我正试图在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);
除了这个问题,你的代码是正确的,并且是一种非常常见的访问硬件寄存器的方法。