0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

让单片机代码性能起飞的七大技巧

无际单片机编程 来源:无际单片机编程 2024-11-16 10:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单片机的程序比软开少一些,真正想编写出高效的代码,还是要积累很多年的。

在做研发工程师的10年里,我经历过几个公司,看过很多工程师写的代码,但真正能让我跪着看完的,极少。哪怕是大厂工程师,也会有让人笑掉大牙的代码。

高效的背后,有很多学问,需要有一定的数学功底,对编译器有较深的了解,懂汇编

具备这些能力,写出来的代码,才能让cpu执行这段代码所花费的时间,以及占用的ROMRAM资源更少。

然而,如果把项目每个细节,都优化到高效的程度,花费的时间,是平时的两倍。

所以,我们在做项目时,一般只优化核心功能,才能赶上项目的进度,除非经验相当丰富。

下面分享几点高效代码的技巧:1.使用位操作代替算术操作,因为位操作更快。

40e8cb68-9080-11ef-a511-92fbcf53809c.png

还有就是用左移、右移替代乘除法。 比如a=b*256,可以改成a = b<<8 比如a=b/256,可以改成a = b>>8

2.避免不必要的操作去除代码中不必要的操作,如多余的变量赋值、函数调用等。

40fe4272-9080-11ef-a511-92fbcf53809c.png

3.控制数据类型大小特别是尽量别用float,浮点运算通常需要更多的CPU周期和内存空间,因为浮点数的表示和运算比整数复杂,除非单片机内置了硬件浮点单元(FPU)。 能用unsigned就不用signed,无符号整数的运算可能比有符号整数更快,因为不需要处理符号位。 能用char就不用int,较小的数据类型在处理和传输时更快,因为它们占用的内存和带宽更少。特别对于存储大量数据的数组或缓冲区,使用 char 类型可以显著减少内存占用。

4.利用硬件资源比如说STM32单片机,可以利用DMA传输数据,减少CPU负载。 5.代码重用 一些重复的代码,通过函数或宏来重用代码。

4107bfdc-9080-11ef-a511-92fbcf53809c.png

6.自加、自减指令用i--、i-=1、i++、i+=1、去替代i = i-1,i=i+1的操作,有些编译器对前者进行了优化,效率更高。 7.优化算法以计算1到100的和为例。 我们可能会首先想到使用循环,来写程序:

4116e386-9080-11ef-a511-92fbcf53809c.png

这种方法虽然直观,但在效率上可能不是最优的。那怎么去优化?这时候就要考验工程师的数学功底了。 可以根据等差数列求和公式,1到100的和可以表示为:

4125aeac-9080-11ef-a511-92fbcf53809c.png

n是序列的最后一项,即100。将这个公式应用到代码中:

413879d8-9080-11ef-a511-92fbcf53809c.png

对以上两种实现代码的总结:尽管程序都能得到相同的结果,但是第二种方法在运行效率上明显优于第一种。因为它避免了循环的开销,直接通过数学公式计算出结果。 在编写单片机代码时,尽量通过数学方法,或其他算法技巧,提高程序的执行效率。 这不仅可以减少了CPU的计算时间,还能减少程序占用的内存空间,从而提高整体性能。

插个题外话,之前很多老铁问我,数学不好,可以学单片机吗?

我觉得这就是一个很好的例子,数学不是门槛,而是天花板。

第一种实现方式,是小学算数低,但效率低。

第二种,则需要一定的数学能力,但效率高。

那同样都能实现功能,效率低点就低点呗,有什么所谓?

其实这个会间接影响到硬件成本。

比如数学功底好的,可以用低端单片机去实现功能,而数学功底不好的,写出来代码效率低,则需要性能更强的单片机支撑。

不过,很多产品,对效率的要求并没这么苛刻,哪怕用第一种方式,照样没问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45344

    浏览量

    663811
  • 程序
    +关注

    关注

    117

    文章

    3836

    浏览量

    84767
  • 代码
    +关注

    关注

    30

    文章

    4942

    浏览量

    73160

原文标题:让单片机代码性能起飞的七大技巧,从位操作到算法优化

文章出处:【微信号:nanshuqg,微信公众号:无际单片机编程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    全球七大主流单片机详解

    单片机是Atmel公司推出的较为新颖的单片机,其显著的特点为高性能、高速度、低功耗。它取消机器周期,以时钟周期为指令周期,实行流水作业。
    发表于 11-27 17:22 7.8w次阅读

    《提高测量精度的七大技巧》

    偶然间在其他网站上看到的《提高测量精度的七大技巧》资源包,觉得还不错,挺有用的,大家可以去看看!资源包将讨论提高测量精度的七大技巧,涉及传感器技术,隔离屏蔽技术,硬件指标考量,后端信号处理等
    发表于 08-05 18:00

    转: 七大主流单片机最细剖析

    。这七大主流单片机到底哪家强?相信现在的你应该知道了吧~~也有朋友会说瑞萨单片机是销量最大的,且在车载电子行业应用较多,稳定性好,但是我个人不怎么喜欢小日本的产品,所以也没用过瑞萨的东西。这个因人而异
    发表于 06-12 11:10

    七大主流单片机最细剖析

    单片机现在可谓是铺天盖地,种类繁多,让开发者们应接不暇,发展也是相当的迅速,从上世纪80年代,由当时的4位8位发展到现在的各种高速单片机…… 各个厂商们也在速度、内存、功能上此起彼伏,参差不齐
    发表于 07-05 13:05

    业界七大主流单片机最细剖析

    渴望超低功耗,MSP430肯定不会你失望;如果你想支持国产,STC会你兴奋…  这七大主流单片机到底哪家强?相信现在的你应该知道了吧~~  也有朋友会说瑞萨
    发表于 05-26 19:34

    VS-RK3399超强七大性能优势

    RK3399芯片资料简介,RK3399硬件开发资料VS-RK3399超强七大性能优势
    发表于 02-05 07:55

    51单片机应用实例及源代码

    51单片机应用实例及源代码
    发表于 12-16 12:15 108次下载
    51<b class='flag-5'>单片机</b>应用实例及源<b class='flag-5'>代码</b>

    单片机教程:单片机的特殊功能寄存器

    单片机教程:单片机的特殊功能寄存器 通过前面的学习,我们已知单片机的内部有ROM、有RAM、有并行I/O口,那么,除了这些东西之外,单片机
    发表于 05-15 23:01 2701次阅读
    <b class='flag-5'>单片机</b>教程<b class='flag-5'>七</b>:<b class='flag-5'>单片机</b>的特殊功能寄存器

    单片机入门教程第14课-单片机指令(

    单片机入门教程第14课-单片机指令()  条件转移指令  条件转移指令是指在满足一定条件时进行相对转移。  1、判A内容是否为
    发表于 01-07 16:14 1713次阅读
    <b class='flag-5'>单片机</b>入门教程第14课-<b class='flag-5'>单片机</b>指令(<b class='flag-5'>七</b>)

    51单片机与串口通信代码

    51单片机与串口通信的代码设计
    发表于 11-09 17:47 181次下载

    七大主流单片机优缺点比较

    就是一般常用的单片机的比较,有优点和缺点。
    发表于 06-17 15:42 2次下载

    章AVR单片机的应用

    章AVR单片机的应用
    发表于 09-21 11:41 4次下载
    第<b class='flag-5'>七</b>章AVR<b class='flag-5'>单片机</b>的应用

    单片机系统开发设计的七大规则

    单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。
    发表于 11-19 15:35 4078次阅读

    使用51单片机驱动段LED数码管的代码免费下载

    本文档的主要内容详细介绍的是使用51单片机驱动段LED数码管的代码免费下载。
    发表于 07-02 17:42 9次下载
    使用51<b class='flag-5'>单片机</b>驱动<b class='flag-5'>七</b>段LED数码管的<b class='flag-5'>代码</b>免费下载

    新唐单片机代码评审总结

    昨晚上,我们一个同事组织了一个小会议,大家一起讨论了一个项目的单片机代码,这个单片机用的是新唐单片机,期间大家也讨论了一些问题,总结一下,希望对写
    发表于 12-01 16:06 15次下载
    新唐<b class='flag-5'>单片机</b><b class='flag-5'>代码</b>评审总结