找回密码
 立即注册
Qt开源社区 门户 查看内容

嵌入式C语言的14个小技巧,必知!!!

2019-8-12 19:52| 发布者: admin| 查看: 725| 评论: 0

摘要: 篇幅太长,不利于阅读完整版已经做成PDF版本有需要的可以在文末获取关键字下载1.概述嵌入式系统是指完成一种或几种特定功能的计算机系统,具有自动化程度高,响应速度快等优点,目前已广泛应用于消费电子,工业控制等领 ...




篇幅太长,不利于阅读

完整版已经做成PDF版本

有需要的可以在文末获取关键字下载

1.概述

嵌入式系统是指完成一种或几种特定功能的计算机系统,具有自动化程度高,响应速度快等优点,目前已广泛应用于消费电子,工业控制等领域.嵌入式系统受其使用的硬件以及运行环境的限制,非常注重代码的时间和空间效率,因此选择一种合适的开发语言十分重要.目前,在嵌入式系统开发中可使用的语言很多,其中C语言应用得最广泛.虽然用C语言编程具有许多优点,但基于嵌入式系统的C语言和标准C语言又有很大区别.接下来我结合嵌入式系统的特点和自己的一些积累,讨论在程序设计中代码优化的一些小技巧。

2.嵌入式C语言的特点

作为一种结构化程序设计语言,C语言兼顾多种高级语言的特点,具有很强的功能性和可移植性。但在嵌入式系统开发中,出于对低价产品的需求,系统的计算能力和存储容量都非常有限,因此如何利用好这些资源就显得十分重要。开发人员应注意嵌入式C语言和标准C语言的区别,减少生成代码长度,提高程序执行效率,在程序设计中对代码进行优化。

3.C代码在程序中的优化

现在的C编译器会自动对代码进行优化,但这些优化是对执行速度和代码长度的平衡.如果要获得更小且执行效率更高的代码,需要程序员手工对代码进行优化。

4.变量类型的定义

不同的数据类型所生成的机器代码长度相差很多,变量类型选取的范围越小运行速度越快,占用的内存越少.能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变量就不要用长整型(longint),能不使用浮点型(float)变量就不要使用浮点型变量.相同类型的数据类型,有无符号对机器代码长度也有影响.因此我们应按照实际需要合理的选用数据类型.当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值,C编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现.

5.算法优化

算法优化指对程序时空复杂度的优化:在PC机上进行程序设计时一般不必过多关注程序代码的长短,只需考虑功能的实现,但嵌入式系统就必须考虑系统的硬件资源,在程序设计时,应尽量采用生成代码短的算法,在不影响程序功能实现的情况下优化算法.

6.适当的使用宏

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

此外,我们还要避免不必要的函数调用,请看下面的代码:

void str_print(char*str) 



      int i; 

      for(i=0;i<strlen(str);i++) 

         { 

            printf(“%c”,str[i]); 

          } 



void str_print1(char*str) 



     int len; 

    len=strlen(str); 

     for(i=0;i<len;i++) 

         { 

             printf(“%c”,str[i]); 

        } 



请注意,这两个函数的功能相似.然而,第一个函数调用strlen函数多次,而第二个函数只调用函数strlen一次.因此第二个函数性能明显比第一个好.

公众号排版,部分代码版式不佳

完整版请下载PDF版本

资料领取方式

在公众号后台发送关键字

领取|嵌入式C语言的14个小技巧

建议直接复制上述蓝色文字到公众号后台发送

扫描下方二维码

备注加群可以进高速PCB设计交流群



关注我们,学习更多


更多历史文章请点击下方

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了