- 相干保举
若何进步单片机C说话代码效力
代码效力包罗两个方面内容:代码的巨细和代码履行速率。下面是小编为大师带来的对若何进步单片机C说话代码效力的常识,接待浏览。
若何进步单片机C说话代码效力
代码效力包罗两个方面内容:代码的巨细和代码履行速率。若是代码精简和履行速率快,咱们就说这个代码效力高。普通环境下,代码精简了速率也响应提下去了。单片机的ROM和RAM的空间都很无限,当您编程时碰到单片机的ROM和RAM的不够用的时辰,或您的法式请求较高的履行速率时,咱们就得面临处置代码效力题目了。若何进步代码效力?现笔者以一个LED闪灼的法式为例与您切磋。
#i nclude//包罗头文件
sbit led=P2^0;//界说位变量led,使其联系关系单片机管脚P2.0
void Delayms(unsigned int t);//界说延时函数
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;i
for(j=0;j<120;j++);//约莫延时1毫秒
}
这是唆使灯LED闪灼的C源码,这个源码在Keil uVision4 天生的法式代码是67个字节。下面咱们就接纳几个体例来进步这个法式的效力。
一.尽能够界说部分变量
单片机法式的全局变量普通是放在通用数据存储器(RAM)中,而部分变量普通是放在特别功效寄放器傍边。处置寄放器数据的速率比处置RAM数据要快,若是在一个部分函数里挪用一个全局变量将会多天生好几个代码出来。以是,少界说全局变量,多界说部分变量。如上例中,若是把延时函数里的i和j界说为全局变量,编译后法式代码会增添到79个字节,多了12个字节。
二.省略函数界说
在一个单片机法式里咱们习气在main函数的后面先界说被挪用函数,而后在mian函数的下面再完成被挪用函数。如许的写法当然是一个好习气,但每界说一个函数会增添几个代码,并且函数形参数据范例越大、形参越多增添的代码就越多,较着这不是甚么功德。若是不界说编译器又报错,怎样办?C编译器的编译挨次是从上往下编译,只需被挪用的函数在主调函数挪用之前完成就不题目了。以是,笔者的习气写法是不必界说函数,但要按前后挨次(被挪用函数必然要在主调函数之前写好)来写函数完成,到最初再写main函数。如许做编译器岂但不会报错,并且代码获得精简了。如上例中,把延时函数的界说删除,而后把延时函数的完成搬到main函数的.下面,编译后法式代码削减到63个字节,削减了4个字节。
三.省略函数形参
函数带形参,是为了在函数挪用时通报实参,岂但能够防止反复代码呈现,还能够经由过程通报差别的实参值屡次挪用函数且完成差别的函数功效,整体代码也会获得精简。在现实编程的时辰,咱们只需注重,还能够进一步精简代码。对不是屡次挪用或屡次挪用但实参值稳定的函数咱们能够省略函数形参。如上例中的延时函数,咱们把它改成不带形参的函数:
void Delayms()//延时函数
{
unsigned int i,j;
for(i=0;i<500;i++)
for(j=0;j<120;j++);//约莫延时1毫秒
}
编译后,法式代码变成了56个字节,精简了11个字节。
四.更换运算符
或许您能够不注重到C运算符的应用也会影响法式代码的数目。如上例中,把延时函数里的自加运算符改成自减运算符后,如:
void Delayms(unsigned int t)//延时函数
{
unsigned int i,j;
for(i=t;i>0;i--)
for(j=120;j>0;j--);//约莫延时1毫秒
}
编译后,法式代码变成了65个字节,精简了2个字节。
经由过程更换运算符能到达精简代码的例子另有:
1.把求余运算抒发式改成位与运算抒发式。如:b=a%8 能够改成:b=a&7。
2.把乘法运算抒发式改成左移运算抒发式。如:b=a*8 能够改成:b=a<<3。
3.把除法运算抒发式改成右移运算抒发式。如:b=a/8 能够改成:b=a>>3。
五.挑选适合的数据范例
C说话里挑选变量的数据范例很讲求,变量的数据范例太小知足不了法式的请求,变量的数据范例过大会占用太多的RAM资本。您能够还不注重到数据范例界说也影响法式代码的巨细,并且这个影响还不小。如上例中,延时函数里的部分变量j界说的数据范例较着偏大,若是把它由unsigned int改成unsigned char 。编译后,法式代码变成了59个字节,精简了8个字节。
六.间接嵌入代码
在您的法式里若是某个函数只挪用一次,而您又请求代码进步履行速率,倡议您不要接纳挪用函数的情势,而应当将该函数里的代码间接嵌入主调函数里,代码履行效力会大大进步。
七.利用效力高的C语句
C说话里有一个三目运算符“?”,俗称“问号抒发式”。良多法式员都很喜好利用,由于它逻辑清楚抒发简练。
看这个问号抒发式:c=(a>b) ? a+1 : b+1;现实上等效于以下的if…else布局:
if (a>b) c=a+1;
else c=b+1;
能够看到,利用问号抒发式,语句相称简练,但它的履行效力却很低,远不if…else语句效力高。以是,当您的法式请求进步履行速率的话,倡议您不要利用问号抒发式了。
别的,do…while语句也比while语句的效力高。
代码的效力题目,不是咱们编程中的首要题目,除法式请求较高的履行速率或单片机的ROM和RAM不够用的时辰才会斟酌。普通环境下,咱们不必在意。若是您一味寻求高效力的代码,能够会影响代码的可读性和可保护性。
【若何进步单片机C说话代码效力】相干文章:
C说话若何进步法式效力04-10
若何优化C说话(单片机)03-19
若何互换两个文本内容的C说话代码04-01
C说话疾速排序实例代码06-04
单片机C说话的益处12-03
若何进步雇用效力11-18
10个典范的C说话口试根本算法及代码12-05
C说话拔出排序算法及实例代码12-05
C说话挑选排序算法及实例代码11-25