Chinaunix首页 | 论坛 | 博客
  • 博客访问: 310502
  • 博文数量: 92
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 960
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-21 19:38
文章分类

全部博文(92)

文章存档

2010年(71)

2009年(21)

我的朋友

分类: 嵌入式

2010-06-07 17:38:03

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

阅读(3842) | 评论(0) | 转发(0) |
0

上一篇:volatile关键字

下一篇:static 关键字

给主人留下些什么吧!~~