| | 首页 | 技术文章 | 下载 | 教程 | 生活百科 | 留言本 | 论坛 | 博客 | 商城 | 供求 | 主机域名 | 简介 | | |
![]() | ![]() |
| 您现在的位置: 华工单片机科技网 >> 技术文章 >> 嵌入式系统 >> 文章正文 |
|
|||||
| 变量定义修饰符 | |||||
| 作者:未知 文章来源:本站原创 点击数: 更新时间:2006-1-18 | |||||
| 变量定义有三个修饰符值得注意,虽然它们与标准C是相同的,但是在嵌入式C语言中又有不同的含义。 1) static 在子函数中static用声明的变量是局部变量,但是退出这个子函数后其值不消失。下一次调用这个函数时仍可以访问到原来的值。注意,在子函数中声明的static变量只对声明他的函数可见,别的函数是不可以使用的。如果static变量是在模块中声明的,那么只有本模块的函数可以使用它,别的模块中的函数是不能访问的。 void MyFunction (void) { static char myVar = 0; //用 static声明的局部变量 myVar = myVar + 1; } void main (void) { MyFunction(); //调用之前myVar = 0,调用之后myVar = 1 MyFunction(); //调用之前myVar = 1,调用之后myVar = 2 } 2) volatile 如果一个变量的值可能会被程序操作之外的其它操作所改变,那么你必需用volatile 声明。在嵌入式系统中其它操作是:中断服务程序的操作、硬件动作的操作。 用volatile声明的变量是不会被编译器优化掉的,如: volatile unsigned char PortA @0x0000; PORTA做为一个输入端口,其值是由外部设备决定的,由于外部设备的变化是随机的,因此第一次读取的值和第二次读取的值很可能不同,所以我们把它声明为volatile变量。 a = PORTA; a = PORTA; 由于PORTA是用volatile声明的变量,编译器不会把它优化成一句,而如果不是volatile声明的编译器就会将第二句优化掉,从而程序将会忽略输入端口的变化。 通常把嵌入式设备的所有外围器件寄存器都声明为volatile 的。 3) const 修饰符 const 可以用在任何变量之前, 告诉编译器把此变量存储在ROM中。ROM_VAR段是定位 const 变量的默认段 语法格式:#pragma CONST_SEG <段名> 例如: #pragma DATA_SEG DEFAULT #pragma CONST_SEG DEFAULT static int a;//变量 a 存放在默认的 RAM 段 DEFAULT_RAM 中,DEFAULT_RAM是段名 static const int c0 = 10;//变量 c0 存放在默认的 ROM 段 ROM_VAR 中,ROM_VAR是段名 此时编译器选项-Cc必需是打开的。如果编译器选项-Cc必需是关闭的,则变量a和c0都定位在DEFAULT_RAM中。 例如: #pragma DATA_SEG MyVarSeg #pragma CONST_SEG MyConstSeg static int a; //变量 a 存放在段MyVarSeg中,MyVarSeg是段名 static const int c0 = 10; //变量 c0 存放在段 MyConstSeg 中,MyConstSeg是段名 此时编译器选项-Cc必需是打开的。如果编译器选项-Cc必需是关闭的,则变量a和c0都定位在MyVarSeg中。 |
|||||
| 文章录入:江在流 责任编辑:江在流 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| |
| | 网站首页 |网站导航| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | | |
| 站长:红太阳 | |