keil 局部變量不能查看值,顯示為not in scope
關(guān)于編譯器的優(yōu)化,參考網(wǎng)上的8051系列的說明如下:??
0級優(yōu)化:
1、 常數(shù)折疊:只要有可能,編譯器就執(zhí)行將表達(dá)式化為常數(shù)數(shù)字的計(jì)算,其中包括運(yùn)行地址的計(jì)算。
2、 簡單訪問優(yōu)化:對8051系統(tǒng)的內(nèi)部數(shù)據(jù)和位地址進(jìn)行訪問優(yōu)化。
3、 跳轉(zhuǎn)優(yōu)化:編譯器總是將跳轉(zhuǎn)延至最終目標(biāo)上,因此跳轉(zhuǎn)到跳轉(zhuǎn)之間的命令被刪除。
1級優(yōu)化:
1、 死碼消除:無用的代碼段被消除。
2、 跳轉(zhuǎn)否決:根據(jù)一個測試回溯,條件跳轉(zhuǎn)被仔細(xì)檢查,以決定是否能夠簡化或刪除。
2級優(yōu)化:
1、 數(shù)據(jù)覆蓋:適于靜態(tài)覆蓋的數(shù)據(jù)和位段被鑒別并標(biāo)記出來。連接定位器BL51通過對全局?jǐn)?shù)據(jù)流的分析,選擇可靜態(tài)覆蓋的段。
3級優(yōu)化:
1、“窺孔”優(yōu)化:將冗余的MOV命令去掉,包括不必要的從存儲器裝入對象及裝入常數(shù)的操作。另外如果能節(jié)省存儲空間或者程序執(zhí)行時間,復(fù)雜操作將由簡單操作所代替。
4級優(yōu)化:
1、 寄存器變量:使自動變量和函數(shù)參數(shù)盡可能位于工作寄存器中,只要有可能,將不為這些變量保留數(shù)據(jù)存儲器空間。
2、擴(kuò)展訪問優(yōu)化:來自IDATA、XDATA、PDATA和CODE區(qū)域的變量直接包含在操作之中,因此大多數(shù)時候沒有必要將其裝入中間寄存器。
3、局部公共子式消除:如果表達(dá)式中有一個重復(fù)執(zhí)行的計(jì)算,第一次計(jì)算的結(jié)果被保存,只要有可能,將被用作后續(xù)的計(jì)算,因此可從代碼中消除繁雜的計(jì)算。
4、 CASE/SWITCH語句優(yōu)化:將CASE/SWITCH語句作為跳轉(zhuǎn)表或跳轉(zhuǎn)串優(yōu)化。
5級優(yōu)化:
1、 全局公共子式消除:只要有可能,函數(shù)內(nèi)部相同的子表達(dá)式只計(jì)算一次。中間結(jié)果存入一個寄存器以代替新的計(jì)算。
2、 簡單循環(huán)優(yōu)化:以常量占據(jù)一段內(nèi)存的循環(huán)再運(yùn)行時被優(yōu)化。
6級優(yōu)化:
1、 回路循環(huán):如果程序代碼能更快更有效地執(zhí)行,程序回路將進(jìn)行循環(huán)。
7級優(yōu)化:
1、 擴(kuò)展入口優(yōu)化:在適合時對寄存器變量使用DPTR數(shù)據(jù)指針,指針和數(shù)組訪問被優(yōu)化以減小程序代碼和提高執(zhí)行速度。
8級優(yōu)化:
1、 公共尾部合并:對同一個函數(shù)有多處調(diào)用時,一些設(shè)置代碼可被重復(fù)使用,從而減小程序代碼長度。
9級優(yōu)化:
1、 公共子程序塊:檢測重復(fù)使用的指令序列,并將它們轉(zhuǎn)換為子程序。C51甚至?xí)匦掳才糯a以獲得更多的重復(fù)使用指令序列。
當(dāng)然,優(yōu)化級別并非越高越好,應(yīng)該根據(jù)具體要求適當(dāng)選擇。
設(shè)置方法:
魔術(shù)棒--> C/C++/ Code Opitization/ 0-3 level / choose 0 level。
??