作为一种结构化的程序设计语言,C语言的特点就是可以使你尽量少地对硬件进行操作,具有很强的功能性、结构性和可移植性,常常被优选作为单片机系统的编程语言。但是基于单片机的C语言和标准C语言有很大区别,如何结合单片机的系统资源,用C语言开发符合实际工程需要的单片机系统,对用编程者来说具有十分重要的意义。本文引用地址:http://www.eepw.com.cn/article/171801.htm

1 单片机C语言主要特点

用C 编写程序比汇编更符合人们的思考习惯,开发者可以摆脱与硬件无必要的接触,更专心的考虑功能和算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。C语言具有良好的程序结构,适用于模块化程序设计,因此采用C语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,将功能模块化,由不同的模块完成不同的功能[1],这样可使整个应用系统程序结构清晰,易于调试和维护。不同的功能模块,分别指定相应的入口参数和出口参数,对于一些要重复调用的程序一般把其编成函数,这样可以减少程序代码的长度,又便于整个程序的管理,还可增强可读性和移植性。

在实际单片机程序设计中,程序结构一般均采用如下结构:

#includereg51.h> /*头文件说明部份*/

unsigned char x1,x2; /*全局变量声明部份*/

…Function1(… ){ /*功能函数定义部份*/

……     }

main() {

inti,j; /* 整型变量声明部份*/

Function1(…); /* 功能函数说明部份*/

……}

2 单片机C语言与标准C语言的区别

由于现在越来越多的产品都采用单片机开发,所完成的计算和控制工作也日趋复杂,但是单片机系统是一种资源十分有限的系统,这主要表现在程序存储器资源的不足,因此在程序设计时如何使用好这些有限的资源就显得十分重要。用C语言编程虽然具有许多的优点,但是生成的代码相对要长,要是编程技术不好,生成的代码甚至有可能比汇编语言生成的代码长几倍,因此对编程者来说,应该注意到单片机C语言和一般意义上的标准C语言的区别,对程序进行适当的优化。

2.1 数据类型的选用

单片机C语言编程不同于一般的C语言编程的显著的一个特点,就是要和程序存储器资源结合起来,虽然其提供的数据据类型十分丰富,但是只有bit和char 等数据类型是是机器语言直接支持的数据类型,用此类数据类型的语句所生成的代码较短;而其它的数据类型如整型、浮点型等数据要有一定的内部程序或内部函数的支持,相对来说用该类数据类型的语句生成的代码要长。有些C语言程序表面上看起来十分的简单,但在在实际编译时,生成的代码却相当长。因此我们要按照实际需要,合理地选用数据,可以大大的减少所生成的代码长度。例如在C51中每种数据类型变量所占用存储器字节数和经编译后生成的代码长度如表1所示:

表1 不同数据类型占用存储器字节数和代码长度对比

通过表1我们知道,不同的数据类型所生成的机器代码长度相差很多,相同类型的数据类型有无符号对机器代码长度也有影响。在程序编译时生成机器代码长的数据类型的优先级越高,不同的数据类型在进行程序运算时要转化为高优先级的的数据类型,相应的代码长度也会增长[2]。因此我们应尽可能地使用 bit,char等机器语言直接支持的数据类型,无符号数的变量应声明为无符号数,尽可能地减少程序中使用的数据类型的种类。

2.2 算法设计问题

单片机C语言和标准C语言存在着很大差别,在计算机上进行C语言程序设计时由于不必考虑程序代码的长短,只需考虑程序功能实现,但是在单片机上进行C语言程序设计就必须考虑系统的硬件资源。有时并不是程序的算法越简单、长度越短越好,因为有一些算法要调用一些内部的子程序和函数,生成的机器代码长度非常长。不同的算法对程序代码长度影响十分大,因此在进行程序设计时,就尽量采用程序生成代码短的算法,在不影响程序功能实现的情况下可以采用一些优化算法 [2]。

在单片机C语言编译成机器代码时,不同的运算生成的机器代码的长度相差很大,尽可能地减少程序中对某种数据类型的运算种类,越复杂的数据类型效果越明显。在进行数据计算时,在一定的精度范围内,可以用一些近似的计算来完成一些运算,既不损失精度又能减少大量的代码。比如:用逻辑AND/取模比MOD/%操作更有效。

在用热敏电阻测量温度时,可根据热敏电阻—温度特性公式来求值。数学表达式表示为:

RT=RT0expB(1/T-1/T0)

如果直接按照公式温度时程序结构简单,算法复杂度不高,但是程序将调用Math.h>文件中的对数函数,在编译成机器码时函数有1K多字节,对于一般只有几K字节的单片机系统来说,这是十分不合适的。考虑到系统资源问题可以用一种替代方法—查表法来实现算法。只要给出一定温度范围内不同温度值对应热敏电阻的电阻值,然后建立表格,只要按照系统求出的阻值,进行查表,插值,就可以求出相应的温度值。这种算法相比前面的的公式法的算法复杂高,C语言程序代码也长,但在编译成机器码时,代码长度却很短,只有一、二百字节。

3  数据存储器的分配

单片机内部数据存储器RAM只有几百字节,如果扩展外部存储器RAM来提高数据存储量话必将会增加了硬件成本,使系统更加的复杂,访问外部存储器比访问内部存储器所需的代码也要长得多。有效地使用片内存储器、提高存储器空间的利用率对开发者来说十分关键。

C语言写程序注意,单片机C语言编程应注意的若干问题相关推荐

  1. msp430单片机c语言应用程序,MSP430单片机C语言应用程序设计实例精讲

    本书首先介绍了C语言的基本知识,使读者能使用C语言进行程序设计:然后介绍了30个开发例子.全书主要通过实例的形式来介绍MSP430单片机在不同领域中的应用,从而使读者掌握MSP430单片机开发的流程. ...

  2. 单片机C语言PWM程序原理,单片机C语言程序设计:用 ADC0808 控制 PWM 输出

    /* 名称:用 ADC0808 控制 PWM 输出 说明:使用数模转换芯片 ADC0808,通过调节可变电阻 RV1 来调节脉冲宽度, 运行程序时,通过虚拟示波器观察占空比的变化. */ #inclu ...

  3. 51单片机c语言按键程序,51单片机C语言程序(四)键盘 数码管 跑表程序

    程序一 数码管前三位显示一个跑表, 从000到999之间以1%秒的速度运行, 当按下一个独立键盘时跑表停止, 松开手后跑表继续运行(用定时器设计表) #include#include #define ...

  4. pic单片机c语言延时程序,PIC单片机C语言精确控制时间

    很多朋友说C不能精确控制延时时间,不能像汇编那样直观.其实不然,对延时函数深入了解一下就能设计出一个理想的筐架出来.一般我们都用for(VX=100:--X){:}此句等同于X=100:while(- ...

  5. c语言笔试程序改错题,C语言笔试--程序改错题.doc

    C语言笔试--程序改错题 铜尖刮佛烁休凹汝宰或贷呵茎丑傅汞访沾犹扯视自女垂桶癌苞详阴疾澜赏斑萝厩蕴莽钢邹叶疹单樊捣前烬吊崖匝企送跃赫鳃投媳暴棺蹲后牡膊谗甲柜侍叠磐燥陷懦昧颈芝矢肪灌就冷沽梗挑评保崎士羡 ...

  6. c语言编程过程应注意什么意思,单片机C语言编程应注意的若干问题

    <单片机C语言编程应注意的若干问题>由会员分享,可在线阅读,更多相关<单片机C语言编程应注意的若干问题(4页珍藏版)>请在人人文库网上搜索. 1.单片机C语言编程应注意的若干问 ...

  7. rw1601可以用C语言写程序吗,用8051+1601LCD设计的整型计算器讲解.doc

    浙江海洋学院 设计题目 用8051+1601LCD设计的整型计算器 摘 要 当今时代,是一个新技术层出不穷的年代.单片机具有体积小.质量轻.价格便宜.为学习.应用和开发提供了便利条件.单片机由运算器. ...

  8. 用c语言写程序求序数的后缀,用C编写mex程序

    用C编写mex程序 大家都知道,matlab是一种解释型的编程环境,也就是说,跟以前的basic一样,是读 一句执行一句的.这样做可以很方便的实现编程过程中的交互,也免去了麻烦又耗时的 编译过程.但凡 ...

  9. 51单片机蜂鸣器演奏《小苹果》C语言程序,51单片机C语言蜂鸣器发声生日快乐播放程序...

    <51单片机C语言蜂鸣器发声生日快乐播放程序>由会员分享,可在线阅读,更多相关<51单片机C语言蜂鸣器发声生日快乐播放程序(4页珍藏版)>请在人人文库网上搜索. 1.按键发音/ ...

  10. 单片机c语言三种经典程序结构,单片机C语言程序的结构和设计精选.docx

    单片机C语言程序的结构和设计精选 实验五 单片机C语言程序的结构和设计一.实验目的1. 掌握单片机C语言的程序结构:2. 掌握单片机C语言程序的编写和调试方法:3. 掌握MSP430FG2553基本I ...

最新文章

  1. 统计计量 | 协方差和相关系数的暧昧关系:共性与个性
  2. MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应...
  3. 矩阵的对角化(Diagonalizing a Matrix )
  4. 为什么long类型的变量需要加L初始化
  5. 数据库-优化-数据库结构的优化-表范式化优化
  6. Liunx 安装mysql 5.6.16
  7. Python二级笔记(3)
  8. python硬件编程_Python学习日记_《Python硬件编程实战》笔记_Mr_Ouyang
  9. Websocket实现即时通讯
  10. 2022美赛M奖经验总结(3)选题思路篇
  11. win7自带桌面便签
  12. 查歌词php,php krc歌词解析
  13. 大数据导论答案_《数据科学与大数据通识导论》题库及答案
  14. powerdesign如何利用表导出sql
  15. springboot整合mybatis拦截器分页
  16. Halcon学习之缺陷检测-凸点检测
  17. 计算机特殊的标点符号教案,《标点符号的输入》教学设计
  18. electron-rebuild 编译遇到的奇葩问题
  19. .so文件移动游戏破解范例
  20. 移动APP集成支付宝--服务器端设计

热门文章

  1. win10安装steam有损计算机,Win10安装steam平台提示“steam fatal error”报错的解决方法...
  2. 遥感原理与应用总结——第三章:遥感传感器及成像原理
  3. IDEA 2020下载与安装
  4. 一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)
  5. 商业计划书文档+PPT公开下载
  6. 【Windows脚本】打印机脚本2-共享打印机
  7. spring configuration注解原理
  8. winfrom中出现 配置系统未能初始化
  9. 计算机考试报名照片可以是白底吗,软考报名照片必须白底的是吗?
  10. numpy库的下载与应用