单片机C语言代码优化的个人经验及见解

简单点教程”讲了很多51单片机C语言的代码,今天也讲一讲51单片机C语言的优化,对写单片机代码有很大的好处,只是我从事工作以来的一些自己的经验,不是高深的理论,只是一些常用的优化。

我们先来看二段代码:

方便讲解,这段代码称作A代码。

#include

#include

#define uchar unsigned char

#define uint unsigned int

void delay(uint x)

{

uchar i,j,k;

for(i=x; i>0; i--)

for(k=5; k>0; k--)

for(j=240; j>0; j--)

{

;

}

}

void main()

{

P2=0X7f;

while(1)

{

P2=_crol_(P2,1);

delay(30);

}

}

这段代码称作B代码吧。

#include

#define uchar unsigned char

#define uint unsigned int

void delay(uint x)

{

uchar i,j,k;

for(i=x; i>0; i--)

for(k=5; k>0; k--)

for(j=240; j>0; j--)

{

;

}

}

void main()

{

while(1)

{

P2=0xfe;

delay(30);

P2=0xfd;

delay(30);

P2=0xfb;

delay(30);

P2=0xf7;

delay(30);

P2=0xef;

delay(30);

P2=0xdf;

delay(30);

P2=0xbf;

delay(30);

P2=0x7f;

delay(30);

}

}

看一下二个代码在proteus软件中仿真运行的结果:

流水灯仿真图

二段代码运行流水灯仿真,结果是一样的。

我们单从表面上看,代码A比代码B的字数要少,紧凑,代码B比较繁琐,字数要比较多。

再来看代码A的编译情况:

代码B的编译情况:

从这二张图,可以看出,代码A比代码B编译后的容量要少的多。一般的单片机的Flash 和Ram 的资源是以KB 来衡量的,可想而知,单片机的资源是少得可怜,在单片机资源有限的情况下,代码A是首选。

开始学的时候,大部分人会按代码B那样写,我也是。很显然,代码A比代码B要好的多,不同的人写同样功能的代码,一般很难会有相同的代码,人们思维方式的不同,写出来的代码也不同。同样能达到客户想要的目的,但是代码的稳定性,执行效率,占用容量是要考虑的。

“简单点教程”里面之前有视频教程讲过条件判断语句,P2=(a>b)?0xf0:0x0f; 也讲过要提倡这种写法,里面也举例了其它的写法。

我们开始是学,学会了就要优化,选择一种好的写法,所以学习单片机编程,是一个不断学习的过程。

再比如定义变量,如果能用char定义就不要用int来定义,浪费RAM,如果程序比较大,会导致RAM不够用。还有运算,a=b+c;尽量用自带的运算符,写成:a=b|c;

今天就暂时讲这些,以后的教程,我们再分批次的讲解,一点一点的积累,相信你也能成为单片机开发高手。

本文原创,严禁转载和抄袭。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191001A0AK5V00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动