日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]首先什么是執(zhí)行效率。我們平常所說的執(zhí)行效率就是使用相同的算法在相同輸入條件下完成相同計算所產(chǎn)生的系統(tǒng)開銷,目前來說一般會更多關(guān)注執(zhí)行時間方面的開銷。所有語言編寫的代碼最終要運行,都要轉(zhuǎn)化成機器碼。在更

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

關(guān)于如何提高C語言程序的執(zhí)行效率,以我多年的編程經(jīng)驗在這里我來談談我的想法:

1.盡量避免調(diào)用延時函數(shù)

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

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

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

3.合理使用宏定義

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

4.使用盡量小的數(shù)據(jù)類型

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

5.避免使用乘除法

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

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

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

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

先來看一下局部變量,全局變量,靜態(tài)局部變量,靜態(tài)全局變量的異同:

(1)局部變量:在一個函數(shù)中或復合語句中定義的變量,在動態(tài)存儲區(qū)分配存儲單元,在調(diào)用時動態(tài)分配,在函數(shù)或復合語句結(jié)束時自動釋放;

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

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

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

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

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


8.選擇合適的算法和數(shù)據(jù)結(jié)構(gòu)

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

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

9.使用條件編譯

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

10.嵌入?yún)R編---殺手锏

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


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

8位單片機在嵌入式設(shè)計領(lǐng)域已經(jīng)成為半個多世紀以來的主流選擇。盡管嵌入式系統(tǒng)市場日益復雜,8位單片機依然不斷發(fā)展,積極應對新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機系列,配備了先進的獨立...

關(guān)鍵字: 單片機 嵌入式 CPU

在嵌入式系統(tǒng)開發(fā)中,程序燒錄是連接軟件設(shè)計與硬件實現(xiàn)的關(guān)鍵環(huán)節(jié)。當前主流的單片機燒錄技術(shù)已形成ICP(在電路編程)、ISP(在系統(tǒng)編程)、IAP(在應用編程)三大技術(shù)體系,分別對應開發(fā)調(diào)試、量產(chǎn)燒錄、遠程升級等不同場景。...

關(guān)鍵字: 單片機 ISP ICP IAP 嵌入式系統(tǒng)開發(fā)

在嵌入式系統(tǒng)開發(fā)中,看門狗(Watchdog Timer, WDT)是保障系統(tǒng)可靠性的核心組件,其初始化時機的選擇直接影響系統(tǒng)抗干擾能力和穩(wěn)定性。本文從硬件架構(gòu)、軟件流程、安全規(guī)范三個維度,系統(tǒng)分析看門狗初始化的最佳實踐...

關(guān)鍵字: 單片機 看門狗 嵌入式系統(tǒng)

本文中,小編將對單片機予以介紹,如果你想對它的詳細情況有所認識,或者想要增進對它的了解程度,不妨請看以下內(nèi)容哦。

關(guān)鍵字: 單片機 開發(fā)板 Keil

隨著單片機系統(tǒng)越來越廣泛地應用于消費類電子、醫(yī)療、工業(yè)自動化、智能化儀器儀表、航空航天等各領(lǐng)域,單片機系統(tǒng)面臨著電磁干擾(EMI)日益嚴重的威脅。電磁兼容性(EMC)包含系統(tǒng)的發(fā)射和敏感度兩方面的問題。

關(guān)鍵字: 單片機 電磁兼容

以下內(nèi)容中,小編將對單片機的相關(guān)內(nèi)容進行著重介紹和闡述,希望本文能幫您增進對單片機的了解,和小編一起來看看吧。

關(guān)鍵字: 單片機 復位電路

在這篇文章中,小編將為大家?guī)韱纹瑱C的相關(guān)報道。如果你對本文即將要講解的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: 單片機 異常復位

今天,小編將在這篇文章中為大家?guī)韱纹瑱C的有關(guān)報道,通過閱讀這篇文章,大家可以對它具備清晰的認識,主要內(nèi)容如下。

關(guān)鍵字: 單片機 仿真器

單片機將是下述內(nèi)容的主要介紹對象,通過這篇文章,小編希望大家可以對它的相關(guān)情況以及信息有所認識和了解,詳細內(nèi)容如下。

關(guān)鍵字: 單片機 中斷 boot

一直以來,單片機都是大家的關(guān)注焦點之一。因此針對大家的興趣點所在,小編將為大家?guī)韱纹瑱C的相關(guān)介紹,詳細內(nèi)容請看下文。

關(guān)鍵字: 單片機 數(shù)字信號 模擬信號
關(guān)閉