天桥陨石分享 http://blog.sciencenet.cn/u/chrujun 让地球物理仪器飞起来

博文

C8051单片机C语言程序设计的几个深层次问题及解决方法

已有 8022 次阅读 2010-9-29 11:17 |个人分类:地球物理及仪器|系统分类:科研笔记| C语言, 程序设计, 单片机, 8051

     当在单片机(8051)环境下编写C语言程序设计时,常常会发生一些奇怪的现象。一个变量明明赋值为500,在运行过程中却莫名其妙地变成1000。 在WINDOWS下运行完全正常的算法,移植到单片机上就会出错。 如果无法保证一个变量的值按照程序设计者的要求变化,程序出现各种乱象就不奇怪了。

   这种现象出现在C语言程序比较长,子程序比较多,或是子程序的层次比较多的场合。 因此,在单片机环境下用C语言开发比较大的程序,很容易出现各种问题。

   这种问题出在编译器优化上。由于单片机资源有限,编译器采取了很多优化手段来减少资源占用。 在KEIL C上,编译器优化的层次有9级。然而,仅仅是二级优化(Data overlaying),就会导致长程序出现问题。 对于比较长的程序,应该只使用一级优化,更先进的优化最好不要用,否则会出现无法预料的问题。

  用单片机开发比较长的程序时,应该选择有大容量程序存储空间和数据存储空间的单片机,将编译器优化限制在第一级,其它层次优化尽量避免用。 因为二级优化的数据覆盖手段可以把变量值改变,导致程序运行出错。

 

 



https://blog.sciencenet.cn/blog-39626-368101.html

上一篇:肖传国真牛 最近发展了两个铁杆超级粉丝
下一篇:巧改putchar函数,实现单片机下多形式输出
收藏 IP: .*| 热度|

5 黄富强 吕喆 李志俊 邓景华 杨华磊

发表评论 评论 (4 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 09:56

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部