位带操作和volatile关键字

位带操作可以理解为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 进行修饰,让编译器不要优化该变量。

猜你喜欢

转载自www.cnblogs.com/lp06/p/11847488.html