简单点教程”讲了很多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;
今天就暂时讲这些,以后的教程,我们再分批次的讲解,一点一点的积累,相信你也能成为单片机开发高手。
本文原创,严禁转载和抄袭。
领取专属 10元无门槛券
私享最新 技术干货