這是arm裸機1期加強版第1課第2節(jié)課程的wiki文字版。
為什么沒前途也要學習單片機?
因為它是個很好的入口。
學習單片機可以讓我們拋開復雜的軟件結(jié)構,先掌握硬件操作,如:看原理圖、芯片手冊、寫程序操作寄存器等。在上一節(jié)視頻里,我剛把單片機貶得一無是處,說單片機沒前途了,這節(jié)視頻,我又要告訴你們,沒有前途,也要學習單片機。為什么?
首先,我說不用學習單片機,是指不要使用老一套得學習方法學習單片機。什么叫老一套的方法?
· 硬件上:不要使用C51、STM32這些專用的單片機開發(fā)板。如果以后,你不打算從事單片機開發(fā),你用這些芯片干嘛,研究了兩三個月,把這些寄存器都用清楚了,你又用不上,沒必要啊。
· 軟件上:不要使用Keil、MDK等集成度太高的軟件。你用這些軟件,你寫個main()就可以了,然后調(diào)用各種庫,進行傻瓜式操作。這些好用的工具,封裝了很多技術細節(jié),使得我們沒法了解裸機、單片機的本質(zhì)。
以后我們會使用新一套的方法來進行單片機的開發(fā)。新一套的方法,我們后面再介紹。
我們之所以還要學習單片機,是因為它里面的知識,對我們后續(xù)學習Linux還是有用的。我們首先來看看,一個Linux系統(tǒng)是怎么一回事。 一個嵌入式Linux系統(tǒng)的軟件組成:單片機大全Bootloader–>Linux驅(qū)動–>Linux APP–>Linux GUI(Android/QT)。我們PC機一上電的時候,黑色屏幕上會顯示BIOS,這個BIOS目的是去啟動Windows內(nèi)核。Windows內(nèi)核再掛載C盤(系統(tǒng)盤)、D盤(應用盤),最后再去啟動應用程序,像QQ、網(wǎng)游等。 同樣的道理,我們的Android手機或者工控設備,也有BIOS,但嵌入式Linux系統(tǒng)里面不叫BIOS,叫Bootloader,他的目的是去啟動Linux內(nèi)核。 它首先也是識別應用程序所在的存儲設備,掛載根文件系統(tǒng)(在Windows系統(tǒng)里面的C盤、D盤,在Linux里面稱為根文件系統(tǒng))。最后去啟動應用程序。
仔細的分析下Bootloader,它去啟動內(nèi)核,它去哪里啟動內(nèi)核呢? 顯然是去某個地方讀出內(nèi)核,就比如說BIOS是去C盤上讀出Windows內(nèi)核,我們的Bootloader是去Flash或者SD卡讀取內(nèi)核。因此Bootloader要擁有讀取Flash或者SD卡的能力。有些Bootloader還要顯示logo,因此還要具有操作LCD的能力。Bootloader還要設置開發(fā)板的環(huán)境,比如,初始化時鐘、初始化內(nèi)存、還要設置網(wǎng)卡等。這么多事情,都是在Bootloader里面實現(xiàn)的,太復雜了,如果你一來就分析整個Bootloader是非常困難的。
那我們怎么學習呢? 把他拆開,寫出單獨的程序,比如:LED點燈、時鐘、網(wǎng)卡、Flash都單獨寫個程序來練習,這些不就是單片機程序嗎?所以說,Bootloader是單片機程序的大全。我們?yōu)榱烁玫膶W習Bootloader,我們應該事先一個一個練習硬件,當我們熟悉每個硬件后,再組合起來,就是一個Bootloader。
我們再來看看Bootloader啟動內(nèi)核之后,內(nèi)核再去掛載根文件系統(tǒng),意味著內(nèi)核也要有操作硬件的能力,這就是驅(qū)動程序。我們首先來看看一個簡單的驅(qū)動程序是什么樣子。首先我們的應用程序是調(diào)用open()、read()、write()這些標準的接口去訪問硬件。那么就進入驅(qū)動程序里面,驅(qū)動程序里面有對應的drive_open()、drive_read()、drive_write()。最后在驅(qū)動程序里面,去配置硬件。比如一個LED點燈驅(qū)動,那么drive_open()要把GPIO設置為輸出引腳,drive_read(),返回GPIO狀態(tài),driver_write()則寫GPIO,讓引腳輸出高電平或者低電平。
對于我們的LED驅(qū)動程序,你需要提供drive_open()、drive_read()、drive_write()這些接口,這就是它的框架。具體的怎么操作硬件,就是硬件操作。所以說,我們事先在單片機里面,熟悉熟練的掌握硬件操作。即驅(qū)動程序的組成:
驅(qū)動程序=軟件框架+硬件操作
你需要學會看原理圖、看硬件怎么連接、看芯片手冊、知道怎么讀寫寄存器。這一切都可以先在單片機里面學習,去掌握。以后學習Linux驅(qū)動時,把重點放在軟件框架就行了。
我們可以事先學習單片機,單片機的學習可以讓我們先拋開復雜的軟件結(jié)構,先掌握硬件的操作,如:看原理圖、芯片手冊、寫程序操作寄存器等。這就是為什么單片機沒有前途,我們也要學習。是因為他里面涉及的硬件操作,對我們后續(xù)的學習,非常有用處。
現(xiàn)在我們知道了,我們學習單片機,不是為了掌握單片機的開發(fā)技能,而是為了掌握Bootloader,掌握硬件操作。
原帖轉(zhuǎn)自:http://bbs.elecfans.com/jishu_1544437_1_1.html
-
單片機
+關注
關注
6040文章
44592瀏覽量
636809 -
Linux
+關注
關注
87文章
11325瀏覽量
209953 -
驅(qū)動開發(fā)
+關注
關注
0文章
130瀏覽量
12090
發(fā)布評論請先 登錄
相關推薦
評論