1、volatile内存映射的I/O端口,或者是硬件寄存器,每次都是重新读取这个变量的值,在中断服务程序中使用的非自动变量,或者多线程应用程序多个任务共享的变量也必须用到volatile进行限定。必须使用volatile的实例(但是这里没有使用): int flag=0;//这里定义的全局变量或者static定义的局部变量都是非自动变量 void f( )//在f( )函数中没有修改flag,只执行一次将flag=0缓存在寄存器当中,以后每次访问flag都使用缓存值 而不对存储器的绝对地址访问 { while(1) { if(flag) // some_avtion(); } } void isr_f( )//这个是中断处理程序 { flag=1; //中断或者外部硬件使得他为1,缓存的寄存器检测不到,那儿的flag一直是0 } |
更多回帖