定义样例
#define IO0PIN (*((volatile unsigned long *) 0xE0028000))
(volatile unsigned long *) 0xE0028000
把0xE0028000这个地址强制转换为long型指针.即对指针的操作的范围是从0xE0028000开始的4个字节(long型).
volatile 限定编译器不对这个指针的指向的存储单元进行优化,即不用通用寄存器暂时代替这个指针的指向的存储单元,而是每次取值都直接到指针的指向的存储单元取值.
前面再用*运算附对指针取值,即寄存器的值。
volatile 主要用于变量会异步改变的情况下,主要有三个方面:
1.cpu外设寄存器
2.中断和主循环都会用到的全局变量
3.操作系统中的线程间都会用到的公共变量.
本文解析了#defineIO0PIN宏定义的具体含义及其应用场景,包括如何通过强制类型转换访问特定内存地址,并解释了volatile关键字的作用及使用场景,如CPU外设寄存器、中断与主循环共享的全局变量以及操作系统中线程间共享的变量。
444

被折叠的 条评论
为什么被折叠?



