1 #define reg _ gpio _ ctrl *(volatile int *)(ToVirtual(GPIO _ REG _ CTRL)) 2 #define reg _ gpio _ data *(volatile int *)(ToVirtual(GPIO _ REG _ DATA))
3 /*初始化 LED*/ 专业始于专注 卓识源于远见 ‐ 10 ‐ 4 void LightInit(void) 5 { 6 reg _ gpio _ ctrl |= (1 << n); /*设置 GPIO 为输出*/ 7 } 8 9 /*点亮 LED*/ 10 void LightOn(void) 11 { 12 reg _ gpio _ data |= (1 << n); /*在 GPIO 上输出高电平*/ 13 } 14 15 /*熄灭 LED*/ 16 void LightOff(void) 17 { 18 reg _ gpio _ data &= ~(1 << n); /*在 GPIO 上输出低电平*/ 19 }需要理解#define reg _ gpio _ ctrl *(volatile int *)(ToVirtual(GPIO _ REG _ CTRL))
ToVirtual(GPIO _ REG _ CTRL) 表示一个数值,如0x20
那么 (volatile int *)(ToVirtual(GPIO _ REG _ CTRL)
前面加(volatile int *) 表示0x20是个地址,而且这个地址类型是volatile int,有着固定的地址。
再在前面加"*":*(volatile int *)0x20则变成了变量
*(volatile int *)0x20可看作是一个普通变量,这个变量有固定的地址,指向0x20。而0x20只是个常量,不是指针更不是变量。
后面的代码,就是针对这个地址进行赋值处理