1. 程式人生 > >我對嵌入式底層開發學習的一點看法

我對嵌入式底層開發學習的一點看法

不知不覺中,學習嵌入式已經有差不多兩年的時間了,從大二的時候開始學習 DSP ,現到開始接觸 ARM9 ,有很大的感觸,所以寫出來,讓大家進行指正,首先說明,這些只是個人學習中的看法,如果你,我親愛的讀者,我的看法與你的不同,那麼請把你的看法分享出來。讓本人也進行一下學習。

在老師的要求下。把 51 微控制器著為入門嵌入式的接觸 MCU ,現在想起來,老師做得很對,因為他當時要求我在兩個月的時間內把 51 開發闆闆上的介面驅動都寫出來,但是,不要求我把 51 搞太長的時間。只要知道怎麼進行控制外設,但是有一點。 UART IIC SPI 等常見的驅動程式設計必須瞭解其真正的原理。這為後來的學習打下了強有力的基礎。

在大二的暑假,由於專案的關係,開始接觸 TMS320F2812 DSP ,老師沒有說什麼,給我一本 2812 晶片手冊,再給一個模擬器,一個開發板,就讓我在一天之內完成一個 LED 點陣進行顯示漢字。還好,看了一天的晶片手冊,在晚上的時候把 GPIO 看了一下,加上在 51 的時候也寫過數碼管的實驗,所以,不一會兒就寫出來。之後的所有的介面驅動都是一邊看手冊一邊寫驅動。由於 DSP 更偏重於演算法。對 LCD 的支援不太好,所以不得不又得了解一下 ARM

在學習 ARM 的過程中,我個人認為最重要幾章應該是前 10 章,加上後面的中斷控制這一章,這幾章才是 ARM 體系結構的重點,看一下開發板的起動程式,特別對

MMU 的重定向不是那麼簡單,小弟不才,到現在還不敢自己動手寫起啟動程式。後面的介面驅動程式與其它的 MCU 的差不多,就只是暫存器的配置不同罷了。

眼下 Linux WCE 這兩個作業系統在嵌入比較熱,所以有很多初學者都只去進行學習基於作業系統的驅動程式開發,其實,以其說那叫驅動程式開發,還不如是呼叫驅動程式模組功能函式開發。因為作業系統中已經對很多的介面驅動進行了模組化,所以,只需進行相應的呼叫與註冊,管理就可以實現對硬體的控制,可是,各位有沒有想過,你真正的操作硬體還是別人給你遮蔽了硬體。

所以,個人認為,如果想真正的瞭解驅動程式的實現過程。還是基於裸機的驅動程式更加好,因為這樣可以讓你真正的知道某個介面是怎麼進行驅動的,這樣對個人的能力的修行應該更加為重要,因為學嘛,總得自己的能力提高。不要搞到最後沒有作業系統就不知道怎麼寫一個驅動程式。這意味著什麼呢。在論壇上經常見到尋找

Linux 核心 API 的問題,如果真正的動手開發過裸機的驅動程式,直接到核心裡的相應位置去看 .H ,或者 .C 檔案,這樣不就知道作業系統提供給我們的介面函數了嘛。還能更加清楚各個引數的約束條件。

當然,如果是產品化的驅動程式,還是基於操作系的驅動更好,因為作業系統模組化的驅動程式都是經過嚴格的測試的,經典的程式,這樣對產品的開發週期與產品的穩定性可以得到保證。

不管什麼方向,牛人都是從基礎一步一步的走出來的,因為他們對每一個介面驅動都瞭解,所以,他們寫出來的基於作業系統的驅動程式,那是一件藝術品,是經過效率考慮後的成品。不真正瞭解介面驅動實現的人寫出來的基於作業系統的驅動程式,那是程式碼的堆砌,形似而神非。對於嵌入式這一個特殊行業,需要的是神真而非形似,這就是底層驅動程式的特別之處。

所以,對於初學者來說,特別向我這樣的初學者,在實驗過程中最好先寫基於裸機的驅動程式,再去看看別人寫的,對照一下,這樣對個人的能力提高有很大的幫助。當裸機驅動程式達到令自己滿意後,再去寫基於作業系統的驅動程式,這樣你會對這一介面驅動有一個質的提高而非好像懂了,其實什麼也不懂。

其實 ,uC/OS-II 是一個最不錯的學習系統,因為其只提供我們核心的排程,所以,要想真正的瞭解核心排程,多工的實現過程等, uC/OS-II 是一個不錯的選擇,雖然 ARM9 以上的 CPU uC/OS-II 有點浪費資源,但是對學習來說,這是一個很好的作業系統,因為每一個介面的驅動程式都得自己動手一個位元組一個位元組的寫入,同時訊號量的控制,多工的建立,同步非同步機制,死鎖等問題都得自己去思考。

好了,說了這麼多,也不知道自己說得對不對,對與不對,請給予指正。