色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

關于如何提高單片機執行效率的一些建議

j4AI_wujianying ? 來源:未知 ? 作者:胡薇 ? 2018-07-27 16:24 ? 次閱讀

首先,什么是執行效率?我們平常所說的執行效率就是使用相同的算法在相同輸入條件下完成相同計算所產生的系統開銷,目前來說一般會更多關注執行時間方面的開銷。所有語言編寫的代碼最終要運行,都要轉化成機器碼。在更短的時間內完成相同的事那么效率就高。

關于如何提高C語言程序的執行效率,有如下建議:

1.盡量避免調用延時函數

沒有帶操作系統的程序只能在while(1)里面循環執行,如果在這里面調用大量的延時這樣會很消耗CPU的資源,延時等于是讓他在這歇著不干事了,只有中斷里面的才會執行。如果僅僅是做一個LED一秒閃爍一次的程序,那么很簡單,可以直接調用延時函數,但是實際的項目中往往在大循環里有很多事要做,對于實時性要求較高的場合就不行了。為了避免使用延時,可以使用定時器中斷產生一個標志位,到了時間標志位置1,在主程序里面只需要檢測標志位,置1了才執行一次,然后清標志。其他時間就去做別的事了,而不會在這等待了。最好的例子就是數碼管的顯示,使用中斷調顯示,在我們的例程里面有。然后是那個按鍵檢測的,一般的程序都是做的while(!key)等待按鍵釋放,如果按鍵一直按著,那后面的程序就永遠得不到運行死在這了,其實可以做一個按鍵標志檢測下降沿和上升沿就可以避免這個問題了。

2.寫出來的代碼要盡量簡潔,避免重復

在10天學會單片機那本書上看到他寫的數碼管顯示那部分代碼,選中一個位,然后送數據,再選中一個位,再送數據,依次做完。代碼重復率太高了,不僅占用過多的類存,而且執行效率差可讀性差,僅僅是實現了功能而已,實際的編程可以做一個循環,for循環或者while循環。這樣的代碼看起來更有水平。

3.合理使用宏定義

在程序中如果某個變量或寄存器經常用到,可以使用宏定義定義一個新的名代替他,這樣的好處是方便修改,比如液晶的數據端總線接的P1,現在想改到P0,那么只需要修改宏定義這里就可以了,編譯器編譯的時候,他會自動的把定義的名替換成實際的名稱。

4.使用盡量小的數據類型

比如某個變量的值范圍是0-255,那么就定義成unsigned char,當然也可以定義成unsigned int,但是這樣造成了內存的浪費,而且運算時效率要低一點。如果數據沒有負數的話,盡量定義成無符號的類型。應盡量避免定義成浮點型數據類型或雙精度(占8個字節)類型,這兩種類型運算時很消耗CPU資源。比如采集電壓范圍是0-5v,精確到小數點后三位,可以把采集到的數據擴大1000倍,即使最大也才到5000,然后多采集幾次做個濾波算法,最后電壓算出來后只需要在第一位后面加個小數點就可以了,變量定義成unsigned int 型變量就沒問題了。

5.避免使用乘除法

乘除法很消耗CPU資源,查看匯編代碼會發現,一個乘除法運算會編譯出10幾甚至幾10行代碼。如果是乘以或除以2的n次方,可以用>來實現,這種移位運算在編譯時就已經算好了,所以代碼很簡潔,運算效率就高。但是需要特別注意運算符的優先級問題。

6.盡量使用復合賦值運算符

a=a+b與a+=b 這兩個表達式有什么區別呢?前者是先計算a+b的值,然后保存到ACC寄存器,然后再把ACC寄存器的值賦給a,而后者是直接將a+b的值賦給a,節省一個步驟,雖然只節省了一條指令,但是當這個運算循環幾千次幾萬次呢,那么效果很明顯了。像其他的-=、*=、/=、%=等都是一樣的。

7.盡量不要定義成全局變量

先來看一下局部變量,全局變量,靜態局部變量,靜態全局變量的異同:

(1)局部變量:在一個函數中或復合語句中定義的變量,在動態存儲區分配存儲單元,在調用時動態分配,在函數或復合語句結束時自動釋放;

(2)靜態局部變量:在一個函數中定義局部變量時,若加上static聲明,則此變量為靜態局部變量,在靜態存儲區分配存儲單元,在程序運行期間都不釋放;靜態局部變量只能在該函數中使用;靜態局部變量在編譯時賦值(若在定義時未進行賦值處理,則默認賦值為0(對數值型變量)或空字符(對字符型變量));靜態局部變量在函數調用結束后不自動釋放,保留函數調用結束后的值;

(3)全局變量:在函數外定義的變量稱為全局變量;全局變量在靜態存儲區分配存儲單元,在程序運行期間都不釋放,在文件中的函數均可調用該全局變量,其他文件內的函數調用全局變量,需加extern聲明;

(4)靜態全局變量:在函數外定義變量時,若加上static聲明,則此變量為靜態全局變量;靜態全局變量在靜態存儲區分配存儲單元,在程序運行期間都不釋放,靜態全局變量在編譯時賦值(若在定義時未進行賦值處理,則默認賦值為0(對數值型變量)或空字符(對字符型變量));只能在當前文件中使用。

一般情況下就定義成局部變量,這樣不僅運行更高效,而且很方便移植。局部變量大多定位于MCU內部的寄存器中,在絕大多數MCU中,使用寄存器操作速度比數據存儲器快,指令也更多更靈活,有利于生成質量更高的代碼,而且局部變量所的占用的寄存器和數據存儲器在不同的模塊中可以重復利用。

當中斷里需要用到的變量時,就需要定義成全局變量,并且加volatile修飾一下,防止編譯器優化。如果數據是只讀的比如數碼管的斷碼、漢字取模的字庫需要放在ROM里,這樣可以節省RAM51單片機是加code,高級點的單片機都是加const修飾。

8.選擇合適的算法和數據結構

應該熟悉算法語言,知道各種算法的優缺點,具體資料請參見相應的參考資料,有很多計算機書籍上都有介紹。將比較慢的順序查找法用較快的二分查找或亂序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序執行的效率。.

選擇一種合適的數據結構也很重要。 指針是一個包含地址的變量,可對他指向的變量進行尋址。使用指針可以很容易的從一個變量移到下一個變量,故特別適合對大量變量進行操作的場合。數組與指針語句具有十分密切的關系,一般來說,指針比較靈活簡潔,而數組則比較直觀,容易理解。對于大部分的編譯器,使用指針比使用數組生成的代碼更短,執行效率更高。但是在Keil中則相反,使用數組比使用的指針生成的代碼更短。

9.使用條件編譯

一般情況下對C語言程序進行編譯時,所有的程序都參加編譯,但是有時希望對其中一部分內容只在滿足一定條件才編譯,這就是條件編譯。條件編譯可以根據實際情況,選擇不同的編譯范圍,從而產生不同的代碼。

10.嵌入匯編---殺手锏

匯編語言是效率最高的計算機語言,在一般項目開發當中一般都采用C 語言來開發的,因為嵌入匯編 之后會影響平臺的移植性和可讀性,不同平臺的匯編指令是不兼容的。但是對于一些執著的程序員要求程序獲得極致的運行的效率,他們都在C 語言中嵌入匯編,即“混合編程”。

注意:如果想嵌入匯編,一定要對匯編有深刻的了解。不到萬不得已的情況,不要使用嵌入匯編。

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

    關注

    6037

    文章

    44563

    瀏覽量

    635892
  • C語言
    +關注

    關注

    180

    文章

    7605

    瀏覽量

    136995

原文標題:如何提高單片機程序執行效率

文章出處:【微信號:wujianying_danpianji,微信公眾號:單片機精講吳鑒鷹】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    上傳一些關于單片機的論文

    上傳一些關于單片機的論文,希望對大家有用
    發表于 08-08 22:35

    學習單片機一些技巧

    單片機應用開發中,代碼的使用效率問題、單片機抗干擾性和可靠性等問題仍困擾著工程師。為幫助工程師解決單片機設計上的難題,納出單片機開發中應掌
    發表于 11-15 20:38

    單片機學習需要掌握的一些技巧

    抗干擾性和可靠性等問題仍困擾著工程師。那怎樣解決單片機設計上的難題?這里為大家整理出單片機開發中應掌握的幾個基本技巧。中國IC交易網、 如何提高C語言編程代碼的
    發表于 07-29 11:54

    MCS 51單片機一些疑難指令的解析

    本文介紹了學習和運用MCS51系列單片機中的一些技巧,特別針對MCS51單片機一些疑難指令
    發表于 11-17 16:09 ?19次下載

    單片機教程二十六:關于單片機一些基本概念

    單片機教程二十六:關于單片機一些基本概念 隨著電子技術的迅速發展,計算機已深入地滲透到我們的生活中,許多電子愛好者開始學習單片機
    發表于 05-15 23:24 ?627次閱讀

    關于單片機一些基本概念

    關于單片機一些基本概念  隨著電子技術的迅速發展,計算機已深入地滲透到我們的生活中,許多電子愛好者開始學習單片機知識,但單片機
    發表于 03-18 16:54 ?1097次閱讀

    單片機一些開發技巧

      很多朋友正在學習單片機開發技術,但開發中免不了要碰到這樣、那樣的問題,有些問題可能無礙大局,但有一些問題卻直接影響到產品的成本、體積、性能。這里介紹筆者的幾個
    發表于 06-13 17:18 ?3034次閱讀
    <b class='flag-5'>單片機</b>的<b class='flag-5'>一些</b>開發技巧

    關于單片機一些按鍵問題和代碼詳細資料總結

    本文檔的主要內容詳細介紹的是關于單片機一些按鍵問題和代碼詳細資料總結免費下載。
    發表于 06-18 17:44 ?2次下載
    <b class='flag-5'>關于</b><b class='flag-5'>單片機</b>的<b class='flag-5'>一些</b>按鍵問題和代碼詳細資料總結

    關于學習Linux的一些建議

    不管是在生活還是工作中,每個人都會逐漸養成一些小習慣。壞習慣旦形成就很難改正,所在在系統學習 Linux 之前,給大家一些建議,刻意去培養一些
    發表于 07-14 14:22 ?603次閱讀

    單片機程序防破解的一些建議資料下載

    電子發燒友網為你提供單片機程序防破解的一些建議資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-04 08:41 ?23次下載
    <b class='flag-5'>單片機</b>程序防破解的<b class='flag-5'>一些</b><b class='flag-5'>建議</b>資料下載

    關于51的一些看法

    51單片機:我覺得51的架構是分為:它的硬件結構+指令集:CPU,ROM,RAM,片外ROM,片外RAM,總線,IO,中斷,定時器,串口我學了后面的ARM重新來對51單片機一些簡單的回顧,程序
    發表于 11-23 16:20 ?9次下載
    <b class='flag-5'>關于</b>51的<b class='flag-5'>一些</b>看法

    關于藍橋杯單片機開發板矩陣鍵盤的一些

    關于藍橋杯單片機開發板矩陣鍵盤的一些
    發表于 11-23 17:36 ?2次下載
    <b class='flag-5'>關于</b>藍橋杯<b class='flag-5'>單片機</b>開發板矩陣鍵盤的<b class='flag-5'>一些</b>坑

    學習單片機,其實有一些技巧的

    單片機應用開發中,代碼的使用效率問題、單片機抗干擾性和可靠性等問題仍困擾著工程師。為幫助工程師解決單片機設計上的難題,這里給大家歸納出單片機
    發表于 12-08 09:21 ?0次下載
    學習<b class='flag-5'>單片機</b>,其實有<b class='flag-5'>一些</b>技巧的

    如何提高單片機程序執行效率

    更短的時間內完成相同的事那么效率就高。 關于如何提高C語言程序的執行效率,有如下建議: 1.盡量
    發表于 02-11 15:42 ?6次下載
    如何<b class='flag-5'>提高</b><b class='flag-5'>單片機</b>程序<b class='flag-5'>執行</b><b class='flag-5'>效率</b>

    單片機“低耦合”的一些方法

    單片機“低耦合”的一些方法
    的頭像 發表于 10-17 18:30 ?503次閱讀
    主站蜘蛛池模板: fryee性欧美18 19| 最新在线黄色网址| 夜夜骑夜夜欢| 国产www视频| 亲嘴扒胸摸屁股视频免费网站 | 57PAO强力打造高清免费| 狠狠色狠狠色狠狠五月ady| 乡村教师电影完整版在线观看| 怪物高h粗暴无尽| 天堂Av亚洲欧美日韩国产综合| 儿子好妈妈的HD3中字抢劫| 欧美一区二区视频高清专区| 99在线观看精品| 欧美午夜精品久久久久久浪潮 | 国产精品第一综合首页| 天美传媒在线观看完整高清 | 国产一区二区不卡老阿姨| 无码天堂亚洲国产AV久久| 国产精品麻豆a啊在线观看| 无码国产成人777爽死| 国产精品亚洲国产三区| 亚洲.日韩.欧美另类| 九九免费的视频| 10分钟免费观看视频| 欧美日韩综合一区| 成人毛片在线播放| 特级毛片全部免费播放免下载| 国产精品高清在线观看地址| 亚洲 欧美 国产 综合不卡| 精品AV无码一二三区视频| 最近高清日本免费| 青青草 久久久| 国产色精品久久人妻无码| 又长又大又粗又硬3p免费视频| 免费国产成人| 国产AV高清怡春院| 亚洲一区日韩一区欧美一区a| 美女被爽cao免费漫画| 成人免费视频在线观看| 香蕉eeww99国产精品| 久久夜色噜噜噜亚洲AV0000|