如何學(xué)STM32 嵌入式系統(tǒng)開(kāi)發(fā)詳細(xì)指導(dǎo)
一、如何學(xué)習(xí)嵌入式系統(tǒng)——著重理解“嵌入”的概念 ,主要從三個(gè)方面上來(lái)理解。
本文引用地址:http://m.butianyuan.cn/article/201808/385405.htm1、從硬件上,“嵌入”將基于CPU的處圍器件,整合到CPU芯片內(nèi)部,比如早期基于X86體系結(jié)構(gòu)下的計(jì)算機(jī),CPU只是有運(yùn)算器和累加器的功能,一切芯片要造外部橋路來(lái)擴(kuò)展實(shí)現(xiàn),象串口之類(lèi)的都是靠外部的16C550/2的串口控制器芯片實(shí)現(xiàn),而目前的這種串口控制器芯片早已集成到CPU內(nèi)部,還有PC機(jī)有顯卡,而多數(shù)嵌入式處理器都帶有LCD控制器,但其種意義上就相當(dāng)于顯卡。比較高端的ARM類(lèi)Intel Xscale架構(gòu)下的IXP網(wǎng)絡(luò)處理器CPU內(nèi)部集成PCI控制器(可配成支持4個(gè)PCI從設(shè)備或配成自身為CPI從設(shè)備);還集成3個(gè)NPE網(wǎng)絡(luò)處理器引擎,其中兩個(gè)對(duì)應(yīng)于兩個(gè)MAC地址, 可用于網(wǎng)關(guān)交換用,而另外一個(gè)NPE網(wǎng)絡(luò)處理器引擎支持DSL,只要外面再加個(gè)PHY芯片即可以實(shí)現(xiàn)DSL上網(wǎng)功能。IXP系列最高主頻可以達(dá)到 1.8G,支持2G內(nèi)存,1G×10或10G×1的以太網(wǎng)口或Febre channel的光通道。IXP系列應(yīng)該是目標(biāo)基于ARM體系統(tǒng)結(jié)構(gòu)下由 intel進(jìn)行整合后成Xscale內(nèi)核的最高的處理器了。
2、從軟件上前,嵌入就是在定制操作系統(tǒng)內(nèi)核里將應(yīng)用一并選入,編譯后將內(nèi)核下載到ROM中。而在定制操作系統(tǒng)內(nèi)核時(shí)所選擇的應(yīng)用程序組 件就是完成了軟件的“嵌入”,比如WinCE在內(nèi)核定制時(shí),會(huì)有相應(yīng)選擇,其中就是wordpad,PDF,MediaPlay等等選擇,如果我們選擇 了,在CE啟動(dòng)后,就可以在界面中找到這些東西,如果是以前PC上將的windows操作系統(tǒng),多半的東西都需要我們得新再裝。
3、把軟件內(nèi)核或應(yīng)用文件系統(tǒng)等東西燒到嵌入式系統(tǒng)硬件平臺(tái)中的ROM中就實(shí)現(xiàn)了一個(gè)真正的“嵌入”。
以上的定義是我在6、7年前給嵌入式系統(tǒng)下自話側(cè)重于理解型的定義,書(shū)上的定義也有很多,但在“嵌入式”這個(gè)領(lǐng)域范圍內(nèi),誰(shuí)都不敢說(shuō)自己的定義是十分確切的,包括那些專(zhuān)家學(xué)者們,歷為畢竟嵌入式系統(tǒng)是計(jì)算機(jī)范疇下的一門(mén)綜合性學(xué)科
二、如何學(xué)習(xí)嵌入式系統(tǒng)- -嵌入式系統(tǒng)的分層與專(zhuān)業(yè)的分類(lèi)。
嵌入式系統(tǒng)分為4層,硬件層、驅(qū)動(dòng)層、操作系統(tǒng)層和應(yīng)用層。
1、硬件層,是整個(gè)嵌入式系統(tǒng)的根本,如果現(xiàn)在單片機(jī)及接口這塊很熟悉,并且能用C和匯編語(yǔ)言來(lái)編程的話,從嵌入式系統(tǒng)的硬件層走起來(lái)相對(duì)容易,硬件層也是驅(qū)動(dòng)層的基礎(chǔ),一個(gè)優(yōu)秀的驅(qū)動(dòng)工程師是要能夠看懂硬件的電路圖和自行完成CPLD的邏輯設(shè)計(jì)的,同時(shí)還要對(duì)操作系統(tǒng)內(nèi)核及其調(diào)度性相當(dāng)?shù)氖煜さ?。但硬件平臺(tái)是基礎(chǔ),增值還要靠軟件。
硬件層比較適合于,電子、通信、自動(dòng)化、機(jī)電一體、信息工程類(lèi)專(zhuān)業(yè)的人來(lái)搞,需要掌握的專(zhuān)業(yè)基礎(chǔ)知識(shí)有,單片機(jī)原理及接口_技術(shù)、微機(jī)原理及接口_技術(shù)、C語(yǔ)言。
2、 驅(qū)動(dòng)層,這部分比較難,驅(qū)動(dòng)工程師不僅要能看懂電路圖還要能對(duì)操作系統(tǒng)內(nèi)核十分的精通,以便其所寫(xiě)的驅(qū)動(dòng)程序在系統(tǒng)調(diào)用時(shí),不會(huì)獨(dú)占操作系統(tǒng)時(shí)間片,而導(dǎo) 至其它任務(wù)不能動(dòng)行,不懂操作系統(tǒng)內(nèi)核架構(gòu)和實(shí)時(shí)調(diào)度性,沒(méi)有良好的驅(qū)動(dòng)編寫(xiě)風(fēng)格,按大多數(shù)書(shū)上所說(shuō)添加的驅(qū)動(dòng)的方式,很多人都能做到,但可能連個(gè)初級(jí)的 驅(qū)動(dòng)工程師的水平都達(dá)不到,這樣所寫(xiě)的驅(qū)動(dòng)在應(yīng)用調(diào)用時(shí)就如同windows下我們打開(kāi)一個(gè)程序運(yùn)行后,再打開(kāi)一個(gè)程序時(shí),要不就是中斷以前的程序,要不 就是等上一會(huì)才能運(yùn)行后來(lái)打開(kāi)的程序。想做個(gè)好的驅(qū)動(dòng)人員沒(méi)有三、四年功底,操作系統(tǒng)內(nèi)核不研究上幾編,不是太容易成功的,但其工資在嵌入式系統(tǒng)四層中可 是最高的。
嵌入式的驅(qū)動(dòng)層比較適合于電子、通信、自動(dòng)化、機(jī)電一體、信息工程類(lèi)專(zhuān)業(yè)尤其是計(jì)算機(jī)偏體系結(jié)構(gòu)類(lèi)專(zhuān)業(yè)的人來(lái)搞,除硬件層所具備的基礎(chǔ)學(xué)科外,還要對(duì)數(shù)據(jù)結(jié)構(gòu)與算法、操作系統(tǒng)原理、編譯原理都要十分精通了解。
3、操作系統(tǒng)層,對(duì)于操作系統(tǒng)層目前可能只能說(shuō)是簡(jiǎn)單的移植,而很少有人來(lái)自已寫(xiě)操作系統(tǒng),或者寫(xiě)出缺胳膊少腿的操作系統(tǒng)來(lái),這部分工作大都由驅(qū)動(dòng)工程師來(lái)完成。操作系統(tǒng)是負(fù)責(zé)系統(tǒng)任務(wù)的調(diào)試、磁盤(pán)和文件的管理,而嵌入式系統(tǒng)的實(shí)時(shí)性十分重要。據(jù)說(shuō),XP操作系統(tǒng)是微軟投入300人用兩年時(shí)間才搞定的,總時(shí)工時(shí)是600人年,中科院軟件所自己的女?huà)zHopen操作系統(tǒng)估計(jì)也得花遇幾百人年才能搞定。因此這部分工作相對(duì)來(lái)講沒(méi)有太大意義。
4、應(yīng)用層,相對(duì)來(lái)講較為容易的,如果會(huì)在windows下如何進(jìn)行編程接口函數(shù)調(diào)用,到操作系統(tǒng)下只是編譯和開(kāi)發(fā)環(huán) 境有相應(yīng)的變化而已。如果涉及Jave方面的編程也是如此的。嵌入式系統(tǒng)中涉及算法的由專(zhuān)業(yè)算法的人來(lái)處理的,不必歸結(jié)到嵌入式系統(tǒng)范疇內(nèi)。但如果涉及嵌 入式系統(tǒng)下面嵌入式數(shù)據(jù)庫(kù)、基于嵌入式系統(tǒng)的網(wǎng)絡(luò)編程和基于某此應(yīng)用層面的協(xié)議應(yīng)用開(kāi)發(fā)(比如基于SIP、H.323、Astrisk)方面又較為復(fù)雜, 并且有難度了。
三、如何學(xué)習(xí)嵌入式系統(tǒng)- -目標(biāo)與定位。
先有目標(biāo),再去定位。
學(xué) ARM,從硬件上講,一方面就是學(xué)習(xí)接口電路設(shè)計(jì),另一方面就是學(xué)習(xí)匯編和C語(yǔ)言的板級(jí)編程。如果從軟件上講,就是要學(xué)習(xí)基于ARM處理器的操作系統(tǒng)層面 的驅(qū)動(dòng)、移植了。這些對(duì)于初學(xué)都來(lái)說(shuō)必須明確,要么從硬件著手開(kāi)始學(xué),要么從操作系統(tǒng)的熟悉到應(yīng)用開(kāi)始學(xué),但不管學(xué)什么,只要不是純的操作系統(tǒng)級(jí)以上基于 API的應(yīng)用層的編程,硬件的寄存器類(lèi)的東西還是要能看懂的,基于板級(jí)的匯編和C編程還是要會(huì)的。因此針對(duì)于嵌入式系統(tǒng)的硬件層和驅(qū)動(dòng)程的人,ARM的接 口電路設(shè)計(jì)、ARM的C語(yǔ)言和匯編語(yǔ)言編程及調(diào)試開(kāi)發(fā)環(huán)境還是需要掌握的。
因此對(duì)于初學(xué)者必然要把握住方向,自己學(xué)習(xí)嵌入式系統(tǒng)的目標(biāo)是什么,自己要在那一層面上走。然后再著手學(xué)習(xí)較好,與ARM相關(guān)的嵌入式系統(tǒng)的較為實(shí)際的兩個(gè)層面硬件層和驅(qū)動(dòng)層,不管學(xué)好了那一層都會(huì)很有前途的。
如果想從嵌入式系統(tǒng)的應(yīng)用層面的走的話,可能與ARM及其它體系相去較遠(yuǎn),要著重研究基嵌入式操作系統(tǒng)的環(huán)境應(yīng)用與相應(yīng)開(kāi)發(fā)工具鏈,比如WinCe操作系統(tǒng)下的EVC應(yīng)用開(kāi)發(fā)(與windows下的VC相類(lèi)似),如果想再有突破就往某些音視頻類(lèi)的協(xié)議上靠,比如VOIP領(lǐng)域的基于SIP或H.323協(xié)議的應(yīng)用層開(kāi)發(fā),或是基于嵌入式網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的開(kāi)發(fā)等等。
對(duì) 于初學(xué)者來(lái)講,要量力而行,不要認(rèn)為驅(qū)動(dòng)層工資高就把它當(dāng)成方向了,要結(jié)合自身特點(diǎn),嵌入式系統(tǒng)四個(gè)層面上那個(gè)層面上來(lái)講都是有高人存在,當(dāng)然高人也對(duì)應(yīng) 的高工資,我是做硬件層的,以前每月工資中個(gè)人所得稅要被扣上近3千大元,當(dāng)然我一方面充當(dāng)工程師的角色,一方面充當(dāng)主管及人物的角色,兩個(gè)職位我一個(gè)人 干,但上班時(shí)間就那些。硬件這方面上可能與我PK的人很少了,才讓我拿到那么多的工資。
四、如何學(xué)習(xí)嵌入式系統(tǒng)- -開(kāi)發(fā)系統(tǒng)選擇。
很 多ARM初學(xué)者都希望有一套自己能用的系統(tǒng),但他們住住會(huì)產(chǎn)生一種錯(cuò)誤認(rèn)識(shí)就是認(rèn)為處理器版本越高、性能越高越好,就象很多人認(rèn)為ARM9與ARM7好, 我想對(duì)于初學(xué)者在此方面以此入門(mén)還應(yīng)該理智,開(kāi)發(fā)系統(tǒng)的選擇最終要看自己往嵌入式系統(tǒng)的那個(gè)方向上走,是做驅(qū)動(dòng)開(kāi)發(fā)還是應(yīng)用,還是做嵌入式系統(tǒng)硬件層設(shè)計(jì) 與板級(jí)測(cè)試。如果想從操作系統(tǒng)層面或應(yīng)用層面上走,不管是驅(qū)動(dòng)還是應(yīng)用,那當(dāng)然處理器性能越高越好了,但嵌入式系統(tǒng)這個(gè)東西自學(xué),有十分大的困難,不是幾個(gè)月或半年 或是一年二年能搞定的事。
在某種意義上請(qǐng),ARM7與9的差別就是在某些功能指令集上豐富了些,主頻提高一些而已,就比如286和386。對(duì)于用戶來(lái)講可能覺(jué)查不到什么,只能是感覺(jué)速度有些快而已。
ARM7比較適合于那些想從硬件層面上走的人,因?yàn)锳RM7系列處理器內(nèi)部帶MMU的很少,而且比較好控制,就比如S3C44B0來(lái)講,可以很容易將 Cache關(guān)了,而且內(nèi)部接口寄存器很容易看明白,各種接口對(duì)于用硬件程序控制或AXD單步命令行指令都可以控制起來(lái),基于51單片機(jī)的思想很容易能把他 搞懂,就當(dāng)成個(gè)32位的單片機(jī),從而消除很多51工程師想轉(zhuǎn)為嵌入式系統(tǒng)硬件ARM開(kāi)發(fā)工程師的困惑,從而不會(huì)被業(yè)界某此不是真正懂嵌入式爛公司帶到操作 系統(tǒng)層面上去,讓他們望而失畏,讓業(yè)界更加缺少這方面的人才。
而嵌入式系統(tǒng)不管硬件設(shè)計(jì)還是軟件驅(qū)動(dòng)方面都是十分注重接口這部分的,選擇平臺(tái)還要考察一個(gè)處理器的外部資源,你接觸外部資源越多,越熟悉他們那你以后就業(yè)成功的機(jī)率就越高,這就是招聘時(shí) 所說(shuō)的有無(wú)“相關(guān)技能”,因?yàn)橐粋€(gè)人不可能在短短幾年內(nèi)把所有的處理器都接觸一遍,而招聘單位所用的處理器就可能是我們完全沒(méi)有見(jiàn)過(guò)的,就拿臺(tái)灣數(shù)十家小 公司(市價(jià)幾千萬(wàn))的公司生產(chǎn)的ARM類(lèi)處理器,也很好用,但這些東西通用性太差,用這些處理器的公司就只能招有相關(guān)工作經(jīng)驗(yàn)的人了,那什么是相關(guān)工作經(jīng) 驗(yàn),在硬件上講的是外圍接口設(shè)計(jì),在軟件上講是操作系統(tǒng)方面相關(guān)接口驅(qū)動(dòng)及應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。我從業(yè)近十年,2000年ARM出現(xiàn),我一天始做ARM7,然后 直接跑到了Xscale(這個(gè)板本在ARM10-11之間),一做就是五年,招人面試都不下數(shù)百人,在這些方面還是深有體會(huì)的。
我個(gè)人認(rèn)為三星的S3C44b0對(duì)初學(xué)者來(lái)說(shuō)比較合適,為什么這么說(shuō)哪?因?yàn)榻涌谫Y源比較豐富,技術(shù)成熟,資料較多,應(yīng)該十分適合于初學(xué)者,有問(wèn)題可能很容易找人幫且解決,因?yàn)榇蠖鄶?shù)人都很熟悉,就如同51類(lèi)的單片機(jī),有N多位專(zhuān)家級(jí)的人物可以給你幫忙,相關(guān)問(wèn)題得以很快解答,所然業(yè)界認(rèn)為這款A(yù)RM都做用得爛了,但對(duì)于初學(xué)者來(lái),就卻是件好事。
因此開(kāi)發(fā)系統(tǒng)的選擇,要看自己的未來(lái)從來(lái)目標(biāo)方向、要看開(kāi)發(fā)板接口資源、還要看業(yè)界的通用性。
五、如何學(xué)習(xí)嵌入式系統(tǒng)- -成為高級(jí)嵌入式系統(tǒng)硬件工程師要具備的技能。
對(duì)于硬件來(lái)講有幾個(gè)方向,就單純信號(hào)來(lái)分為數(shù)字和模擬,模擬比較難搞,一般需要很長(zhǎng)的經(jīng)驗(yàn)積累,單單一個(gè)阻值或容值的精度不夠就可能使信號(hào)偏差很大。因此年輕人搞的較少,隨著技術(shù)的發(fā)展,出現(xiàn)了模擬電路數(shù)字化,比如手機(jī)的Modem射頻模塊,都采用成熟的套片,而當(dāng)年國(guó)際上只有兩家公司有此技術(shù),自我感覺(jué)模擬功能不太強(qiáng)的人,不太適合搞這個(gè),如果真能搞定到手機(jī)的射頻模塊,只要達(dá)到一般程度可能月薪都在15K以上。
另一類(lèi)就是數(shù)字部分了,在大方向上又可分為51/ARM的單片機(jī)類(lèi),DSP類(lèi),F(xiàn)PGA類(lèi), 國(guó)內(nèi)FPGA的工程師大多是在IC設(shè)計(jì)公司從事IP核的前端驗(yàn)證,這部分不搞到門(mén)級(jí),前途不太明朗,即使做個(gè)IC前端驗(yàn)證工程師,也要搞上幾年才能勝任。 DSP硬件接口比較定型,如果不向驅(qū)動(dòng)或是算法上靠攏,前途也不會(huì)太大。而ARM單片機(jī)類(lèi)的內(nèi)容就較多,業(yè)界產(chǎn)品占用量大,應(yīng)用人群廣,因此就業(yè)空間極 大,而硬件設(shè)計(jì)最體現(xiàn)水平和水準(zhǔn)的就是接口設(shè)計(jì)這塊,這是各個(gè)高級(jí)硬件工程師相互PK,判定水平高低的依據(jù)。而接口設(shè)計(jì)這塊最關(guān)鍵的是看時(shí)序,而不是簡(jiǎn)單 的連接,比如PXA255處理器I2C要求速度在100Kbps,如果把一個(gè)I2C外圍器件,最高還達(dá)不到100kbps的與它相接,必然要導(dǎo)致設(shè)計(jì)的失 敗。這樣的情況有很多,比如51單片機(jī)可以在總線接 LCD,但為什么這種LCD就不能掛在ARM的總線上,還有ARM7總線上可以外接個(gè)Winband的SD卡控制器,但為什么這種控制器接不到ARM9或 是Xscale處理器上,這些都是問(wèn)題。因此接口并不是一種簡(jiǎn)單的連接,要看時(shí)序,要看參數(shù)。 一個(gè)優(yōu)秀的硬件工程師應(yīng)該能夠在沒(méi)有參考方案的前提下設(shè)計(jì) 出一個(gè)在成本和性能上更加優(yōu)秀的產(chǎn)品,靠現(xiàn)有的方案,也要進(jìn)行適當(dāng)?shù)目尚行圆眉?,但不是胡亂的來(lái),我遇到一個(gè)工程師把方案中的5V變1.8V的DC芯片, 直接更換成LDO,有時(shí)就會(huì)把CPU燒上幾個(gè)。前幾天還有人希望我?guī)兔Π阉麄円郧盎赑XA255平臺(tái)的手持GPS設(shè)備做下程序優(yōu)化,我問(wèn)了一下情況,地 圖是存在SD卡中的,而SD卡與PXA255的MMC控制器間采用的SPI接口,因此導(dǎo)致地圖讀取速度十分的慢,這種情況是設(shè)計(jì)中嚴(yán)重的缺陷,而不是程序 的問(wèn)題,因此我提了幾條建議,讓他們更新試下再說(shuō)。因此想成為一個(gè)優(yōu)秀的工程師,需要對(duì)系統(tǒng)整體性的把握和對(duì)已有電路的理解,換句話說(shuō),給你一套電路圖你 終究能看明白多少,看不明白80%以上的話,說(shuō)明你離優(yōu)秀的工程師還差得遠(yuǎn)哪。其次是電路的調(diào)試能力和審圖能力,但最最基本的能力還是原理圖設(shè)計(jì)PCB繪 制,邏輯設(shè)計(jì)這塊。這是指的硬件設(shè)計(jì)工程師,從上面的硬件設(shè)計(jì)工程師中還可以分出ECAD工程師,就是專(zhuān)業(yè)的畫(huà)PCB板的工程師,和EMC設(shè)計(jì)工程師,幫 人家解決EMC的問(wèn)題。硬件工程師再往上就是板級(jí)測(cè)試工程師,就是C語(yǔ)功底很好的硬件工程師,在電路板調(diào)試過(guò)程中能通過(guò)自已編寫(xiě)的測(cè)試程序?qū)τ布δ苓M(jìn)行 驗(yàn)證。然后再交給基于操作系統(tǒng)級(jí)的驅(qū)動(dòng)開(kāi)發(fā)人員。
總之,硬件的內(nèi)容很多很雜,硬件那方面練成了都會(huì)成為一個(gè)高手,我時(shí)常會(huì)給人家做下方案評(píng)估,很多高級(jí)硬件工程師設(shè)計(jì)的東西,經(jīng)常被我一句話否定,因此工程師做到我這種地步,也會(huì)得罪些人,但硬件的確會(huì)有很多不為人知的東西,讓很多高級(jí)硬件工程師也摸不到頭腦。
那么高級(jí)硬件件工程師技術(shù)技能都要具備那些東西哪,首先要掌握EDA設(shè)計(jì)的輔助工具類(lèi)如ProtelORCADPowperPCBMaplux2ISE、 VDHL語(yǔ)言,要能用到這些工具畫(huà)圖畫(huà)板做邏輯設(shè)計(jì),再有就是接口設(shè)計(jì)審圖能力,再者就是調(diào)試能力,如果能走到總體方案設(shè)計(jì)這塊,那就基本上快成為資深工 程師了。
硬件是要靠經(jīng)驗(yàn),也要靠積累的,十年磨一劍,百年磨一針。
評(píng)論