久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當前位置:首頁 >> 技術中心 >> 單片機入門 >> 高手經驗,教你如何提高單片機程序執行效率

高手經驗,教你如何提高單片機程序執行效率

關鍵字:單片機 程序 作者:admin 來源:不詳 發布時間:2018-05-18  瀏覽:36

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

關于如何提高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里,這樣可以節省RAM,51單片機是加code,高級點的單片機都是加const修飾。

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

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

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

9.使用條件編譯

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

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

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

編輯:admin  最后修改時間:2018-05-18

聯系方式

0755-82591179

郵箱:ivy@yingtexin.net

地址:深圳市南山區桃源街道平山社區平山一路2號南山云谷創業園二期11棟410-411

Copyright © 2014-2026 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

久久精品99久久_亚洲一区二区综合_狠狠色伊人亚洲综合成人_亚洲综合爱爱久久网
av五月天在线| 日韩不卡一二区| 妞干网视频在线观看| 强伦女教师2:伦理在线观看| 色91精品久久久久久久久| jizzjizz国产精品喷水| 中国丰满人妻videoshd| 国产a级一级片| 激情五月婷婷久久| 向日葵污视频在线观看| а 天堂 在线| 日韩成人手机在线| av网站在线观看不卡| 日韩一级片播放| 不用播放器的免费av| 91成人在线视频观看| 夜夜添无码一区二区三区| 日本精品www| 精品国产鲁一鲁一区二区三区| 精产国品一二三区| 欧美人成在线观看| av在线无限看| 国产午夜精品视频一区二区三区| 日韩欧美一区二| 国产精品区在线| 大陆av在线播放| 国产aⅴ爽av久久久久| 国产激情片在线观看| 黄色片久久久久| 黄色一级视频播放| 女人另类性混交zo| 中文字幕日韩精品无码内射| 日本精品久久久久中文字幕| 四虎免费在线观看视频| 国产精品第12页| 日本一本中文字幕| 在线视频观看一区二区| av动漫在线观看| 欧洲精品在线播放| 超碰成人在线播放| 国产成人久久777777| 日韩一二区视频| 亚洲精品mv在线观看| 99久久久无码国产精品6| 日本xxxxx18| 91丨九色丨蝌蚪| 人人爽人人av| 国产在线青青草| 日本黄大片在线观看| 91制片厂免费观看| 中文字幕第一页在线视频| 国产精品第12页| 国产91在线免费| 狠狠干 狠狠操| 日本aa在线观看| 麻豆一区二区三区在线观看| 污视频在线观看免费网站| 日本久久久久久久久久久久| 免费大片在线观看| 国产麻花豆剧传媒精品mv在线| 国产成a人亚洲精v品在线观看| 无套内谢丰满少妇中文字幕 | 女人另类性混交zo| 欧美在线观看视频网站| 欧美成人一区二区在线观看| 你真棒插曲来救救我在线观看| 日韩精品免费一区| 免费在线看黄色片| 99视频在线免费播放| 免费在线a视频| 日本新janpanese乱熟| 亚洲成色www.777999| 午夜免费精品视频| 91精品999| 国内自拍中文字幕| 黄色一级视频在线播放| 欧美日韩在线中文| 99re6在线观看| 国产精品一二三在线观看| 国产成人艳妇aa视频在线| 国产乱子伦农村叉叉叉| 一本大道熟女人妻中文字幕在线 | 久久国产午夜精品理论片最新版本| 成人在线免费观看视频网站| 国产精品久久..4399| 人妻内射一区二区在线视频 | 成熟老妇女视频| 手机av在线免费| 欧美黑人在线观看| 成年人小视频网站| 香蕉视频免费版| 茄子视频成人免费观看| 午夜免费福利网站| 成人免费观看视频在线观看| 亚洲精品免费一区亚洲精品免费精品一区 | 男人添女人下面高潮视频| 久久综合久久色| 日韩第一页在线观看| 成人一级片网站| 亚洲另类第一页| 日韩av三级在线| 欧洲xxxxx| 亚洲欧美偷拍另类| 免费无码av片在线观看| 日韩国产精品毛片| 在线观看免费污视频| 成年女人18级毛片毛片免费 | 亚洲图片 自拍偷拍| 日本黄色三级大片| 黄网站欧美内射| 精品国产三级a∨在线| 天天色综合天天色| www.浪潮av.com| 国产freexxxx性播放麻豆| 国产精品自在自线| 亚洲精品一二三四五区| 欧美大片在线播放| 999久久欧美人妻一区二区| 伊人色在线视频| 国产原创精品在线| 8x8x最新地址| 日本888xxxx| 美女网站免费观看视频| 久久久噜噜噜www成人网| 成人网站免费观看入口| 男人添女人下部视频免费| 超碰超碰超碰超碰超碰| 自拍一级黄色片| 国产精品99久久久久久大便| 精品国产鲁一鲁一区二区三区| 亚洲 激情 在线| 亚洲午夜精品一区| 香蕉视频在线网址| 亚洲国产一二三精品无码 | 国产精品专区在线| 欧美一区二区三区爽大粗免费| 久久视频这里有精品| 少妇高潮喷水在线观看| 国产免费黄色小视频| 一女被多男玩喷潮视频| 色综合av综合无码综合网站| 免费无码国产v片在线观看| 欧美在线观看视频网站| 小明看看成人免费视频| 中文字幕一区二区三区四区五区人 | 日韩毛片在线免费看| 色多多视频在线播放| 中文字幕在线视频一区二区三区| 色婷婷一区二区三区在线观看| 久久久国产精华液999999| 污污的视频免费观看| 精品人妻人人做人人爽| 欧美日韩亚洲第一| 亚洲精品久久久久久宅男| 91xxx视频| 激情五月开心婷婷| 成人高清在线观看视频| 国产青青在线视频| 中文字幕第一页在线视频| 日韩国产一级片| 制服丝袜中文字幕第一页| 欧美精品卡一卡二| 日本中文字幕观看| 日本a视频在线观看| 午夜久久久精品| 免费看国产曰批40分钟| 日韩一区二区三区久久| 欧美黑人经典片免费观看| 特级丰满少妇一级| 成人免费播放器| 2021狠狠干| 麻豆三级在线观看| jizzjizzxxxx| 亚洲国产成人精品无码区99| 久久久久久久久久一区二区| 国产欧美在线一区| 妞干网视频在线观看| 亚洲黄色av片| 欧美午夜aaaaaa免费视频| 国产中文字幕二区| 久久av高潮av| 中国一级大黄大黄大色毛片| 天天爽夜夜爽一区二区三区| 看av免费毛片手机播放| 国产成人一区二区三区别| 天美一区二区三区| 制服丝袜综合网| 天天干在线影院| 男人插女人下面免费视频| 人妻少妇被粗大爽9797pw| 男人用嘴添女人下身免费视频| 免费看黄色a级片| 成人午夜视频免费观看| 成人免费看片'免费看| 国产性生活免费视频| 国产一区二区三区在线免费| 黄色一级片国产| 欧日韩免费视频| 国产亚洲欧美在线视频| 亚洲色欲综合一区二区三区|