嵌入式系統程式設計與一般應用軟體開發截然不同,它建立在特定硬體平台之上,要求程式語言具備直接操作硬體的能力。雖然組合語言天然具備此特性,但開發複雜度極高,並非主流選擇。C語言被譽為「高級的低級語言」,完美平衡了硬體操作能力與開發效率,成為嵌入式領域的不二之選。筆者在多個嵌入式專案中深刻體會到C語言的精妙,它為嵌入式開發帶來了極大的便利。
圖1展示了本文討論的基礎硬體平台,這也是大多數嵌入式系統的通用架構,主要包含兩大核心模組:

圖1 系統硬體架構
本文重點探討協議處理模組,因其涉及更多具體C語言程式技巧;DSP程式設計側重數位訊號演算法,屬通信領域專業知識,不在本文討論範圍內。
為了討論通用的嵌入式C程式技巧,協議處理模組選擇了廣為人知的80186處理器。這款芯片字長16位,可尋址1MB記憶體空間,僅支援實位址模式。C語言編譯產生的指標為32位(雙字),高16位為段位址,低16位為段內偏移,單段最大64KB。
嵌入式目標機資源受限,無法建立龐大開發環境,因此採用宿主機-目標機分離的交叉開發模式:
本文採用的CAD-UL是適用於x86處理器的嵌入式開發環境,運行於Windows上,可生成x86目標碼並透過串口或網路下載。目標機FLASH中的Monitor程式可監控宿主機調試指令,讀取CPU暫存器、記憶體及I/O空間內容。

圖2 交叉開發環境
後續將從軟體架構、記憶體操作、螢幕操作、鍵盤操作、效能優化五大維度深入闡述嵌入式C程式技巧:
這趟修煉之旅包含25個關卡,分為技巧型(強適用性)與常識型(理論意義)兩大類。讓我們開始這段嵌入式C語言程式設計的進階之旅!