我目前正在编程覆盆子皮。
我想澄清一些疑问,请大家帮忙。
这是代码片段。

#define GPIO_BASE 0x20200000UL

gpio = (unsigned int*)GPIO_BASE; gpio[GPIO_GPFSEL1] |= (1 << 18);

此代码来自http://www.valvers.com/embedded-linux/raspberry-pi/step01-bare-metal-programming-in-cpt1
我确实了解代码的功能,可以打开和关闭LED。
我很难理解这些说法
gpio = (unsigned int*)GPIO_BASE; gpio[GPIO_GPFSEL1] |= (1 << 18);

最佳答案

好。。。
第一句话:

gpio = (unsigned int*)GPIO_BASE;

将指针变量gpio设置为GPIO_BASE的值,并将后者强制转换为指针类型。
第二次
gpio[GPIO_GPFSEL1] |= (1 << 18);

gpio[GPIO_GPFSEL1]中的值按位或按常量值1 << 18执行操作。该“开启”寄存器GPIO_GPFSEL1中的第18位(从0开始计数)。
请记住,在C中,数组索引a[b]*(a + b)相同,即指针添加和取消引用。

关于c - Raspberry pi的C语言中的裸机编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25886531/

10-15 01:53