一、简述
1、extern关键字
定义方式 :
extern int a;
显式的说明了a的存储空间是在程序的其他地方分配的,在文件中其他位置或者其他文件中寻找a这个变量。
在a.c文件中要引用b.c文件中的变量时,需要在a.c文件中用extern声明所用到的变量。
2、volatile关键字
定义方式:
volatile int vint;
简单地说就是防止编译器对代码进行优化。
二、volatile关键字详解
volatile关键字的本质为:
1、防止编译器优化代码
2、告诉编译器这是一个可能随时变化的变量
应用1:可能随时改变的变量如:中断服务子程序会改变的变量、多线程中被几个任务共享的变量等
volatile int i=10;
int j=10;
假设i,j的值均可能被DSP中的其他核改变或者被中断服务子程序改变:
i 为volatile关键字修饰,告诉编译器i可能随时改变,每次访问i时直接从地址进行读取,避免因为编译器优化从Cache中读取,保证时刻访问的都是i最新的值;
反之,j 为普通int类型,编译器访问i时可能会从Cache中读取,然而实际地址中的i值可能已经被改变了,导致访问j值出错;
应用2:for循环中,防止循环变量被优化
for (i = 0 ;i < 1000 ; i++ )
{
a++;
}
i递增的本质是为了延时;如果编译器将其优化为a = a+1000;就丧失了延时的功效。