KEIL C51中const和code的使用

2016-12-15 14:57:52来源: eefocus 关键字:KEIL  C51  const  code

  codeKEIL C51 扩展的关键字,用code修饰的变量将会被放到CODE区里。但C语里的const关键字好像也有定义不能改变的变量的功能,这两个关键字有什么区别呢?
在帮助手册里查找const,可以找到以下的描述
1 Variables declared with the const type qualifier alone are stored in the memory area (data, idata, xdata, and so on) associated with their definition. 
2 Variables you want to locate in ROM must be declared with the code memory type.
意思应该是:用CONST修饰修饰的变量放在RAM里了,但你不能改它。用CODE修饰符修饰的变量放在FLASH里了。

it is possible to assign the address of a const object (mask) to a non-const pointer (p) and subsequently use the pointer to change the const object. In this case, the compiler does generate code to write to the const object. The effects of this code is undefined and may or may not work as expected
  可以用一个非COSNT的指针指向一个CONST变量,并且可以使用这个指针指向的变量。编译器不会产生错误,但此时程序的运行结果是不可以预测的。
  根据上面说的,const关键字在C51里的作用是弱的,所以基上应该用不到。不止是C51,一般的C也一样。可以试一下,这个程序半个警告都没有,但是运行结果是1。

#include #include int main(void)
{        const int a = 2;        int *p;
        p = (int *)(&a);        *p = 1;
        printf("%d\n", a);        return 0;
}

  因为最后,a的值是存储在内存中的。内存有办法直接修改,同时更改内存不超出本程序的内存范围(不然被操作系统杀死),自然可行。
其实想一个简单的道理:以前用FPE之类的东西改游戏,别人源程序里有没有const我们没注意过吧,其实也不可能知道,甚至连别人的源程序是什么语言写的也都没关系。因为只要是目标程序内存里的量,一概可以改,别的一概不论。

  其实在我的编译器上(GCC/mingw),就不用说用指针了,就算直接写a=1都能成功把a改掉。但是这样就会有个大warning报警,可以发现。
const的约束是建议性的,只是一种防止意外写出“constvar = 1;”这类错误赋值的提示手段。const很有用,但不是保证变量不被改的方法。
  而code是硬件实现的,防改性能自然OK。不过考虑到编程习惯,我建议:见到code,一律写成const code。明确表意,防止写出意外的赋值出错。


关键字:KEIL  C51  const  code

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2016121532346.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:C51函数的递归调用
下一篇:最后一页

论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
KEIL
C51
const
code

小广播

独家专题更多

2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved