ARM嵌入式C語言設計小技巧

2021-09-01 18:11:07 字數 992 閱讀 9261

1 變數定義

先來看下邊的兩處變數定義

ⅰchar a;

short b;

char c;

int d;

ⅱchar a;

char c;

short b;

int d;

顯然兩處定義的變數是相同的,不同之處在於定義的順序。看一下他們分別在資料區的布局

(pad為無意義的填充空間)

ⅰa pad b

c paddⅱ

a c b

d由上可得出一般意義上的準則:

最好把所有相同型別變數放在一起定義,以便優化儲存器布局。

下面說乙個例外的情況:

當函式區域性變數數目有限時候,編譯器會把區域性變數分配給內部暫存器,每變數占用乙個暫存器。此時使用32位int 或 unsigned int 區域性變數最有效率。因為8或15位變數完成加法後還要在32位暫存器裡面完成符號擴充套件。

還有就是冗餘變數的使用,一般我們總是避免類似情況的使用。但是也有例外:

int f(void);

int g(void);

int errs;

void test1(void)

void test2(void)

在test1中,每次訪問全域性變數errs,都需從相應儲存器load到暫存器中,經函式呼叫後在store回原來儲存區。共有兩次load/store操作。在test2中顯然只有一次load/store操作。

2引數傳遞

一般引數數目超過四個,則使用堆疊傳遞,因此盡量將引數控制在四個以下。

3迴圈條件

計數迴圈

for(loop=1; loop <= limit;loop++)是常用的迴圈形式。遞減計數則很少使用。在邏輯上兩種方式並沒有差異,但對映到具體體系結構,就有了很大的不同。

本質原因:當進行非零常數比較時候,必須利用專門的cmp指令來執行。但是乙個變數與0比較時候,可以直接利用條件執行的ne來判別。因此arm體系下,建議遞減至0的方式設定迴圈條件。

嵌入式C語言優化小技巧

嵌入式系統是指完成一種或幾種特定功能的計算機系統,具有自動化程度高,響應速度快等優點,目前已廣泛應用於消費電子,工業控制等領域.嵌入式系統受其使用的硬體以及執行環境的限制,非常注重 的時間和空間效率,因此選擇一種合適的開發語言十分重要.目前,在嵌入式系統開發中可使用的語言很多,其中 c語言應用得最廣...

嵌入式,ARM掃盲

炮製了一篇,基本是拿來主義,不算技術,只能算雜談。注 此處正常模式和普通模式是我生造的術語,沒有確定是否存在,各位請暫且忽略。arm異常處理過程 arm的異常,包括復位 未定義指令 軟體中斷 資料訪問中止 外部中斷請求 快 速中斷請求。處理過程 1 儲存現場,包括處理器當前狀態 中斷遮蔽位 cpsr...

ARM嵌入式實驗

問題 在startup.s中增加函式,由c程式呼叫,以此取得彙編中相關引數的設定值。獲取pll中m,p值,c程式呼叫彙編函式 在c語言中,要extern 乙個函式宣告即可,然後這個函式在彙編裡面實現。在彙編裡面,用export 把c語言定義的函式名引進來,再開始編寫函式名開始的段 實現 c程式呼叫 ...