这个。这里要注意一点的是,这个变量要用 c 语言的 volatile 关键字来修饰,为的是让编译器不要去优化这个变量。这样每用到这两个变量时都要回到相应变量的内存中去取值,而volatile 字面意思就是“可变的,不确定的”。例如:“不使用 volatile 关键字修饰的变量 a 在被访问的时候可能会直接从CPU 的寄存器中取出(因为之前变量 a 被访问过,也就是说之前就从内存中取出 a 的值保存到某个 CPU 寄存器中)”,之所以直接从寄存器中取值,而不去内存中取值,是因为编译器优化代码的结果(访问 CPU 寄存器比访问内存快的多)。这里的 CPU 寄存器指 R0、R1 等 CPU 通用寄存器,用于 CPU 运算是暂存数据的,不是指外设中的寄存器。 , 第 38 页-用 volatile 声明的类型变量表示可以被某些编译器未知的因素更改,比如:
操作系统、硬件或者其它线程等。