『壹』 Keil優化及如何設置某段代碼不優化
Keil默認會對代碼進行優化的
一般情況預設編譯優化設置被設定為8級優化,實際最高可設定為9級優化。
1、Dead code elimination
2、Data overlaying
3、Peephole optimization
4、Register variables
5、Common subexpression elimination
6、Loop rotation
7、Extended Index Access Optimizing
8、Reuse Common Entry Code
9、Common Block Subroutines
如何設定不優化或改變某個文件的優化設置
1、針對某個文件
(1) 右鍵->Option for File XXXX
(2) 切換到【C51】選項卡
default表示與工程設置一致
2、針對某段代碼(局部優化)
#pragma OPTIMIZE(x) x就是你希望的優化級別
舉例如下:
#pragma OPTIMIZE(6)
void FunA()
{
}
......
......
#pragma OPTIMIZE(9)
void FunB()
{
}
上面的意思就是說,在void FunA()到void FunB()之前的所有函數,包括FunA在內,都採用6級的優化,而從FunB開始直到之後,只要沒碰上#pragma OPTIMIZE,都採用9級優化了。
OPTIMIZE還可以多一個參數,就是speed和size,
用法: #pragma OPTIMIZE(9,speed)或#pragma OPTIMIZE(5,size)
對應的就是9級優化,以速度為主,或5級優化,以空間最小為主。
『貳』 keil c51優化等級介紹
在使用Keil C51進行編程時,推薦使用優化等級8,其他等級可能會引發問題。編譯完成後,務必檢查data和xdata段,確保它們沒有超出目標晶元的最大值。特別是在處理data段時,要特別注意其值不能超過128,即使接近128也可能導致錯誤。如果確實需要使用到256的data空間,那麼可以考慮將多餘的128位數據定義為idata類型,以此來避免數據溢出的問題。
優化等級8是針對C51編譯器的推薦設置,因為它能夠提供良好的性能和兼容性,同時減少代碼大小,提升執行效率。然而,在實際應用中,如果數據段的使用范圍超過了128,就需要進行額外的內存管理。具體來說,當data段需要超過128個位元組時,應當重新評估數據存儲的需求,考慮將部分數據重新定義為idata或xdata類型,確保數據能夠正確地存儲和訪問。
數據段的管理是C51編程中的一個重要環節。data段主要用於存儲臨時變數和局部變數,而xdata段則用於存儲外部數據。在使用過程中,合理分配和管理這些數據段對於確保程序的穩定性和效率至關重要。尤其是data段,其大小受到嚴格限制,一旦超過128個位元組,就可能引發溢出問題,進而影響程序的正常運行。
因此,在進行Keil C51編程時,建議開發者密切關注數據段的使用情況。當data段接近其最大值128時,應當採取措施避免溢出。這可能包括優化代碼結構,減少不必要的變數聲明,或者將部分數據重新定義為其他存儲類型。通過細致地管理數據段,可以顯著提高程序的可靠性和性能。
『叄』 KEIL中的設置
在KEIL中針對用戶因程序產生的機器碼大小超過所選單片機Flash ROM空間的問題,可以通過以下設置進行解決:
**1. 更換目標單片機 步驟:在KEIL的項目選項中,找到「Device」設置。這里列出了所有支持的單片機型號。 操作:根據程序的機器碼大小和所需資源,選擇一個ROM容量更大的單片機型號。確保所選型號滿足程序需求。
**2. 優化代碼以減小機器碼大小 步驟:雖然更換單片機是最直接的解決方法,但在某些情況下,優化代碼也可以有效減小機器碼大小。 操作:檢查並優化代碼,例如去除不必要的函數調用、減少全局變數的使用、合並相似的代碼段等。此外,可以利用KEIL的優化選項,嘗試不同的優化級別,以進一步減小生成的機器碼大小。
**3. 檢查鏈接腳本 步驟:鏈接腳本定義了如何將程序的不同部分映射到單片機的內存中。 操作:檢查鏈接腳本,確保沒有不必要的內存分配或浪費。根據需要調整腳本中的內存布局,以充分利用單片機的Flash ROM空間。
**4. 使用外部存儲器 步驟:如果單片機的內部Flash ROM空間確實無法滿足需求,可以考慮使用外部存儲器。 操作:這通常涉及硬體設計和軟體配置。需要確保單片機支持外部存儲器介面,並在軟體中進行相應的配置和初始化。
綜上所述,針對程序產生的機器碼大小超過單片機Flash ROM空間的問題,最直接的方法是更換一個ROM容量更大的單片機。同時,也可以考慮優化代碼、檢查鏈接腳本或使用外部存儲器等方法來解決問題。