如何提高单片机C语言代码效率_第1页
如何提高单片机C语言代码效率_第2页
如何提高单片机C语言代码效率_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本文格式为Word版,下载可任意编辑如何提高单片机C语言代码效率 代码效率包括两个方面内容:代码的大小和代码执行速度。假如代码精简和执行速度快,我们就说这个代码效率高。一般状况下,代码精简了速度也相应提上来了。单片机的ROM和RAM的空间都很有限,当您编程时遇到单片机的ROM和RAM的不够用的时候,或者您的程序要求较高的执行速度时,我们就得面对解决代码效率问题了。如何提高代码效率?现笔者以一个LED闪耀的程序为例与您探讨。 i ncludereg52.h/包含头文件 sbit led=P20;/定义位变量led,使其关联单片机管脚P2.0 void Delayms(unsigned int t

2、);/定义延时函数 int main(void)/主函数(C语言程序入口函数) while(1) led=0;/P2.0拉低,点亮LED Delayms(500);/调用延时函数,延时500毫秒 led=1;/P2.0拉高,熄灭LED Delayms(500);/调用延时函数,延时500毫秒 return 0; void Delayms(unsigned int t)/延时函数 unsigned int i,j; for(i=0;it;i+) for(j=0;j120;j+);/大约延时1毫秒 这是指示灯LED闪耀的C源码,这个源码在Keil uVision4 生成的程序代码是67个字节。下面

3、我们就采纳几个方法来提高这个程序的效率。 一尽量定义局部变量 单片机程序的全局变量一般是放在通用数据存储器(RAM)中,而局部变量一般是放在特别功能寄存器当中。处理寄存器数据的速度比处理RAM数据要快,假如在一个局部函数里调用一个全局变量将会多生成好几个代码出来。所以,少定义全局变量,多定义局部变量。如上例中,假如把延时函数里的i和j定义为全局变量,编译后程序代码会增加到79个字节,多了12个字节。 二省略函数定义 在一个单片机程序里我们习惯在main函数的前面先定义被调用函数,然后在mian函数的下面再实现被调用函数。这样的写法当然是一个好习惯,但每定义一个函数会增加几个代码,而且函数形参数

4、据类型越大、形参越多增加的代码就越多,明显这不是什么好事。假如不定义编译器又报错,怎么办?C编译器的编译挨次是从上往下编译,只要被调用的函数在主调函数调用之前实现就没有问题了。所以,笔者的习惯写法是不用定义函数,但要按先后挨次(被调用函数肯定要在主调函数之前写好)来写函数实现,到最终再写main函数。这样做编译器不但不会报错,而且代码得到精简了。如上例中,把延时函数的定义删除了,然后把延时函数的实现搬到main函数的上面,编译后程序代码削减到63个字节,削减了4个字节。 三省略函数形参 函数带形参,是为了在函数调用时传递实参,不但可以避开重复代码消失,还可以通过传递不同的实参值多次调用函数且实

5、现不同的函数功能,总体代码也会得到精简。在实际编程的时候,我们只要留意,还可以进一步精简代码。对于不是多次调用或者多次调用但实参值不变的函数我们可以省略函数形参。如上例中的延时函数,我们把它改成不带形参的函数: void Delayms()/延时函数 unsigned int i,j; for(i=0;i500;i+) for(j=0;j120;j+);/大约延时1毫秒 编译后,程序代码变成了56个字节,精简了11个字节。 四改换运算符 或许您可能没有留意到C运算符的运用也会影响程序代码的数量。如上例中,把延时函数里的自加运算符改成自减运算符后,如: void Delayms(unsigned

6、 int t)/延时函数 unsigned int i,j; for(i=t;i0;i-) for(j=120;j0;j-);/#p#分页标题#e#大约延时1毫秒 编译后,程序代码变成了65个字节,精简了2个字节。 通过改换运算符能达到精简代码的例子还有: 1.把求余运算表达式改为位与运算表达式。如:b=a%8 可以改为:b=a7。 2.把乘法运算表达式改为左移运算表达式。如:b=a*8 可以改为:b=a3。 3.把除法运算表达式改为右移运算表达式。如:b=a/8 可以改为:b=a3。 五选择合适的数据类型 C语言里选择变量的数据类型很讲究,变量的数据类型过小满意不了程序的要求,变量的数据类型

7、过大会占用太多的RAM资源。您可能还没有留意到数据类型定义也影响程序代码的大小,而且这个影响还不小。如上例中,延时函数里的局部变量j定义的数据类型明显偏大,假如把它由unsigned int改成unsigned char 。编译后,程序代码变成了59个字节,精简了8个字节。 六直接嵌入代码 在您的程序里假如某个函数只调用一次,而您又要求代码提高执行速度,建议您不要采纳调用函数的形式,而应当将该函数里的代码直接嵌入主调函数里,代码执行效率会大大提高。 七使用效率高的C语句 C语言里有一个三目运算符“?”,俗称“问号表达式”。许多程序员都很喜爱使用,由于它规律清楚表达简洁。 看这个问号表达式:c=(ab) ? a+1 : b+1;实际上等效于以下的ifelse结构: if (ab)c=a+1; elsec=b+1; 可以看到,使用问号表达式,语句相当简洁,但它的执行效率却很低,远没有ifelse语句效率高。所以,当您的程序要求提高执行速度的话,建议您不要使用问号表达式了。 另外,dowhile语句也比while语句的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论