嵌入式學習(二) 嵌入式系統C 語言

2021-09-24 03:47:20 字數 1956 閱讀 5191

(1)從 cpu 復位時的指定位址開始執行

(2)跳轉至彙編** startup 處執行;

(3)跳轉至使用者主程式 main 執行,在 main 中完成:

a.初試化各硬體裝置;

b.初始化各軟體模組;

c.進入死迴圈(無限迴圈)

d呼叫各模組的處理函式

下面是幾個"著名"的死迴圈:

(1)作業系統是死迴圈;

(2)win32 程式是死迴圈;

(3)嵌入式系統軟體是死迴圈;

(4)多執行緒程式的執行緒處理函式是死迴圈

中斷是嵌入式系統中重要的組成部分,但是在標準 c 中不包含中斷。許多編譯開發商在標準 c 上增加了對中斷的支援,提供新的關鍵字用於標示中斷服務程式 (isr),類似於__interrupt、#program interrupt 等。當乙個函式被定義為 isr 的時候,編譯器會自動為該函式增加中斷服務程式所需要的中斷現場入棧和出棧**。中斷服務程式需要滿足如下要求:

(1)不能返回值;

(2)不能向 isr 傳遞引數;

(3) isr 應該盡可能的短小精悍;

(4) printf(char * lpformatstring,…)函式會帶來重入和效能問題,不能在 isr 中採

用。硬體驅動模組通常應包括如下函式:

(3)設定 cpu 針對該硬體的控制線

(4)提供一系列針對該裝置的操作介面函式。

在物件導向的語言裡面,出現了類的概念。類是對特定資料的特定操作的集合體。類包含了兩個範疇:資料和操作。而 c 語言中的 struct 僅僅是資料的集合,我們可以利用函式指標將 struct 模擬為乙個包含資料和操作的"類"。

資料指標

在嵌入式系統的程式設計中,常常要求在特定的記憶體單元讀寫內容,彙編有對應的 mov指令,而除 c/c++以外的其它程式語言基本沒有直接訪問絕對位址的能力。在嵌入式系統的實際除錯中,多借助 c 語言指標所具有的對絕對位址單元內容的讀寫能力。以指標直接操作記憶體多發生在如下幾種情況:

函式指標

首先要理解以下三個問題:

(1)c 語言中函式名直接對應於函式生成的指令**在記憶體中的位址,因此函式名可以直接賦給指向函式的指標;

(2)呼叫函式實際上等同於"調轉指令+引數傳遞處理+回歸位置入棧",本質上最核心的操作是將函式生成的目標**的首位址賦給 cpu 的 pc 暫存器;

(3)因為函式呼叫的本質是跳轉到某乙個位址單元的 code 去執行,所以可以"呼叫"乙個根本就不存在的函式實體

陣列嵌入式系統中動態記憶體申請存在比一般系統程式設計時更嚴格的要求,這是因為嵌入式系統的記憶體空間往往是十分有限的,不經意的記憶體洩露會很快導致系統的崩潰。給出原則:

關鍵字 const

(1)關鍵字 const 的作用是為給讀你**的人傳達非常有用的資訊。例如,在函式的形參前新增 const 關鍵字意味著這個引數在函式體內不會被修改,屬於"輸入引數"。在有多個形參的時候,函式的呼叫者可以憑藉引數前是否有 const 關鍵字,清晰的辨別哪些是輸入引數,哪些是可能的輸出引數。

(2)合理地使用關鍵字 const 可以使編譯器很自然地保護那些不希望被改變的引數,防止其被無意的**修改,這樣可以減少 bug 的出現

關鍵字 volatile

volatile是乙個型別修飾符(type specifier).volatile的作用是作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值。

使用暫存器變數

當對乙個變數頻繁被讀寫時,需要反覆訪問記憶體,從而花費大量的訪問時間。為此,c 語言提供了一種變數,即暫存器變數。這種變數存放在 cpu 的暫存器中,使用時,不需要訪問記憶體,而直接從暫存器中讀寫,從而提高效率。暫存器變數的說明符是 register。對於迴圈次數較多的迴圈控制變數及迴圈體內反覆使用的變數均可定義為暫存器變數,而迴圈計數是應用暫存器變數的最好候選者。

硬體特性

首先要明白 cpu 對各種儲存器的訪問速度,基本上是:

cpu 內部 ram >外部同步 ram> 外部非同步 ram >flash/rom

嵌入式學習(三)嵌入式系統匯流排

pci peripheral component interconnect 1 支援 10 臺外設 2 匯流排時鐘頻率 33.3mhz 66mhz 3 最大資料傳輸速率 133mb s 4 時鐘同步方式 5 與 cpu 及時鐘頻率無關 6 匯流排寬度 32 位 5v 64 位 3.3v 7 能自動識...

嵌入式系統

嵌入式開發的相關領域 搞嵌入式若能熟悉嵌入式應用的一些主要領域,這樣的人更受企業歡迎。主要的相關 領域包括 a 數字影象壓縮技術 這是嵌入式最重要最熱門的應用領域之一,主要是應掌握mpeg 編譯碼演算法和技術,如 pda 高精電視 機頂盒等都涉及mpeg高速解碼問 題。b 通訊協議及程式設計技術 這...

嵌入式系統

嵌入式系統就是計算機系統的一類,就是被塞進其他裝置的計算機作業系統。我的嵌入式老師只用了三個詞語就總結了嵌入式系統的精髓 專用的可裁剪的 計算機系統。包括嵌入式軟體開發的知識體系和背景 先說背景 計算機,領域內,知識體系,按層次分,可以分為 其中 此處,暫且不討論上層的純軟體,以及底層的硬體,只是簡...