当前位置: 代码迷 >> 单片机 >> volatile在程序中的功用!
  详细解决方案

volatile在程序中的功用!

热度:93   发布时间:2016-04-28 15:27:41.0
volatile在程序中的作用!!
求教volatile在程序中的作用!!

------解决方案--------------------
         volatile 实例讲解

        volatile的本意是一般有两种说法--1.“暂态的”;2.“易变的”。
        这两种说法都有可行。但是究竟volatile是什么意思,现举例说明(以Keil-c与a51为例
        例子来自Keil FQA),看完例子后你应该明白volatile的意思了,如果还不明白,那只好
        再看一遍了。


        例1.

        void main (void)
        {
        volatile int i;
        int j;

        i = 1;  //1  不被优化 i=1
        i = 2;  //2  不被优化 i=1
        i = 3;  //3  不被优化 i=1

        j = 1;  //4  被优化
        j = 2;  //5  被优化
        j = 3;  //6  j = 3
        }
        ---------------------------------
        例2.

        函数:

        void func (void)
        {
        unsigned char xdata xdata_junk;
        unsigned char xdata *p = &xdata_junk;
        unsigned char t1, t2;

        t1 = *p;
        t2 = *p;
        }

        编译的汇编为:

        0000 7E00    R     MOV     R6,#HIGH xdata_junk
        0002 7F00    R     MOV     R7,#LOW xdata_junk
        ;---- Variable 'p' assigned to Register 'R6/R7' ----

        0004 8F82          MOV     DPL,R7
        0006 8E83          MOV     DPH,R6

        ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 注意
        0008 E0            MOVX    A,@DPTR
        0009 F500    R     MOV     t1,A

        000B F500    R     MOV     t2,A
  相关解决方案