當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 行業(yè)百科 > 嵌入式學(xué)習(xí)深入理解 名人許雪松專訪
15歲開始接觸計(jì)算機(jī)編程,18歲學(xué)習(xí)C/C++編程,迄今已十多年有余,并參與大大小小幾十個(gè)項(xiàng)目的開發(fā)及維護(hù)。涉及工業(yè)自動(dòng)化、嵌入式計(jì)算機(jī)以及逆變器等領(lǐng)域。尤其擅長(zhǎng)RTOS,如uC/OS-II、RTEMS,翻譯RTEMS官方文檔近千頁(yè),擅長(zhǎng)測(cè)量電路和開關(guān)電源的設(shè)計(jì),現(xiàn)在擔(dān)任公司團(tuán)隊(duì)設(shè)計(jì)電池測(cè)試產(chǎn)品和大功率逆變器產(chǎn)品,看看這位資深人士的分享內(nèi)容。
在嵌入式學(xué)習(xí)過(guò)程中,對(duì)于非常熟悉Windows這樣的操作系統(tǒng),但卻不一定熟悉嵌入式系統(tǒng)中常用的RTOS,嵌入式和事實(shí)系統(tǒng)是一種什么樣的?
嵌入式系統(tǒng)是為了特定應(yīng)用高度定制的軟件硬件計(jì)算機(jī)系統(tǒng)。從廣義的去理解,只要被定制,都可以算作嵌入式系統(tǒng)。如今,在家用的x86系統(tǒng)上,跑一個(gè)類似VxWorks、RTEMS等操作系統(tǒng),當(dāng)成一個(gè)家庭網(wǎng)關(guān)都可算是嵌入式系統(tǒng)。有時(shí)候,同行認(rèn)為真正的嵌入式系統(tǒng)硬件也必須按照應(yīng)用去定制。操作系統(tǒng)就是個(gè)資源的管理器。管理計(jì)算機(jī)上的全部資源,如CPU的計(jì)算時(shí)間、內(nèi)存、IO等。實(shí)時(shí)操作系統(tǒng)簡(jiǎn)單的說(shuō),計(jì)算結(jié)果不僅依賴于計(jì)算結(jié)果的正確性,還依賴于結(jié)果計(jì)算完成的時(shí)間。
嵌入式學(xué)習(xí)過(guò)程中,對(duì)于嵌入式系統(tǒng)實(shí)時(shí)性要求高,對(duì)于所有滿足一定的速度是否都可稱為實(shí)時(shí)系統(tǒng)?
很多廠家并不需要RTOS,前后臺(tái)也能滿足其需要,但他們還是用了RTOS。實(shí)時(shí)操作系統(tǒng)的高效是為嵌入式系統(tǒng)廣為接受的一個(gè)很重要的原因。高效有兩層意思,一是用任務(wù)可以封裝開發(fā)的邏輯,使應(yīng)用層代碼邏輯更加完整,減小開發(fā)難度,代碼的復(fù)用程度會(huì)變高;二是,RTOS代碼都比較簡(jiǎn)潔,算法的空間雜度和時(shí)間雜度都很小,能將MCU的絕大部分資源都留給應(yīng)用層。反過(guò)來(lái),大量的應(yīng)用促使RTOS更加的可靠、更加的精煉,實(shí)時(shí)性也會(huì)更好。當(dāng)然,如醫(yī)療電子、航天電子和工業(yè)控制本身,有許多計(jì)算是依賴于時(shí)間的,對(duì)實(shí)時(shí)性要求非常苛刻。
嵌入式編程相比PC編程,具有哪些復(fù)雜性?在嵌入式學(xué)習(xí)中應(yīng)當(dāng)如何開始和深入?
嵌入式開發(fā)大的挑戰(zhàn)是軟件硬件同時(shí)成熟,出了問(wèn)題容易踢皮球,影響開發(fā)時(shí)間。然而,對(duì)于軟件開發(fā)者來(lái)說(shuō),大的問(wèn)題莫過(guò)于軟件代碼的撰寫。PC平臺(tái)的封裝非常完善,應(yīng)用也非常廣泛,沒(méi)有明顯的錯(cuò)誤,極其穩(wěn)定。嵌入式平臺(tái)幾乎沒(méi)這樣的資源和封裝級(jí)別,且和一些寄存器相關(guān)。這些寄存器配置的順序,值都有嚴(yán)格的規(guī)定,嚴(yán)格按照datasheet的要求做。嵌入式代碼全新開發(fā)得太多,自身也有個(gè)成熟的過(guò)程,也存在著很多方面的問(wèn)題。例如:代碼的應(yīng)用層和底層耦合、應(yīng)用層的使用不當(dāng)和造成底層順序錯(cuò)誤等等。嵌入式調(diào)試成本很高,調(diào)試手段相比PC也比較單一,對(duì)從業(yè)人員的要求更高,這都增加了嵌入式的復(fù)雜性。
對(duì)于嵌入式學(xué)習(xí)來(lái)講,在嵌入式開發(fā)中,對(duì)于硬件開發(fā)平臺(tái)來(lái)講,F(xiàn)PGA,ARM,DSP等等,哪個(gè)更好,對(duì)于初學(xué)者來(lái)講,想要學(xué)習(xí)ARM開發(fā)板,該如何去選購(gòu)?
FPGA和MCU是嵌入式開發(fā)的兩個(gè)不同領(lǐng)域:前者硬件多、后者軟件多,應(yīng)用的行業(yè)領(lǐng)域和背景知識(shí)差別很大。兩者相互不能完全替代。一般來(lái)說(shuō),F(xiàn)PGA相對(duì)于MCU的市場(chǎng),較為小眾。至于DSP,它是以計(jì)算見長(zhǎng)的一類MCU,并不適合跑調(diào)轉(zhuǎn)指令太多的事務(wù)代碼,會(huì)打斷流水線,優(yōu)勢(shì)體現(xiàn)不出來(lái)。所以,DSP的應(yīng)用和一般的MCU用法略有不同,比較側(cè)重計(jì)算、優(yōu)化。
在嵌入式學(xué)習(xí)中,嵌入式開發(fā)的開發(fā)板是否一定要買?是否有比較好的硬件模擬器?
可以直接在x86上做。我買過(guò)開發(fā)板,但是買了之后,就放在屋子里睡覺(jué),因?yàn)榭梢灾苯邮褂脁86平臺(tái)做目標(biāo)平臺(tái)。虛擬平臺(tái)差異很大。目前,x86是虛擬做得好的平臺(tái),可以在x86上實(shí)現(xiàn)所有的驅(qū)動(dòng)。ARM的平臺(tái)虛擬水平也要看具體型號(hào)。我曾今參加一個(gè)開源項(xiàng)目,將RTEMS移植到QEMU mini2440上,可惜QEMU mini2440 的虛擬器或多或少仍有點(diǎn)問(wèn)題,但也可以解決大部分的問(wèn)題。可對(duì)于學(xué)習(xí)操作系統(tǒng)的朋友,去解決虛擬平臺(tái)的問(wèn)題,有些不靠譜。所以,真心想學(xué)習(xí)的,就把x86當(dāng)作嵌入式平臺(tái)去寫代碼。畢竟,能比x86這種嵌入式還要復(fù)雜的系統(tǒng),也是屈指可數(shù)的,其含金量毋庸置疑。
在嵌入式學(xué)習(xí)過(guò)程中,在這些常用的嵌入式系統(tǒng)中,如何來(lái)更好地選擇適合自己的系統(tǒng)?
uC/OS,F(xiàn)reeRTOS、rt-thread、VxWorks、ThreadX、RTEMS、ECOS。不下上百種。在這些系統(tǒng)中選擇自己的系統(tǒng)可不是件容易的事情。學(xué)習(xí)的朋友,我推薦uC/OS,有相關(guān)書籍,網(wǎng)上的資源也比較多。uC/OS僅僅是一個(gè)處理器時(shí)間的分配器,簡(jiǎn)單、易學(xué)。學(xué)好了,觸類旁通,其他的也復(fù)雜不了多少。由于商業(yè)應(yīng)用比較復(fù)雜,涉及工具鏈、商業(yè)授權(quán)、維護(hù)、可靠性、易用性等問(wèn)題。商業(yè)應(yīng)用的朋友我建議開源免費(fèi)的就選擇發(fā)展時(shí)間比較長(zhǎng)的系統(tǒng),如RTEMS、ECOS這種系統(tǒng),或者直接選擇有商業(yè)服務(wù)的系統(tǒng)。
嵌入式學(xué)習(xí)中,在眾多實(shí)際操作系統(tǒng)中,你為什么選擇RTEMS?現(xiàn)在還有開發(fā)用到RTEMS嗎?如果初學(xué)者想精通一門RTOS , 應(yīng)該從RTEMS開始,這種辦法可行么?
RTEMS的內(nèi)部數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)非常精巧,是一個(gè)知識(shí)的寶庫(kù)。舉個(gè)例子,在數(shù)據(jù)結(jié)構(gòu)里,雙向空鏈表插入第一個(gè)元素時(shí)與插入第二個(gè)元素操作很不一樣。在RTEMS里,用特殊的技巧使得不需要做這種判斷,直接插入就好。又如堆的管理、重復(fù)釋放申請(qǐng)的指針,不會(huì)產(chǎn)生任何問(wèn)題。而在uC/OS里,這是致命的。雖然RTEMS是上個(gè)世紀(jì)80年代末開發(fā)的系統(tǒng),數(shù)據(jù)結(jié)構(gòu)和內(nèi)部的組織從今天的角度來(lái)看,仍然是非常先進(jìn)的,是個(gè)含金量非常高的系統(tǒng)。
RTEMS的代碼量比Linux小,又比uC/OS這種系統(tǒng)大幾個(gè)數(shù)量級(jí)。其開發(fā)難度和應(yīng)用難度相對(duì)較高。初學(xué)者若是有堅(jiān)實(shí)的基礎(chǔ),可以從RTEMS開始學(xué)習(xí);基礎(chǔ)較差朋友,若有RTEMS的熟手帶,也是可以的。否則不建議這樣做,會(huì)挫傷學(xué)習(xí)的積極性,形成惡性循環(huán)。