作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
嵌入式系统的绝对菜鸟。现在我正在尝试用 C
编写一个名为 nRF52832
的设备。我知道 GPIO
的基地址是 0x50000000
,OUT 寄存器的偏移量是 0x504
。如何创建指向 GPIO OUT 地址的指针并打印地址?
我会吗
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
bytes 的偏移量,则需要将其除以指针基类型的大小:
volatile unsigned int* GPIO_OUT = GPIO_BASE + (0x504 / sizeof *GPIO_BASE);
除了这个问题你的代码是正确的,并且是访问硬件寄存器的一种非常常见的方式。
关于c - 将指针写入 GPIO 输出引脚的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57951076/
我是一名优秀的程序员,十分优秀!