嵌入式C语言优化技巧


《《《《《正文》》》》》


 

《变量类型》

不同类型的数据生成的代码长度会不同,变量类型范围越小自然运行速度越快,占用的内存也会越小。所以能定义短类型的变量就不要定义长类型的变量,比如能用char定义就不要用int定义了;还有能不用float就不用float类型变量;当然这些前提是你的数据类型够用;再则变量的赋值不要超过变量的赋值,C编译器一般不报错,程序却能正常的运行,这个问题就很难查了。


《避免使用标准库》

虽然标准库能加快开发进度,但是因为标准库是考虑到用户所有可能情况所开发的代码,自然在内存以及运算上都会加重芯片的负担,我们要根据实际情况用少量的代码实现同样的功能。


 

《内嵌汇编》

代码对一些要求严格的代码处理可以使用内嵌汇编来代替,提高速度以及质量;但是,实际项目写汇编以及测试汇编是要花很长的时间,所以也需要慎用汇编的。


 

《提高循环语句的效率》

就是降低循环体的复杂性,比如在多重循环中,应该把最长的放在内层,最短的放在外层,这样可以减少CPU切换的循环次数;如下代码:

for (j = 0; j < 30; j++){      for (i = 0; i < 10; i++)      {……}} //大循环次数多for (i = 0; i < 10; i++){    for (j = 0; j < 30; j++)    {……}} // 程序不简洁但效率高

 

《采用数学公式》

相信大家小时候都做过这个题目:求1+2+3+。。。。+100的和?大家有老老实实的一步一步去加的吗?哈哈,后来就有一个公式sum=100*(100+1)/2;同样在代码中,利用这种公式,能明显提高代码运行效率;


 

《使用for(;;)》

while(1)和for(;;)虽然在效果上是一模一样的,但是效率还是有区别的。我们来看看各自编译出来的代码:

//编译前:while (1);//编译后:mov eax,1test eax,eaxje foo+23hjmp foo+18h//编译前:for (;;);//编译后:jmp foo+23h

显而易见,for (;;)指令少,不占用寄存器,而且没有判断,跳转,比while (1)好。


 

《适当用宏定义》

在C程序中使用宏代码可以提高程序的执行效率。宏代码本身不是函数,但使用起来像函数。函数调用要使用系统的栈来保存数据,同时 CPU 在函数调用时需要保存和恢复当前的现场,进行进栈和出栈操作,所以函数调用也需要 CPU时间。而宏定义就没有这个问题:宏定义仅仅作为预先写好的代码嵌入到当前程序中,不产生函数调用,所占用的仅仅是一些空间,省去了参数压栈,生成汇编语言的 call 调用,返回参数,执行 return等过程,从而提高了程序的执行速度。虽然宏破坏了程序的可读性,使排错更加麻烦,但对于嵌入式系统,为了达到要求的性能,嵌入代码常常是必须的做法。

 


《《《《《END》》》》》

你可能感兴趣的:(STM32开发,C语言,优化技巧,代码优化,嵌入式代码优化)