原创 使用单片机C语言的好处

2008-9-12 15:09 2380 5 6 分类: MCU/ 嵌入式


 



将C向MCU(俗称单片机)8051上的移植始于80年代的中后期。客观上讲,C向8051 MCU移植的难点不少。如:


  ·8051的非冯·诺依慢结构(程序与数据存储器空间分立),再加上片上又多了位寻址存储空间;


  ·片上的数据和程序存储器空间过小和同时存在着向片外扩展它们的可能;


  ·片上集成外围设备的被寄存器化(即SFR),而并不采用惯用的I/O地址空间;


  ·8051芯片的派生门类特别多(达到了上百种之多),而C语言对于它们的每一个硬件资源又无一例外地要能进行操作。


  这些都是过去以MPU为基础的C语言所没有的。经过Keil/Franklin、Archmeades、IAR、BSO/Tasking等公司艰若不懈的努力,终于于90年代开始而趋成熟,成为专业化的MCU高级语言了。过去长期困扰人们的所谓“高级语言产生代码太长,运行速度太慢,因此不适合单片机使用”的致使缺点已被大幅度地克服。目前,8051上的C语言的代码长度,已经做到了汇编水平的1.2~1.5倍。4K字节以上的程度,C语言的优势更能得到发挥。至于执行速度的问题,只要有好的仿真器的帮助,找出关键代码,进一步用人工优化,就可很简单地达到十分美满的程度。如果谈到开发速度、软件质量、结构严谨、程序坚固等方面的话,则C语言的完美绝非汇编语言编程所可比拟的。今天,确实已经到MCU开发人员拿起C语言利器的时候了。


  下面结合8051介绍单片机C语言的优越性:


  ·不懂得单片机的指令集,也能够编写完美的单片机程序;


  ·无须懂得单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序;


  ·不同函数的数据实行覆盖,有效利用片上有限的RAM空间;


  ·程序具有坚固性:数据被破坏是导致程序运行异常的重要因素。C语言对数据进行了许多专业性的处理,避免了运行中间非异步的破坏;


  ·C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性;


  ·提供auto、static、const等存储类型和专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理地分配地址;


  ·提供small、compact、large等编译模式,以适应片上存储器的大小;


  ·中断服务程序的现场保护和恢复,中断向量表的填写,是直接与单片机相关的,都由C编译器代办;


  ·提供常用的标准函数库,以供用户直接使用;


  ·头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发;


  ·有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排掉;


  ·可方便地接受多种实用程序的服务:如片上资源的初始化有专门的实用程序自动生成;再如,有实时多任务操作系统可调度多道任务,简化用户编程,提高运行的安全性等等。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1360748 2009-2-1 13:38

相关推荐阅读
用户1379474 2009-05-23 18:57
对本次大赛的一些补充!参赛者一定要看
对本次大赛的一些补充!参赛者一定要看本次比赛评分在实现基本功能的基础上侧重扩展功能,设计者应考虑实用性和开发成本,本次比赛的优秀作品可以由深圳硕飞科技有限公司(伟纳电子)向无线电或者电子制作杂志推荐发...
用户1379474 2009-05-23 18:57
2009年“伟纳电子杯”电子设计竞赛章程
2009年“伟纳电子杯”电子设计竞赛章程大学生电子设计联盟“伟纳电子杯”电子设计竞赛章程本次竞赛所有相关的材料和比赛进程均在大学生电子设计联盟论坛(http://www.nuedc.net.cn)“伟...
用户1379474 2008-09-14 10:18
C/C++程序员必需的修养
我总结了在用C/C++语言(主要是C语言)进行程序写作上的三十二个“修养”,通过这些,你可以写出质量高的程序,同时也会让看你程序的人渍渍称道,那些看过你程序的人一定会说:“这个人的编程修养不错”。 0...
用户1379474 2008-09-12 15:11
C51语言应用编程的若干问题
 摘 要 简要介绍了Franklin C51交叉编译器的特点,较详细地讨论了C51语言程序设计的基本技巧及其与汇编语言程序的混合编程、中断处理过程等实际问题,并给出了相应的处理程序。关键词 Frank...
用户1379474 2008-09-12 15:10
用C51实现单片机的中文输入法
 说明:拼音输入法杳询函数: unsigned char code * py_ime(unsigned char input_py_val[]);input_py_val为已输入的拼音码字符串头指针,...
EE直播间
更多
我要评论
1
5
关闭 站长推荐上一条 /3 下一条