單片機編程軟件很簡單(22),keil單片機編程軟件優(yōu)化等級+概念解析


原標題:單片機編程軟件很簡單(22),keil單片機編程軟件優(yōu)化等級+概念解析
Keil單片機編程軟件中的優(yōu)化等級是編譯器的一個重要功能,它允許開發(fā)者根據(jù)具體需求調(diào)整編譯器的優(yōu)化策略,從而生成更高效、更緊湊的代碼。以下是關(guān)于Keil單片機編程軟件優(yōu)化等級的概念解析:
一、優(yōu)化等級概述
Keil C51編譯器提供了0到9共10個優(yōu)化等級,高優(yōu)化級別中包含了前面所有的優(yōu)化級別。每個優(yōu)化等級都針對代碼的不同方面進行優(yōu)化,以提高程序的執(zhí)行效率、減小代碼大小或改善其他性能指標。
二、各優(yōu)化等級詳解
0級優(yōu)化(無優(yōu)化):
常數(shù)折疊:只要有可能,編譯器就執(zhí)行將表達式化為常數(shù)數(shù)字的計算,包括運行地址的計算。
簡單訪問優(yōu)化:對8051系統(tǒng)的內(nèi)部數(shù)據(jù)和位地址進行訪問優(yōu)化。
跳轉(zhuǎn)優(yōu)化:編譯器總是將跳轉(zhuǎn)延至最終目標上,因此跳轉(zhuǎn)到跳轉(zhuǎn)之間的命令被刪除。
1級優(yōu)化:
死碼消除:無用的代碼段被消除。
跳轉(zhuǎn)否決:根據(jù)一個測試回溯,條件跳轉(zhuǎn)被仔細檢查,以決定是否能夠簡化或刪除。
2級優(yōu)化:
數(shù)據(jù)覆蓋:適于靜態(tài)覆蓋的數(shù)據(jù)和位段被鑒別并標記出來,連接定位器BL51通過對全局數(shù)據(jù)流的分析,選擇可靜態(tài)覆蓋的段。
3級優(yōu)化:
“窺孔”優(yōu)化:將冗余的MOV命令去掉,包括不必要的從存儲器裝入對象及裝入常數(shù)的操作。如果能節(jié)省存儲空間或程序執(zhí)行時間,復(fù)雜操作將由簡單操作所代替。
4級優(yōu)化:
寄存器變量:使自動變量和函數(shù)參數(shù)盡可能位于工作寄存器中,只要有可能,將不為這些變量保留數(shù)據(jù)存儲器空間。
擴展訪問優(yōu)化:來自IDATA、XDATA、PDATA和CODE區(qū)域的變量直接包含在操作之中,因此大多數(shù)時候沒有必要將其裝入中間寄存器。
局部公共子式消除:如果表達式中有一個重復(fù)執(zhí)行的計算,第一次計算的結(jié)果被保存,后續(xù)計算將使用這個結(jié)果,從而消除繁雜的計算。
CASE/SWITCH語句優(yōu)化:將CASE/SWITCH語句作為跳轉(zhuǎn)表或跳轉(zhuǎn)串優(yōu)化。
5級優(yōu)化:
全局公共子式消除:只要有可能,函數(shù)內(nèi)部相同的子表達式只計算一次,中間結(jié)果存入一個寄存器以代替新的計算。
簡單循環(huán)優(yōu)化:以常量占據(jù)一段內(nèi)存的循環(huán)在運行時被優(yōu)化。
6級優(yōu)化:
回路循環(huán):如果程序代碼能更快更有效地執(zhí)行,程序回路將進行循環(huán)優(yōu)化。
7級優(yōu)化:
擴展入口優(yōu)化:在適合時對寄存器變量使用DPTR數(shù)據(jù)指針,指針和數(shù)組訪問被優(yōu)化以減小程序代碼和提高執(zhí)行速度。
8級優(yōu)化:
公共尾部合并:對同一個函數(shù)有多處調(diào)用時,一些設(shè)置代碼可被重復(fù)使用,從而減小程序代碼長度。
9級優(yōu)化:
公共子程序塊:檢測重復(fù)使用的指令序列,并將它們轉(zhuǎn)換為子程序。C51甚至會重新安排代碼以獲得更多的重復(fù)使用指令序列。
三、優(yōu)化等級的選擇
優(yōu)化等級的選擇應(yīng)根據(jù)具體的應(yīng)用場景和需求來決定。一般來說,較高的優(yōu)化等級可以生成更高效的代碼,但也可能增加編譯的復(fù)雜性和調(diào)試的難度。在開發(fā)階段,為了便于調(diào)試和理解程序行為,可以選擇較低的優(yōu)化等級。而在產(chǎn)品發(fā)布前,為了最大化程序性能,可以選擇較高的優(yōu)化等級。
需要注意的是,優(yōu)化等級并非越高越好。在某些情況下,過高的優(yōu)化等級可能導致代碼邏輯出錯或性能下降。因此,在選擇優(yōu)化等級時,應(yīng)綜合考慮代碼的可讀性、可維護性以及性能需求。
綜上所述,Keil單片機編程軟件的優(yōu)化等級是一個強大的功能,它允許開發(fā)者根據(jù)具體需求調(diào)整編譯器的優(yōu)化策略。通過合理選擇優(yōu)化等級,可以生成更高效、更緊湊的代碼,從而提高程序的執(zhí)行效率和可靠性。
責任編輯:David
【免責聲明】
1、本文內(nèi)容、數(shù)據(jù)、圖表等來源于網(wǎng)絡(luò)引用或其他公開資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對本文的引用持有異議,請聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時處理。
2、本文的引用僅供讀者交流學習使用,不涉及商業(yè)目的。
3、本文內(nèi)容僅代表作者觀點,拍明芯城不對內(nèi)容的準確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨立判斷做出的,請讀者明確相關(guān)結(jié)果。
4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責任的權(quán)利。
拍明芯城擁有對此聲明的最終解釋權(quán)。