分享

volatile声明的意义

 心不留意外尘 2016-05-06
http://blog.sina.com.cn/s/blog_6c762d950100zydo.html
2012
       将一个变量说明为volatile表示这个变量是“易变的”。如果一个变量会被其它引用改变,或在其它并行的任务中会被改变(例如中断服务程序),都要显式地说明为“volatile”。否则在编译器优化阶段会作出错误的判断,例如将这个变量读入寄存器以后,在没有对这个变量赋值以前,会一直使用寄存器中的值,而实际上这个变量的值可能已经被一个指针引用改变了,或者是在中断服务程序中被改变了,下面这个例子(在8051单片机上的一段程序)说明这种错误:

     有一个变量T,在定时中断中每隔一个固定时间减1,然后在主程序中等待它减到0。

     unsigned char T; 
     void T0_int(void) interrupt 1
     {
        ...
         T--;
        ...
     }

     void main(void)
     {
        ...
        T=10;
         while (T!=0);   
       ...
      }

     正确的写法应该是将第一句改为:
     volatile unsigned char T;

    *注:这个例子并不是针对特定的编译器,所以可能在有些编译器中能正确编译。但作为一个健壮的程序,一定要注意这一点,否则即使能得到正确结果,也会给程序移植或升级带来意想不到的问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多