RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

讓單片機代碼性能起飛的七大技巧

無際單片機編程 ? 來源:無際單片機編程 ? 2024-11-16 10:21 ? 次閱讀

單片機的程序比軟開少一些,真正想編寫出高效的代碼,還是要積累很多年的。

在做研發(fā)工程師的10年里,我經(jīng)歷過幾個公司,看過很多工程師寫的代碼,但真正能讓我跪著看完的,極少。哪怕是大廠工程師,也會有讓人笑掉大牙的代碼。

高效的背后,有很多學問,需要有一定的數(shù)學功底,對編譯器有較深的了解,懂匯編。

具備這些能力,寫出來的代碼,才能讓cpu執(zhí)行這段代碼所花費的時間,以及占用的ROMRAM資源更少。

然而,如果把項目每個細節(jié),都優(yōu)化到高效的程度,花費的時間,是平時的兩倍。

所以,我們在做項目時,一般只優(yōu)化核心功能,才能趕上項目的進度,除非經(jīng)驗相當豐富。

下面分享幾點高效代碼的技巧:1.使用位操作代替算術操作,因為位操作更快。

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

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

2.避免不必要的操作去除代碼中不必要的操作,如多余的變量賦值、函數(shù)調用等。

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

3.控制數(shù)據(jù)類型大小特別是盡量別用float,浮點運算通常需要更多的CPU周期和內存空間,因為浮點數(shù)的表示和運算比整數(shù)復雜,除非單片機內置了硬件浮點單元(FPU)。 能用unsigned就不用signed,無符號整數(shù)的運算可能比有符號整數(shù)更快,因為不需要處理符號位。 能用char就不用int,較小的數(shù)據(jù)類型在處理和傳輸時更快,因為它們占用的內存和帶寬更少。特別對于存儲大量數(shù)據(jù)的數(shù)組或緩沖區(qū),使用 char 類型可以顯著減少內存占用。

4.利用硬件資源比如說STM32單片機,可以利用DMA傳輸數(shù)據(jù),減少CPU負載。 5.代碼重用 一些重復的代碼,通過函數(shù)或宏來重用代碼。

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

6.自加、自減指令用i--、i-=1、i++、i+=1、去替代i = i-1,i=i+1的操作,有些編譯器對前者進行了優(yōu)化,效率更高。 7.優(yōu)化算法以計算1到100的和為例。 我們可能會首先想到使用循環(huán),來寫程序:

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

這種方法雖然直觀,但在效率上可能不是最優(yōu)的。那怎么去優(yōu)化?這時候就要考驗工程師的數(shù)學功底了。 可以根據(jù)等差數(shù)列求和公式,1到100的和可以表示為:

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

n是序列的最后一項,即100。將這個公式應用到代碼中:

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

對以上兩種實現(xiàn)代碼的總結:盡管程序都能得到相同的結果,但是第二種方法在運行效率上明顯優(yōu)于第一種。因為它避免了循環(huán)的開銷,直接通過數(shù)學公式計算出結果。 在編寫單片機代碼時,盡量通過數(shù)學方法,或其他算法技巧,提高程序的執(zhí)行效率。 這不僅可以減少了CPU的計算時間,還能減少程序占用的內存空間,從而提高整體性能。

插個題外話,之前很多老鐵問我,數(shù)學不好,可以學單片機嗎?

我覺得這就是一個很好的例子,數(shù)學不是門檻,而是天花板。

第一種實現(xiàn)方式,是小學算數(shù)低,但效率低。

第二種,則需要一定的數(shù)學能力,但效率高。

那同樣都能實現(xiàn)功能,效率低點就低點唄,有什么所謂?

其實這個會間接影響到硬件成本。

比如數(shù)學功底好的,可以用低端單片機去實現(xiàn)功能,而數(shù)學功底不好的,寫出來代碼效率低,則需要性能更強的單片機支撐。

不過,很多產品,對效率的要求并沒這么苛刻,哪怕用第一種方式,照樣沒問題。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6035

    文章

    44554

    瀏覽量

    634614
  • 程序
    +關注

    關注

    117

    文章

    3785

    瀏覽量

    81001
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68521

原文標題:讓單片機代碼性能起飛的七大技巧,從位操作到算法優(yōu)化

文章出處:【微信號:nanshuqg,微信公眾號:無際單片機編程】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    全球七大主流單片機詳解

    單片機是Atmel公司推出的較為新穎的單片機,其顯著的特點為高性能、高速度、低功耗。它取消機器周期,以時鐘周期為指令周期,實行流水作業(yè)。
    發(fā)表于 11-27 17:22 ?7.7w次閱讀

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

    偶然間在其他網(wǎng)站上看到的《提高測量精度的七大技巧》資源包,覺得還不錯,挺有用的,大家可以去看看!資源包將討論提高測量精度的七大技巧,涉及傳感器技術,隔離屏蔽技術,硬件指標考量,后端信號處理等
    發(fā)表于 08-05 18:00

    轉: 七大主流單片機最細剖析

    。這七大主流單片機到底哪家強?相信現(xiàn)在的你應該知道了吧~~也有朋友會說瑞薩單片機是銷量最大的,且在車載電子行業(yè)應用較多,穩(wěn)定性好,但是我個人不怎么喜歡小日本的產品,所以也沒用過瑞薩的東西。這個因人而異
    發(fā)表于 06-12 11:10

    七大主流單片機最細剖析

    單片機現(xiàn)在可謂是鋪天蓋地,種類繁多,讓開發(fā)者們應接不暇,發(fā)展也是相當?shù)难杆伲瑥纳鲜兰o80年代,由當時的4位8位發(fā)展到現(xiàn)在的各種高速單片機…… 各個廠商們也在速度、內存、功能上此起彼伏,參差不齊
    發(fā)表于 07-05 13:05

    業(yè)界七大主流單片機最細剖析

    渴望超低功耗,MSP430肯定不會你失望;如果你想支持國產,STC會你興奮…  這七大主流單片機到底哪家強?相信現(xiàn)在的你應該知道了吧~~  也有朋友會說瑞薩
    發(fā)表于 05-26 19:34

    VS-RK3399超強七大性能優(yōu)勢

    RK3399芯片資料簡介,RK3399硬件開發(fā)資料VS-RK3399超強七大性能優(yōu)勢
    發(fā)表于 02-05 07:55

    51單片機應用實例及源代碼

    51單片機應用實例及源代碼
    發(fā)表于 12-16 12:15 ?107次下載
    51<b class='flag-5'>單片機</b>應用實例及源<b class='flag-5'>代碼</b>

    單片機教程:單片機的特殊功能寄存器

    單片機教程:單片機的特殊功能寄存器 通過前面的學習,我們已知單片機的內部有ROM、有RAM、有并行I/O口,那么,除了這些東西之外,單片機
    發(fā)表于 05-15 23:01 ?2277次閱讀
    <b class='flag-5'>單片機</b>教程<b class='flag-5'>七</b>:<b class='flag-5'>單片機</b>的特殊功能寄存器

    單片機入門教程第14課-單片機指令(

    單片機入門教程第14課-單片機指令()  條件轉移指令  條件轉移指令是指在滿足一定條件時進行相對轉移?! ?、判A內容是否為
    發(fā)表于 01-07 16:14 ?1495次閱讀
    <b class='flag-5'>單片機</b>入門教程第14課-<b class='flag-5'>單片機</b>指令(<b class='flag-5'>七</b>)

    51單片機與串口通信代碼

    51單片機與串口通信的代碼設計
    發(fā)表于 11-09 17:47 ?180次下載

    七大主流單片機優(yōu)缺點比較

    就是一般常用的單片機的比較,有優(yōu)點和缺點。
    發(fā)表于 06-17 15:42 ?2次下載

    章AVR單片機的應用

    章AVR單片機的應用
    發(fā)表于 09-21 11:41 ?4次下載
    第<b class='flag-5'>七</b>章AVR<b class='flag-5'>單片機</b>的應用

    單片機系統(tǒng)開發(fā)設計的七大規(guī)則

    單片機的能力的關鍵就在軟件設計者編寫的軟件上。只有充分地了解到單片機的能力,才不會做出“冗余”的系統(tǒng)設計。而采用許多的外圍芯片來實現(xiàn)單片機能實現(xiàn)的功能。這樣做,即增加了系統(tǒng)成本,也可能會降低了系統(tǒng)的可靠性。
    發(fā)表于 11-19 15:35 ?3767次閱讀

    使用51單片機驅動段LED數(shù)碼管的代碼免費下載

    本文檔的主要內容詳細介紹的是使用51單片機驅動段LED數(shù)碼管的代碼免費下載。
    發(fā)表于 07-02 17:42 ?9次下載
    使用51<b class='flag-5'>單片機</b>驅動<b class='flag-5'>七</b>段LED數(shù)碼管的<b class='flag-5'>代碼</b>免費下載

    新唐單片機代碼評審總結

    昨晚上,我們一個同事組織了一個小會議,大家一起討論了一個項目的單片機代碼,這個單片機用的是新唐單片機,期間大家也討論了一些問題,總結一下,希望對寫
    發(fā)表于 12-01 16:06 ?15次下載
    新唐<b class='flag-5'>單片機</b><b class='flag-5'>代碼</b>評審總結
    RM新时代网站-首页