0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

優(yōu)化嵌入式軟件的七個(gè)技巧,不同應(yīng)用程序的優(yōu)化需求各不相同

GReq_mcu168 ? 來源:未知 ? 作者:李倩 ? 2018-04-08 11:21 ? 次閱讀

技巧1—總是創(chuàng)建基準(zhǔn)用于比較

創(chuàng)建基準(zhǔn)用于比較優(yōu)化結(jié)果的必要性顯而易見,令人驚訝的是開發(fā)團(tuán)隊(duì)常常在沒有任何基準(zhǔn)的情況下匆忙開展優(yōu)化?;鶞?zhǔn)測(cè)量很重要,因?yàn)槊看蝺?yōu)化得到的改進(jìn)會(huì)越來越小。舉例來說,第一遍能耗優(yōu)化可能有20%的改進(jìn),第二次有10%,第三次5%,以此類推。開發(fā)人員應(yīng)了解這種趨勢(shì),并將他們?cè)谙到y(tǒng)中獲得的改進(jìn)量化為輸入次數(shù)的函數(shù)。

技巧2—設(shè)定優(yōu)化目標(biāo)

每一次優(yōu)化都比前一次需要更多的時(shí)間才能從系統(tǒng)中獲得極少量的改進(jìn)。開發(fā)團(tuán)隊(duì)需要仔細(xì)平衡他們的時(shí)間投入,并根據(jù)改進(jìn)結(jié)果判斷是否值得花這么多時(shí)間。一味悶頭做事很容易沉迷,可能花了數(shù)周時(shí)間才認(rèn)識(shí)到自己在優(yōu)化一個(gè)不再需要優(yōu)化的系統(tǒng)。因此在優(yōu)化開始之前,開發(fā)團(tuán)隊(duì)?wèi)?yīng)設(shè)定一個(gè)目標(biāo)值,達(dá)到這個(gè)目標(biāo),就表示優(yōu)化結(jié)果對(duì)當(dāng)前應(yīng)用來說足夠好,優(yōu)化過程已經(jīng)完成。

技巧3—使用正確的測(cè)量工具

如果沒有合適的測(cè)量工具,優(yōu)化一個(gè)系統(tǒng)是很困難的。舉例來說,如果不使用一種精確的方法來測(cè)量系統(tǒng)和微控制器的能耗,便很難完成能耗的優(yōu)化。開發(fā)人員經(jīng)常無法區(qū)分這兩種不同的能量測(cè)量,他們?cè)噲D減少實(shí)際上無法再減少的微控制器能耗。

對(duì)性能優(yōu)化感興趣的開發(fā)人員可以看一看我在“親自動(dòng)手:Segger系統(tǒng)查看工具”中介紹的Segger系統(tǒng)查看工具,這款工具對(duì)于了解哪些 函數(shù)正在獨(dú)占CPU非常有用。如果沒有能夠精確測(cè)量或可供開發(fā)人員查看系統(tǒng)行為的工具,那么在優(yōu)化系統(tǒng)時(shí)便抓不住重點(diǎn)。

技巧4—使用優(yōu)化工具

為了減小代碼大小或提高性能,嵌入式軟件的許多方面都可以優(yōu)化。一些情況下可以使用獨(dú)立的或附屬的工具鏈。Somnium DRT優(yōu)化器就是一種很好的優(yōu)化工具,可以與GCC一起用來優(yōu)化代碼大小、能量使用率和性能。

不過有時(shí)候外部工具可能不是必需的,只要選擇正確的工具鏈就足夠了。我最近寫了一篇題為《開源與商用編譯器》的文章,說明了這樣一個(gè)事實(shí):在Coremark測(cè)試中,對(duì)于相同的微控制器和相同的測(cè)試條件,商用編譯器的得分總是高于GCC等開源編譯器。

技巧5—使用編譯器屬性和#pragma指令

我一般很不喜歡用#pragma指令或編譯器屬性。屬性和#pragma指令通常是不可移植的,改變編譯器可能會(huì)造成軟件缺陷。然而,在調(diào)整嵌入式軟件時(shí),開發(fā)人員通常沒有選擇。使用屬性和#pragma指令可以提高速度,并能根據(jù)實(shí)際情況有選擇地優(yōu)化某個(gè)功能?;谶@些理由,想要優(yōu)化軟件的開發(fā)人員應(yīng)該熟悉屬性的使用,而且要閱讀《用C語言編寫可移植的優(yōu)化程序》,這樣他們才知道如何編寫出可移植的最優(yōu)程序,并且沒有負(fù)面影響。

技巧6—多做實(shí)驗(yàn)

在優(yōu)化系統(tǒng)方面沒有一成不變的方法,開發(fā)人員不應(yīng)該局限于任何一種特殊的技術(shù)。有時(shí)候?qū)W習(xí)和優(yōu)化系統(tǒng)的最好方法是嘗試各種實(shí)驗(yàn)并分析其結(jié)果。

當(dāng)我首次為了低功耗而優(yōu)化系統(tǒng)時(shí),做了很多實(shí)驗(yàn),也出現(xiàn)了一些錯(cuò)誤。通過實(shí)驗(yàn)過程和所記錄的結(jié)果,我就能夠理解什么有用,什么沒用,以及做哪些事是在浪費(fèi)資源和時(shí)間。如何最好地利用printf就是一個(gè)簡(jiǎn)單的例子: 通過嘗試不同的驅(qū)動(dòng)模型可以發(fā)現(xiàn),很多方法都可以顯著提高開發(fā)人員使用printf時(shí)獲得的實(shí)時(shí)性能,而人們?cè)O(shè)想的結(jié)果通常遠(yuǎn)好于真實(shí)結(jié)果。

技巧7—深入研究編譯器產(chǎn)生的指令

在資源特別有限的應(yīng)用中,開發(fā)人員有時(shí)只需挽起袖子深入理解編譯器產(chǎn)生的指令。在將要執(zhí)行的三四個(gè)廣義指令間選擇三元操作符而不是if/else是有區(qū)別的,這很可能會(huì)導(dǎo)致應(yīng)用程序崩潰。

雖然像C這樣的語言是標(biāo)準(zhǔn)的,但每種編譯器在優(yōu)化和產(chǎn)生機(jī)器指令時(shí)有少許差異。唯一現(xiàn)實(shí)的方法是檢查匯編語言,了解編譯器在做什么。

總結(jié)

不同應(yīng)用程序的優(yōu)化需求各不相同。小批量產(chǎn)生的應(yīng)用程序也許根本不需要優(yōu)化;而對(duì)于另外一些應(yīng)用程序,每個(gè)時(shí)鐘周期或每毫微安電流都很重要,則可能需要開發(fā)人員花大量時(shí)間從系統(tǒng)中榨出最后一點(diǎn)性能或能量。雖然每種系統(tǒng)都是不同的,但開發(fā)人員若熟記這些技巧,便為實(shí)現(xiàn)更高效的系統(tǒng)邁出了可喜的第一步。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7669

    瀏覽量

    152276
  • 嵌入式
    +關(guān)注

    關(guān)注

    5096

    文章

    19206

    瀏覽量

    308403

原文標(biāo)題:優(yōu)化嵌入式軟件的七個(gè)技巧

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    用信號(hào)發(fā)生器給8個(gè)channel直接灌正弦波,采樣值各不相同,這是正常的嗎?

    請(qǐng)教大家一個(gè)ADS1298的問題: 我用信號(hào)發(fā)生器給8個(gè)channel直接灌正弦波(100HZ,1Vpp,0 offset)。發(fā)現(xiàn)采樣值各不相同。 這是正常的嗎?還是我的ADS1298壞了? 謝謝。
    發(fā)表于 02-07 07:46

    優(yōu)化嵌入式軟件的7個(gè)技巧

    正在做什么的唯一真正方法是查看程序集。應(yīng)用程序優(yōu)化需求將大不相同。一些小批量生產(chǎn)的應(yīng)用可能根本不需要優(yōu)
    發(fā)表于 01-16 18:07

    ADS1298的8個(gè)channel采樣值都不相同

    請(qǐng)假大家一個(gè)ADS1298的問題:我用信號(hào)發(fā)生器給8個(gè)channel直接灌正弦波(100HZ,1Vpp,0 offset)。發(fā)現(xiàn)采樣值各不相同。這是正常的嗎?還是我的ADS1298壞了? 謝謝。
    發(fā)表于 05-23 09:42

    嵌入式機(jī)器視覺系統(tǒng)有什么特性?怎么優(yōu)化?

    介紹了基于ARM+DSP架構(gòu)的嵌入式機(jī)器視覺系統(tǒng)的特性,分析了制約嵌入式機(jī)器視覺系統(tǒng)性能的因素。從操作系統(tǒng)和應(yīng)用程序方面,討論了嵌入式機(jī)器視覺系統(tǒng)的
    發(fā)表于 03-11 06:47

    淺析嵌入式系統(tǒng)結(jié)構(gòu)

    必須的設(shè)備。外部設(shè)備將根據(jù)需要而各不相同,如通用通信接口USB,RS-232,RJ45等,輸入輸出設(shè)備,如
    發(fā)表于 10-27 06:10

    嵌入式系統(tǒng)內(nèi)存優(yōu)化使用

    響應(yīng)運(yùn)行。并且經(jīng)過實(shí)踐證明,嵌入式系統(tǒng)內(nèi)存優(yōu)化使用,能夠提升系統(tǒng)空間5%內(nèi)存,確保系統(tǒng)順利運(yùn)行。【關(guān)鍵詞】 嵌入式 Linux系統(tǒng) 內(nèi)存優(yōu)化 使用方法研究現(xiàn)如今,
    發(fā)表于 11-04 06:23

    對(duì)嵌入式應(yīng)用程序進(jìn)行性能優(yōu)化

    滿足嵌入式應(yīng)用的性能需求。1 嵌入式程序優(yōu)化的類型嵌入式應(yīng)用
    發(fā)表于 12-22 07:46

    嵌入式系統(tǒng)中的MODEM

    嵌入式系統(tǒng)中的MODEM 近日研究MODEM心得不少,寫出來,請(qǐng)大家提提意見。(一)協(xié)議按照調(diào)制解調(diào)協(xié)議的不同,數(shù)據(jù)傳輸速度亦各不相同。56K bit/秒有ITU V.90、Rockwell
    發(fā)表于 04-18 22:55 ?57次下載

    ARM嵌入式系統(tǒng)開發(fā)-軟件設(shè)計(jì)與優(yōu)化

    ARM嵌入式系統(tǒng)開發(fā)-軟件設(shè)計(jì)與優(yōu)化
    發(fā)表于 02-11 09:57 ?94次下載
    ARM<b class='flag-5'>嵌入式</b>系統(tǒng)開發(fā)-<b class='flag-5'>軟件</b>設(shè)計(jì)與<b class='flag-5'>優(yōu)化</b>

    嵌入式芯片的存儲(chǔ)器映射

    很多嵌入式芯片都集成了多種存儲(chǔ)器(RAM、ROM、Flash、),這些存儲(chǔ)器的介質(zhì)、工藝、容量、價(jià)格、讀寫速度和讀寫方式都各不相同,嵌入式系統(tǒng)設(shè)計(jì)需根據(jù)應(yīng)用需求巧妙地規(guī)劃和利用
    發(fā)表于 11-24 11:43 ?101次下載
    <b class='flag-5'>嵌入式</b>芯片的存儲(chǔ)器映射

    基于RTSJ的實(shí)時(shí)嵌入式系統(tǒng)API的優(yōu)化研究

    描述了一個(gè)基于RTSJ的應(yīng)用程序接口,該API的功能是提供高級(jí)的并發(fā)實(shí)時(shí)計(jì)算結(jié)構(gòu),優(yōu)化實(shí)時(shí)嵌入式系統(tǒng)開發(fā)。同時(shí),部署和優(yōu)化(在開銷足跡/時(shí)間
    發(fā)表于 11-30 12:20 ?434次閱讀

    構(gòu)建和優(yōu)化嵌入式和物聯(lián)網(wǎng)應(yīng)用程序

    構(gòu)建和優(yōu)化嵌入式,移動(dòng)和物聯(lián)網(wǎng)應(yīng)用程序
    的頭像 發(fā)表于 05-31 09:23 ?1756次閱讀

    優(yōu)化嵌入式軟件時(shí)可以遵循幾個(gè)通用技巧盤點(diǎn)

    早前的專欄中曾討論過在許多情況下需要優(yōu)化嵌入式系統(tǒng)的關(guān)鍵特征,包括系統(tǒng)時(shí)序、代碼大小、RAM使用率和能耗。雖然優(yōu)化每個(gè)特征通常要求不同的方法和技術(shù),但開發(fā)人員在優(yōu)化
    發(fā)表于 03-08 14:40 ?684次閱讀

    介紹一些關(guān)于優(yōu)化嵌入式軟件的小技巧

    優(yōu)化嵌入式軟件的特點(diǎn)包括系統(tǒng)定時(shí)、碼大小、RAM使用、功耗等。當(dāng)優(yōu)化每個(gè)特征通常需要其自己的方法和技術(shù)時(shí),當(dāng)優(yōu)化
    發(fā)表于 12-23 14:10 ?952次閱讀

    嵌入式Linux應(yīng)用程序開發(fā)-(1)第一個(gè)嵌入式QT應(yīng)用程序

    第一個(gè)嵌入式QT應(yīng)用程序在成功安裝 Qt Creator 開發(fā)環(huán)境后,我們通過一個(gè)簡(jiǎn)單的嵌入式Qt應(yīng)用程
    發(fā)表于 11-01 17:21 ?16次下載
    <b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>應(yīng)用程序</b>開發(fā)-(1)第一<b class='flag-5'>個(gè)</b><b class='flag-5'>嵌入式</b>QT<b class='flag-5'>應(yīng)用程序</b>

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品