打印
[疑难问答]

代码优化

[复制链接]
997|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fengm|  楼主 | 2025-3-13 19:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
方便讲解,这段代码称作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;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

2920

帖子

2

粉丝