位带操作可以理解为LED编程的文件描述符映射到内存,相当与mmap函数
公式为:
#define 寄存器的位带别名 = 0x42000000+(寄存器的地址-0x40000000)84+引脚编号4
例:
#define PEout(x) (uint32_t )(0x42000000+((uint32_t)&GPIOE->ODR-0x40000000)84+(x)4)
GPIOE->ODR获取端口的引脚电平
volatile关键字是让编译器不要优化该变量指的是防止编译器出现优化过度,导致代码运行失效
适用场合:
1)多线程编程共享全局变量的时候,该全局变量要加上 e volatile 进行修饰,让编译器不要优化该变量。
2)裸机编程的时候,某函数与中断服务函数共享全局变量的时候,该全局变量要加上 e volatile 进行修饰,让编译器不要优化该变量。
3)ARM 定义寄存器的时候,寄存器是指向一个地址,要加上 e volatile 进行修饰,让编译器不要优化该变量。