keil優(yōu)化等級設置_第1頁
keil優(yōu)化等級設置_第2頁
keil優(yōu)化等級設置_第3頁
keil優(yōu)化等級設置_第4頁
keil優(yōu)化等級設置_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、優(yōu)化級別說明(僅供參考):則其中的CodeOptimization欄就是用來設置C51的優(yōu)化級別。共有9個優(yōu)化級別(書上這么寫的),高優(yōu)化級別中包含了前面所有的優(yōu)化級別。現(xiàn)將各個級別說明如下:0級優(yōu)化:1、常數(shù)折疊:只要有可能,編譯器就執(zhí)行將表達式化為常數(shù)數(shù)字的計算,其中包括運行地址的計算。2、簡單訪問優(yōu)化:對8051系統(tǒng)的內(nèi)部數(shù)據(jù)和位地址進行訪問優(yōu)化。3、跳轉(zhuǎn)優(yōu)化:編譯器總是將跳轉(zhuǎn)延至最終目標上,因此跳轉(zhuǎn)到跳轉(zhuǎn)之間的命令被刪除。級優(yōu)化:1、死碼消除:無用的代碼段被消除。2、跳轉(zhuǎn)否決:根據(jù)一個測試回溯,條件跳轉(zhuǎn)被仔細檢查,以決定是否能夠簡化或刪除。級優(yōu)化:1、數(shù)據(jù)覆蓋:適于靜態(tài)覆蓋的數(shù)據(jù)和位段

2、被鑒別并標記出來。連接定位器BL51通過對全局數(shù)據(jù)流的分析,選擇可靜態(tài)覆蓋的段。級優(yōu)化:、“窺孔”優(yōu)化:將冗余的MOV命令去掉,包括不必要的從存儲器裝入對象及裝入常數(shù)的操作。另外如果能節(jié)省存儲空間或者程序執(zhí)行時間,復雜操作將由簡單操作所代替。級優(yōu)化:1、寄存器變量:使自動變量和函數(shù)參數(shù)盡可能位于工作寄存器中,只要有可能,將不為這些變量保留數(shù)據(jù)存儲器空間。2、擴展訪問優(yōu)化:來自IDATA、XDATA、PDATA和CODE區(qū)域的變量直接包含在操作之中,因此大多數(shù)時候沒有必要將其裝入中間寄存器。3、局部公共子式消除:如果表達式中有一個重復執(zhí)行的計算,第一次計算的結(jié)果被保存,只要有可能,將被用作后續(xù)的

3、計算,因此可從代碼中消除繁雜的計算。4、CASE/SWITCH語句優(yōu)化:將CASE/SWITCH語句作為跳轉(zhuǎn)表或跳轉(zhuǎn)串優(yōu)化。級優(yōu)化:1、全局公共子式消除:只要有可能,函數(shù)內(nèi)部相同的子表達式只計算一次。中間結(jié)果存入一個寄存器以代替新的計算。2、簡單循環(huán)優(yōu)化:以常量占據(jù)一段內(nèi)存的循環(huán)再運行時被優(yōu)化。級優(yōu)化:1、回路循環(huán):如果程序代碼能更快更有效地執(zhí)行,程序回路將進行循環(huán)。級優(yōu)化:1、擴展入口優(yōu)化:在適合時對寄存器變量使用DPTR數(shù)據(jù)指針,指針和數(shù)組訪問被優(yōu)化以減小程序代碼和提高執(zhí)行速度。級優(yōu)化:1、公共尾部合并:對同一個函數(shù)有多處調(diào)用時,一些設置代碼可被重復使用,從而減小程序代碼長度。級優(yōu)化:1、

4、公共子程序塊:檢測重復使用的指令序列,并將它們轉(zhuǎn)換為子程序。C51甚至會重新安排代碼以獲得更多的重復使用指令序列。當然,優(yōu)化級別并非越高越好,應該根據(jù)具體要求適當選擇。KeilC51的編譯器有一個優(yōu)化設置,不同的優(yōu)化設置,會產(chǎn)生不同的編譯結(jié)果。一般情況缺省編譯優(yōu)化設置被設定為8級優(yōu)化,實際最高可設定為9級優(yōu)化:Deadcodeelimination。Dataoverlaying。Peepholeoptimization。Registervariables。Commonsubexpressionelimination。Looprotation。ExtendedIndexAccessOptimiz

5、ing。ReuseCommonEntryCode。CommonBlockSubroutines。附表:KeilC51中的優(yōu)化級別及優(yōu)化作用級別說明0常數(shù)合并:編譯器預先計算結(jié)果,盡可能用常數(shù)代替表達式。包括運行地址計算。優(yōu)化簡單訪問:編譯器優(yōu)化訪問8051系統(tǒng)的內(nèi)部數(shù)據(jù)和位地址。跳轉(zhuǎn)優(yōu)化:編譯器總是擴展跳轉(zhuǎn)到最終目標,多級跳轉(zhuǎn)指令被刪除。死代碼刪除:沒用的代碼段被刪除。拒絕跳轉(zhuǎn):嚴密的檢查條件跳轉(zhuǎn),以確定是否可以倒置測試邏輯來改進或刪除。數(shù)據(jù)覆蓋:適合靜態(tài)覆蓋的數(shù)據(jù)和位段被確定,并內(nèi)部標識。BL51連接/定位器可以通過全局數(shù)據(jù)流分析,選擇可被覆蓋的段。窺孔優(yōu)化:清除多余的MOV指令。這包括不必

6、要的從存儲區(qū)加載和常數(shù)加載操作。當存儲空間或執(zhí)行時間可節(jié)省時,用簡單操作代替復雜操作。寄存器變量:如有可能,自動變量和函數(shù)參數(shù)分配到寄存器上。為這些變量保留的存儲區(qū)就省略了。優(yōu)化擴展訪問:IDATA、XDATA、PDATA和CODE的變量直接包含在操作中。在多數(shù)時間沒必要使用中間寄存器。局部公共子表達式刪除:如果用一個表達式重復進行相同的計算,則保存第一次計算結(jié)果,后面有可能就用這結(jié)果。多余的計算就被刪除。Case/Switch優(yōu)化:包含SWITCH和CASE的代碼優(yōu)化為跳轉(zhuǎn)表或跳轉(zhuǎn)隊列。全局公共子表達式刪除:一個函數(shù)內(nèi)相同的子表達式有可能就只計算一次。中間結(jié)果保存在寄存器中,在一個新的計算中

7、使用。簡單循環(huán)優(yōu)化:用一個常數(shù)填充存儲區(qū)的循環(huán)程序被修改和優(yōu)化。循環(huán)優(yōu)化:如果結(jié)果程序代碼更快和有效則程序?qū)ρh(huán)進行優(yōu)化。擴展索引訪問優(yōu)化:適當時對寄存器變量用DPTR。對指針和數(shù)組訪問進行執(zhí)行速度和代碼大小優(yōu)化。公共尾部合并:當一個函數(shù)有多個調(diào)用,一些設置代碼可以復用,因此減少程序大小。公共塊子程序:檢測循環(huán)指令序列,并轉(zhuǎn)換成子程序。Cx51甚至重排代碼以得到更大的循環(huán)序列。優(yōu)化論談到優(yōu)化,其實很多人都哭笑不得,因為在一個C51軟件工程師的生涯中,總要被KEIL的優(yōu)化耍那么一次到幾次。我被耍過,想必看著文章的你也被耍過,如果你回答說不,那只能說你寫的C51程序不多!看看KEILC的優(yōu)化級別選

8、項吧:0-9共10個級別的優(yōu)化,0是最低,9最高,一個普通的程序,設置最高級別和最低級別,編譯后代碼量有時會相差很遠,以DX板DEMO程序為例,0級優(yōu)化后是14K的CODE,9級優(yōu)化后是10K的CODE,前后相差了4K。可見這個差別是多么的大。事實上我們不需要知道對應的各個級另Keil會如何優(yōu)化你的程序或優(yōu)化了些什么,我們只需要以一種嚴謹?shù)膽B(tài)度去編寫和對待你的程序就可以了。在我個人的觀念中,程序在9級優(yōu)化后依然能保持完美無誤的運行,你才算了解KEIL的脾氣。好了,還是說點正點的:有些人習慣整體程序都選擇同一個優(yōu)化級,事實上每個C文件都可以有獨立的優(yōu)化級別的:在工作區(qū)右鍵選擇你的模塊(.C)然后

9、選取OptionsforFilexxx就會出現(xiàn)如下界面:在C51選項中就可以選擇優(yōu)化級別和警告級別等東西了,被獨立設置過的C文件會有特殊的標記的:用以提醒你這個文件的編譯處理并非默認設置!如果你覺得模塊優(yōu)化都不夠細的話,你可以考慮局部優(yōu)化,也就是說對某個函數(shù)實行某個級別的優(yōu)化。當你發(fā)現(xiàn)9級優(yōu)化的時候某個函數(shù)總是變的不正常,但你又希望其它函數(shù)和程序段保持最高的簡潔度,那么局部優(yōu)化可以說是相當有用的了。在KEIL手冊中有介紹這個功能:#pragmaOPTIMIZE(x)x就是你希望的優(yōu)化級別,一般應用如下:#pragmaOPTIMIZE(6)voidFunA()#pragmaOPTIMIZE(9)voidFunB()上面的意思就是說,在voidFunA()到voidFunB()之前的所有函數(shù),包括FunA在內(nèi),都采用6級的優(yōu)化,而從FunB開始直到之后,只要沒碰上#pragmaOPTIMIZE,都采用9級優(yōu)化了。OPTIMIZE還可以多一個參數(shù),就是speed和s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論