 嵌入式學習深入理解(jie) 名人許雪(xue)松專訪(fang)
							時(shi)間:2015-12-17      來(lai)源:未知
							嵌入式學習深入理解(jie) 名人許雪(xue)松專訪(fang)
							時(shi)間:2015-12-17      來(lai)源:未知 
							15歲開始接觸計(ji)算機編程(cheng)(cheng),18歲學習C/C++編程(cheng)(cheng),迄今已十(shi)(shi)多年有余,并參與(yu)大大小(xiao)小(xiao)幾十(shi)(shi)個(ge)項(xiang)目(mu)的(de)開發及維護(hu)。涉及工業自動化、嵌(qian)入式計(ji)算機以及逆變器等領域。尤其擅長(chang)RTOS,如uC/OS-II、RTEMS,翻譯(yi)RTEMS官方文檔(dang)近千頁,擅長(chang)測量電路和開關電源的(de)設(she)計(ji),現(xian)在擔任公司團隊設(she)計(ji)電池測試產(chan)品(pin)和大功率逆變器產(chan)品(pin),看看這位(wei)資深人士的(de)分享內容。
在嵌入(ru)(ru)式(shi)學習過程中(zhong),對(dui)于非常熟悉(xi)Windows這樣的操作系(xi)統(tong),但卻不一定熟悉(xi)嵌入(ru)(ru)式(shi)系(xi)統(tong)中(zhong)常用的RTOS,嵌入(ru)(ru)式(shi)和事實系(xi)統(tong)是一種(zhong)什(shen)么樣的?
嵌(qian)入式系(xi)(xi)(xi)(xi)統(tong)(tong)(tong)(tong)(tong)是為了(le)特定應(ying)用(yong)(yong)高度(du)定制的(de)(de)軟件硬(ying)(ying)件計(ji)(ji)算(suan)(suan)機(ji)系(xi)(xi)(xi)(xi)統(tong)(tong)(tong)(tong)(tong)。從廣義(yi)的(de)(de)去(qu)(qu)理解,只要被定制,都可以算(suan)(suan)作(zuo)(zuo)嵌(qian)入式系(xi)(xi)(xi)(xi)統(tong)(tong)(tong)(tong)(tong)。如今,在(zai)家(jia)用(yong)(yong)的(de)(de)x86系(xi)(xi)(xi)(xi)統(tong)(tong)(tong)(tong)(tong)上(shang),跑一個類似VxWorks、RTEMS等(deng)操(cao)(cao)作(zuo)(zuo)系(xi)(xi)(xi)(xi)統(tong)(tong)(tong)(tong)(tong),當成一個家(jia)庭網關都可算(suan)(suan)是嵌(qian)入式系(xi)(xi)(xi)(xi)統(tong)(tong)(tong)(tong)(tong)。有(you)時(shi)候(hou),同(tong)行(xing)認為真正的(de)(de)嵌(qian)入式系(xi)(xi)(xi)(xi)統(tong)(tong)(tong)(tong)(tong)硬(ying)(ying)件也(ye)必(bi)須按(an)照(zhao)應(ying)用(yong)(yong)去(qu)(qu)定制。操(cao)(cao)作(zuo)(zuo)系(xi)(xi)(xi)(xi)統(tong)(tong)(tong)(tong)(tong)就是個資(zi)源(yuan)的(de)(de)管(guan)理器。管(guan)理計(ji)(ji)算(suan)(suan)機(ji)上(shang)的(de)(de)全部資(zi)源(yuan),如CPU的(de)(de)計(ji)(ji)算(suan)(suan)時(shi)間(jian)(jian)、內(nei)存、IO等(deng)。實時(shi)操(cao)(cao)作(zuo)(zuo)系(xi)(xi)(xi)(xi)統(tong)(tong)(tong)(tong)(tong)簡單的(de)(de)說(shuo),計(ji)(ji)算(suan)(suan)結(jie)果(guo)不僅依(yi)賴于(yu)計(ji)(ji)算(suan)(suan)結(jie)果(guo)的(de)(de)正確性(xing),還(huan)依(yi)賴于(yu)結(jie)果(guo)計(ji)(ji)算(suan)(suan)完成的(de)(de)時(shi)間(jian)(jian)。
嵌(qian)入式學習過程中,對于嵌(qian)入式系(xi)統(tong)實時(shi)性要求(qiu)高,對于所有(you)滿(man)足(zu)一定的速度是否都可稱(cheng)為實時(shi)系(xi)統(tong)?
很多(duo)廠家并不需要RTOS,前后臺也能滿(man)足其需要,但他們(men)還是(shi)(shi)(shi)用(yong)了RTOS。實時(shi)操作系(xi)統的(de)高(gao)效是(shi)(shi)(shi)為嵌(qian)入式系(xi)統廣為接受的(de)一個(ge)很重要的(de)原因(yin)。高(gao)效有兩(liang)層意思(si),一是(shi)(shi)(shi)用(yong)任務可(ke)以封裝開(kai)發的(de)邏輯,使應用(yong)層代碼邏輯更(geng)(geng)加完整,減小開(kai)發難度,代碼的(de)復用(yong)程度會變高(gao);二是(shi)(shi)(shi),RTOS代碼都比(bi)較(jiao)簡潔,算(suan)法的(de)空間(jian)雜度和時(shi)間(jian)雜度都很小,能將MCU的(de)絕大部分資源都留給應用(yong)層。反過來,大量的(de)應用(yong)促使RTOS更(geng)(geng)加的(de)可(ke)靠、更(geng)(geng)加的(de)精(jing)煉,實時(shi)性也會更(geng)(geng)好。當然(ran),如(ru)醫療電子、航天電子和工業(ye)控制本身,有許多(duo)計算(suan)是(shi)(shi)(shi)依賴于時(shi)間(jian)的(de),對實時(shi)性要求(qiu)非(fei)常苛刻(ke)。
嵌入(ru)式(shi)編程相(xiang)比(bi)PC編程,具(ju)有哪(na)些(xie)復雜性?在嵌入(ru)式(shi)學(xue)習中應當如何開始和深入(ru)?
嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)開發(fa)大的(de)(de)挑戰是軟件硬(ying)件同時成(cheng)熟,出(chu)了(le)問(wen)題(ti)容易踢皮球,影(ying)響開發(fa)時間。然而,對(dui)于(yu)軟件開發(fa)者來說,大的(de)(de)問(wen)題(ti)莫過(guo)于(yu)軟件代碼的(de)(de)撰寫。PC平臺的(de)(de)封裝非常完善,應用(yong)也(ye)非常廣泛,沒有明顯(xian)的(de)(de)錯(cuo)誤(wu),極其穩定。嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)平臺幾乎沒這(zhe)樣的(de)(de)資(zi)源和(he)封裝級別,且和(he)一(yi)些寄(ji)(ji)存器相(xiang)關。這(zhe)些寄(ji)(ji)存器配置的(de)(de)順序,值都(dou)(dou)有嚴(yan)格(ge)的(de)(de)規定,嚴(yan)格(ge)按(an)照datasheet的(de)(de)要求做。嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)代碼全新(xin)開發(fa)得(de)太多,自身(shen)也(ye)有個成(cheng)熟的(de)(de)過(guo)程,也(ye)存在著(zhu)很(hen)(hen)多方面的(de)(de)問(wen)題(ti)。例如(ru):代碼的(de)(de)應用(yong)層和(he)底層耦合、應用(yong)層的(de)(de)使(shi)用(yong)不(bu)當和(he)造成(cheng)底層順序錯(cuo)誤(wu)等(deng)等(deng)。嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)調試(shi)成(cheng)本很(hen)(hen)高,調試(shi)手(shou)段相(xiang)比PC也(ye)比較單一(yi),對(dui)從業(ye)人員(yuan)的(de)(de)要求更高,這(zhe)都(dou)(dou)增加(jia)了(le)嵌(qian)(qian)入(ru)(ru)式(shi)(shi)(shi)的(de)(de)復雜性。
對(dui)(dui)于嵌入式學習來講,在(zai)嵌入式開發中,對(dui)(dui)于硬件(jian)開發平臺來講,FPGA,ARM,DSP等等,哪個更好,對(dui)(dui)于初(chu)學者(zhe)來講,想(xiang)要學習ARM開發板,該如何去選購?
FPGA和MCU是嵌入(ru)式開發的(de)(de)兩個不同領域:前者(zhe)硬(ying)件多、后(hou)者(zhe)軟件多,應(ying)用的(de)(de)行(xing)業領域和背景知識差別很(hen)大。兩者(zhe)相互(hu)不能完全替代。一般來說,FPGA相對于(yu)(yu)MCU的(de)(de)市場,較為小眾。至于(yu)(yu)DSP,它是以(yi)計(ji)算(suan)見長(chang)的(de)(de)一類MCU,并不適(shi)合跑調轉指(zhi)令太多的(de)(de)事(shi)務代碼(ma),會打斷流水線,優(you)勢體現不出來。所以(yi),DSP的(de)(de)應(ying)用和一般的(de)(de)MCU用法略有不同,比較側重計(ji)算(suan)、優(you)化。
在嵌入式(shi)學習中,嵌入式(shi)開(kai)發(fa)的(de)開(kai)發(fa)板是否一定要買?是否有比較好的(de)硬件模擬器?
可(ke)(ke)以直接在(zai)x86上做。我(wo)買過開(kai)發板,但(dan)是(shi)買了之后,就放在(zai)屋子里睡覺,因為可(ke)(ke)以直接使用x86平(ping)臺(tai)(tai)(tai)做目(mu)標(biao)平(ping)臺(tai)(tai)(tai)。虛擬平(ping)臺(tai)(tai)(tai)差異很大(da)。目(mu)前,x86是(shi)虛擬做得好的(de)平(ping)臺(tai)(tai)(tai),可(ke)(ke)以在(zai)x86上實現所有(you)的(de)驅動。ARM的(de)平(ping)臺(tai)(tai)(tai)虛擬水平(ping)也(ye)要看具體(ti)型號。我(wo)曾今參(can)加(jia)一個開(kai)源項目(mu),將RTEMS移植到QEMU mini2440上,可(ke)(ke)惜(xi)QEMU mini2440 的(de)虛擬器或多或少仍有(you)點問題,但(dan)也(ye)可(ke)(ke)以解決(jue)大(da)部分(fen)的(de)問題。可(ke)(ke)對于學習操作(zuo)系統的(de)朋(peng)友(you),去解決(jue)虛擬平(ping)臺(tai)(tai)(tai)的(de)問題,有(you)些不(bu)靠(kao)譜。所以,真心想學習的(de),就把x86當作(zuo)嵌入(ru)式平(ping)臺(tai)(tai)(tai)去寫代(dai)碼。畢(bi)竟,能比x86這種嵌入(ru)式還要復雜(za)的(de)系統,也(ye)是(shi)屈指可(ke)(ke)數的(de),其含金量毋庸(yong)置(zhi)疑。
在嵌入(ru)式學習(xi)過程中(zhong),在這些常(chang)用的嵌入(ru)式系統(tong)中(zhong),如何來更(geng)好地選擇適合自己的系統(tong)?
uC/OS,FreeRTOS、rt-thread、VxWorks、ThreadX、RTEMS、ECOS。不(bu)下上百種。在這些(xie)系統(tong)中(zhong)選(xuan)擇(ze)(ze)自己(ji)的(de)(de)系統(tong)可不(bu)是件容易的(de)(de)事情。學習的(de)(de)朋友(you),我(wo)推薦(jian)uC/OS,有相關書(shu)籍,網上的(de)(de)資源(yuan)也比較多。uC/OS僅僅是一(yi)個(ge)處理器時間(jian)的(de)(de)分配器,簡(jian)單、易學。學好(hao)了,觸類旁通,其他的(de)(de)也復(fu)雜不(bu)了多少(shao)。由(you)于商(shang)業應(ying)用比較復(fu)雜,涉及(ji)工(gong)具鏈(lian)、商(shang)業授(shou)權、維護(hu)、可靠性、易用性等問(wen)題(ti)。商(shang)業應(ying)用的(de)(de)朋友(you)我(wo)建議(yi)開源(yuan)免費的(de)(de)就選(xuan)擇(ze)(ze)發展(zhan)時間(jian)比較長的(de)(de)系統(tong),如RTEMS、ECOS這種系統(tong),或者(zhe)直(zhi)接選(xuan)擇(ze)(ze)有商(shang)業服(fu)務的(de)(de)系統(tong)。
嵌入式學習中(zhong),在眾(zhong)多實際(ji)操(cao)作系統中(zhong),你為什么(me)選擇RTEMS?現在還(huan)有開發用到(dao)RTEMS嗎?如果初學者想精通一(yi)門(men)RTOS , 應該從(cong)RTEMS開始,這種辦(ban)法可行(xing)么(me)?
RTEMS的(de)(de)內(nei)(nei)部數據(ju)結構設(she)計非(fei)常(chang)(chang)精巧(qiao),是(shi)一(yi)個(ge)(ge)知識的(de)(de)寶庫(ku)。舉個(ge)(ge)例子,在(zai)數據(ju)結構里(li)(li),雙向空鏈表插入(ru)第一(yi)個(ge)(ge)元(yuan)(yuan)素時與插入(ru)第二個(ge)(ge)元(yuan)(yuan)素操作很不一(yi)樣。在(zai)RTEMS里(li)(li),用特殊的(de)(de)技巧(qiao)使得不需要做這(zhe)種(zhong)判斷,直接插入(ru)就好。又如堆的(de)(de)管理(li)、重復(fu)釋放申(shen)請的(de)(de)指針(zhen),不會(hui)產生任何問(wen)題。而在(zai)uC/OS里(li)(li),這(zhe)是(shi)致(zhi)命的(de)(de)。雖然RTEMS是(shi)上個(ge)(ge)世紀(ji)80年代末開發的(de)(de)系(xi)統,數據(ju)結構和內(nei)(nei)部的(de)(de)組織從今天的(de)(de)角度(du)來(lai)看(kan),仍然是(shi)非(fei)常(chang)(chang)先進的(de)(de),是(shi)個(ge)(ge)含金量(liang)非(fei)常(chang)(chang)高的(de)(de)系(xi)統。
RTEMS的(de)代(dai)碼(ma)量(liang)比Linux小(xiao),又比uC/OS這種系統大幾個數量(liang)級。其開(kai)發難(nan)度和應(ying)用難(nan)度相對較(jiao)高。初學(xue)者若(ruo)是(shi)有堅實(shi)的(de)基礎,可以從RTEMS開(kai)始學(xue)習;基礎較(jiao)差朋友,若(ruo)有RTEMS的(de)熟手帶(dai),也是(shi)可以的(de)。否則不建議這樣(yang)做,會(hui)挫傷學(xue)習的(de)積極性,形成惡性循環。

