糯米文學吧

位置:首頁 > 計算機 > C語言

嵌入式C語言性能優化方法

C語言1.72W

嵌入式系統是指完成一種或幾種特定功能的計算機系統,具有自動化程度高,響應速度快等優點,目前已廣泛應用於消費電子,工業控制等領域.嵌入式系統受其使用的硬件以及運行環境的限制,非常注重代碼的時間和空間效率,因此選擇一種合適的開發語言十分重要.嵌入式C語言性能優化方法有哪些?下面是相關的知識,歡迎閲讀

嵌入式C語言性能優化方法

  使用宏定義

在C語言中,宏是產生內嵌代碼的唯一方法。對於嵌入式系統而言,為了能達到性能要求,宏是一種很好的代替函數的方法。

寫一個"標準"宏MIN ,這個宏輸入兩個參數並返回較小的一個:

  錯誤做法:

#define MIN(A,B)  ( A  外部同步RAM > 外部異步RAM > FLASH/ROM

對於程序代碼,已經被燒錄在FLASH或ROM中,我們可以讓CPU直接從其中讀取代碼執行,但通常這不是一個好辦法,我們最好在系統啟動後將FLASH或ROM中的目標代碼拷貝入RAM中後再執行以提高取指令速度;

對於UART等設備,其內部有一定容量的接收BUFFER,我們應儘量在BUFFER被佔滿後再向CPU提出中斷。例如計算機終端在向目標機通過RS-232傳遞數據時,不宜設置UART只接收到一個BYTE就向CPU提中斷,從而無謂浪費中斷處理時間;

如果對某設備能採取DMA方式讀取,就採用DMA讀取,DMA讀取方式在讀取目標中包含的存儲信息較大時效率較高,其數據傳輸的基本單位是塊,而所傳輸的數據是從設備直接送入內存的'(或者相反)。DMA方式較之中斷驅動方式,減少了CPU 對外設的干預,進一步提高了CPU與外設的並行操作程度。

  活用位操作

使用C語言的位操作可以減少除法和取模的運算。在計算機程序中數據的位是可以操作的最小數據單位,理論上可以用"位運算"來完成所有的運算和操作,因而,靈活的位操作可以有效地提高程序運行的效率。舉例如下:

/* 方法1 */

int i,j;

i = 879 / 16;

j = 562 % 32;

/* 方法2 */

int i,j;

i = 879 >> 4;

j = 562 - (562 >> 5 >"通常可以提高算法效率。因為乘除運算指令週期通常比移位運算大。

C語言位運算除了可以提高運算效率外,在嵌入式系統的編程中,它的另一個最典型的應用,而且十分廣泛地正在被使用着的是位間的與(&)、或(|)、非(~)操作,這跟嵌入式系統的編程特點有很大關係。我們通常要對硬件寄存器進行位設置,譬如,我們通過將AM186ER型80186處理器的中斷屏蔽控制寄存器的第低6位設置為0(開中斷2),最通用的做法是:

#define INT_I2_MASK 0x0040

wTemp = inword(INT_MASK);

outword(INT_MASK, wTemp &~INT_I2_MASK);

而將該位設置為1的做法是:

#define INT_I2_MASK 0x0040

wTemp = inword(INT_MASK);

outword(INT_MASK, wTemp | INT_I2_MASK);

  判斷該位是否為1的做法是:

#define INT_I2_MASK 0x0040

wTemp = inword(INT_MASK);

if(wTemp & INT_I2_MASK)

{

… /* 該位為1 */

}

上述方法在嵌入式系統的編程中是非常常見的,我們需要牢固掌握。