const和const volatile关键字



constconst volatile关键字

const 关键字

关键字“const”,C语言中命名最差的关键字,并不表示恒量,而是代表“只读”。在

嵌入式系统中,有很大的不同,这一会应会明白。

Const声明可用于任何变量,它告诉编译器将其存贮在ROM代码。编译器保留了那个位置

程序存贮器地址。由于位于ROM中,其值不能改变。

由于它作为常量工作,必须赋一初值。如:const double PI = 3.14159265;

Const 变量与明显的常数相对,很多原文要求用const变量代替明显的常数。例如:

const unsigned char channels = 8;代替#define CHANNELS 8

本方法的基本原理是在调试器内部,你能检查一个const变量,然而一个明显的常数不

可访问。不幸的是,在很多8位机上你将为这一好处付出极大的代价。这两个主要代价是:

一些编译器在RAM中创建一个真实的变量来支持cost变量,这是一个极大的惩罚。

一些编译器如CodeWarrior,知道变量为const,将把变量存贮在ROM中。无论怎样,

变量仍作为变量处理和访问,典型地用某些变址寻址(16位)的方式。与直接寻址(8位)方

式相比,这种方法通常很慢。

Const的用法:

const unsigned short a;

unsigned short const a;

const unsigned short *a;

unsigned short * const a;

 

 

const volatile 关键字

现在讨论一个深奥的问题,一个变量既能是常量,又能是可变量吗?如果是这样,这意

味什么,怎样使用?答案是“能”。

这个修饰符应该用于能出乎意料地改变的任何存贮器位置,因此需要volatile限定语,

由于const该变量是只读的。

最明显的例子是硬件状态寄存器,象SCI状态寄存器SCS1。这个寄存器包含信号状态标志,

如发送空、发送完成、接收满以及其它。这是一个可变寄存器由于这些标志的改变依赖于串行

通信的状态,这也是只读,由于标志不能被程序直接改写,它们只对模块的状态作出响应。

这个状态寄存器最佳声明方法是:

const volatile unsigned char SCS1 @0x0016

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值