用【||】字体浏览
C51BBS论坛>>C51编程:请问大家Volatile和const类型的变量在程序中究竟有何特殊的用处

C51编程:请问大家Volatile和const类型的变量在程序中究竟有何特殊的用处 [zhangzhangjie] 2008-5-12 10:56:29


  • const是常量,不是变量;volatile是用来防止优化 [qllaoda] 2008-5-12 11:09:32

    volatile用于防止相关变量被优化。
    例如对外部寄存器的读写。对有些外部设备的寄存器来说,读写操作可能都会引发一定硬
    件操作,但是如果不加volatile,编译器会把这些寄存器作为普通变量处理,例如连续多
    次的对同一地址写入,会被优化为只有最后一次的写入。实际上,网卡的数据发送,就是
    按顺序连续往一个同地址写入数据,如果被优化,网卡将不能正常驱动。
    对于外部寄存器的读写,经常用 XBYTE,其实你看一下XBYTE的原型就知道了,里面也是有
    个volatile的。
    另一个使用场合是中断。
    如果一个全局变量,在中断函数和普通函数里都用到过,那最好对这个变量加volatile修
    饰。否则普通函数里,可能会仅从寄存器里读取这个变量以便加快速度,而不去实际地址
    读取该变量。

  • 可以用#define来定义一个常量啊,为什么还需要const呢? [zhangzhangjie] 2008-5-12 11:22:15


  • 准确地说,#define定义的只是一个符号 [qllaoda] 2008-5-12 11:24:07

    当然,大多数情况下,常量都可以用define来定义

  • const说明变量存放的位置在代码区 [gz_zhmj] 2008-5-12 11:27:39

    所以只能读,不能写。可以看成常量。
    而#define定义的常量并不存在,编译器将它直接代替代码中的指明的地方,这样程序的可
    读性高。

  • 那就是说比较重要的变量应该加上volatile吧?或者我不选择优化呢 [zhangzhangjie] 2008-5-12 11:42:06


  • 这个优化选项可能是你无法选择的 [三星光棱] 2008-5-15 18:07:18

    所以,某些场合还是要加的。但并不是重要的变量就加。

点击回主题参与讨论 >>>
_____________________________________________________________________________
Copyright©,C51BBS论坛 1999-2006