當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]嵌入式學(xué)習(xí)指南(必備)

近些年來(lái),嵌入式系統(tǒng)的發(fā)展在國(guó)內(nèi)可謂如火如荼,很多公司都急需嵌入式系統(tǒng)方面的開(kāi)發(fā)人員。然而,在高校中,嵌入式系統(tǒng)的教學(xué)卻較為滯后,很多高年級(jí)的本科生和剛?cè)雽W(xué)的研究生都苦于不知從何學(xué)起。在本文中,筆者將根據(jù)自己的嵌入式系統(tǒng)開(kāi)發(fā)和教學(xué)經(jīng)驗(yàn),簡(jiǎn)要介紹嵌入式系統(tǒng)的學(xué)習(xí)方法,力求能幫助初學(xué)者找到一條入門(mén)之路。

什么是嵌入式系統(tǒng)?                    

學(xué)習(xí)嵌入式系統(tǒng),首先應(yīng)該明確什么是嵌入式系統(tǒng),否則費(fèi)力去學(xué),卻不知所學(xué)為何物,豈不惘然?嵌入式系統(tǒng)的定義很多,這也是困擾嵌入式系統(tǒng)學(xué)習(xí)的一個(gè)因素。筆者根據(jù)自己開(kāi)發(fā)和教學(xué)過(guò)程中的理解,以及對(duì)各種嵌入式系統(tǒng)的應(yīng)用進(jìn)行總結(jié),提出了嵌入式系統(tǒng)的簡(jiǎn)單定義:嵌入式系統(tǒng)是嵌入式計(jì)算機(jī)系統(tǒng)的簡(jiǎn)稱,這個(gè)定義突出嵌入式計(jì)算機(jī)系統(tǒng)和普通計(jì)算機(jī)系統(tǒng)的共性。下表列出了嵌入式系統(tǒng)的一些典型的應(yīng)用:

                  智能機(jī)器人(S D R 4,火星登陸車)
                  娛樂(lè)和消費(fèi)電子(Gameboy Advance,Sony PSP)
                  網(wǎng)絡(luò)通信產(chǎn)品(Smartphone)
                  軍用設(shè)備(軍用PDA )
                  汽車(車載導(dǎo)航,自動(dòng)駕駛,娛樂(lè)系統(tǒng))
                  智能儀器(虛擬儀器)
                  安全防護(hù)(防火,防盜)
                  環(huán)境保護(hù)(探空氣球)
                  銀行和商業(yè)消費(fèi)(ATM)

以火星登陸車為例來(lái)分析一下嵌入式系統(tǒng)的定義?;鹦堑顷戃囯m然聽(tīng)起來(lái)感覺(jué)在技術(shù)上有些高不可測(cè),但是本質(zhì)就是嵌入式計(jì)算機(jī)系統(tǒng)的應(yīng)用,其核心就是一個(gè)計(jì)算機(jī)系統(tǒng),而這個(gè)計(jì)算機(jī)系統(tǒng)的組成同傳統(tǒng)的計(jì)算機(jī)系統(tǒng)在本質(zhì)上沒(méi)有什么差別。兩者的顯著不同之處就在于,用于火星登陸車的計(jì)算機(jī)系統(tǒng)被安裝到了火星登陸車上。當(dāng)然,一個(gè)計(jì)算機(jī)系統(tǒng)能夠被安裝在火星登陸車上,是需要進(jìn)行很多特殊設(shè)計(jì)的。但是從本質(zhì)上講,嵌入式系統(tǒng)的核心概念還在計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)學(xué)習(xí)的重點(diǎn)也在計(jì)算機(jī)系統(tǒng)上。一方面,學(xué)習(xí)者需要牢固掌握計(jì)算機(jī)系統(tǒng)本身的概念,更重要的是學(xué)習(xí)嵌入系統(tǒng)的開(kāi)發(fā)過(guò)程同傳統(tǒng)計(jì)算機(jī)系統(tǒng)開(kāi)發(fā)過(guò)程的差別。這里需要指出的是,很多學(xué)習(xí)者本來(lái)就沒(méi)有從事過(guò)完整計(jì)算機(jī)系統(tǒng)的開(kāi)發(fā),高校的教學(xué)是以程序設(shè)計(jì)為中心的,計(jì)算機(jī)系統(tǒng)的構(gòu)成,操作系統(tǒng)的原理,編程語(yǔ)言等課程都是為了能夠讓學(xué)生更好的使用計(jì)算機(jī)系統(tǒng)進(jìn)行程序設(shè)計(jì),在現(xiàn)有的計(jì)算平臺(tái)上來(lái)設(shè)計(jì)實(shí)現(xiàn)各種應(yīng)用,學(xué)生一般沒(méi)有機(jī)會(huì)學(xué)習(xí)一個(gè)完整的計(jì)算機(jī)系統(tǒng)是如何構(gòu)建,并親身參與到構(gòu)建的每一個(gè)過(guò)程。而對(duì)于嵌入式系統(tǒng)而言,從事平臺(tái)開(kāi)發(fā)的人就是要親自去開(kāi)發(fā)出一個(gè)完整的計(jì)算機(jī)系統(tǒng),
這個(gè)過(guò)程包括
                  l 需求分析
                  2 硬件設(shè)計(jì)
                  3 驅(qū)動(dòng)程序
                  4 Bootloader & BSP (板級(jí)支持包)
                  5 操作系統(tǒng)的移植
                  6 應(yīng)用程序的開(kāi)發(fā)
                  7 性能檢查

嵌入式系統(tǒng)教學(xué)的目的就是教會(huì)學(xué)生如何根據(jù)需求去建立滿足某種特殊行業(yè)需求的嵌入式計(jì)算機(jī)系統(tǒng)。讓學(xué)生學(xué)會(huì)如何構(gòu)件硬件平臺(tái),進(jìn)行硬件設(shè)計(jì),選擇能夠滿足應(yīng)用要求的最佳的嵌入式操作系統(tǒng),并完成Bootloader,BSP和驅(qū)動(dòng)程序的編寫(xiě),移植,調(diào)試等過(guò)程。為了滿足行業(yè)需求,最終要在所建立的系統(tǒng)上編寫(xiě)調(diào)試相應(yīng)的應(yīng)用程序,并進(jìn)行性能的測(cè)試和檢查。

你是誰(shuí),你需要學(xué)習(xí)哪些東西?

如果你的工作只是需要在PC 機(jī)上編寫(xiě)一個(gè)圖片瀏覽程序,那么你就沒(méi)有必要去了解當(dāng)系統(tǒng)收到一個(gè)ARP請(qǐng)求包后應(yīng)該如何回應(yīng)。同樣的道理,嵌入式系統(tǒng)的學(xué)習(xí)也是有很多方面的。就嵌入式系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)而言,基本上需要四種不同的工作:系統(tǒng)設(shè)計(jì)工作,硬件設(shè)計(jì)工作,驅(qū)動(dòng)程序和操作系統(tǒng)移植工作和應(yīng)用程序設(shè)計(jì)開(kāi)發(fā)工作。

1.系統(tǒng)設(shè)計(jì)工作

在系統(tǒng)的設(shè)計(jì)階段,系統(tǒng)分析師將根據(jù)需求確定系統(tǒng)的硬件的基本構(gòu)成,根據(jù)系統(tǒng)的需求選擇使用那種處理器,使用哪種操作系統(tǒng),使用那些軟件開(kāi)發(fā)工具。系統(tǒng)分析師往往是較為完整的參與過(guò)嵌入式系統(tǒng)設(shè)計(jì)的全過(guò)程,對(duì)于系統(tǒng)應(yīng)用的行業(yè)較為了解,對(duì)于嵌入式系統(tǒng)本身的開(kāi)發(fā)流程十分清楚的人。

2.硬件設(shè)計(jì)工作

系統(tǒng)硬件設(shè)計(jì)人員需要根據(jù)系統(tǒng)分析師的設(shè)計(jì)結(jié)果,進(jìn)行硬件原理圖的設(shè)計(jì)。通常需要硬件設(shè)計(jì)人員熟悉嵌入式系統(tǒng)的硬件構(gòu)成。硬件設(shè)計(jì)人員需要了解常用的嵌入式系統(tǒng)處理器,存儲(chǔ)器(Flash,SDRAM),以太網(wǎng)MAC芯片,音頻/視頻編解碼芯片,電源管理芯片,總線接口電路 (USB,PCI),液晶顯示模塊,可編程邏輯器件(FPGA/CPLD),無(wú)線網(wǎng)絡(luò)通信模塊(Bluetooth,WLAN,GPRS)等硬件電路構(gòu)成元素的基本工作原理,連接使用方法,使用注意事項(xiàng),基本調(diào)試方法等內(nèi)容。在網(wǎng)絡(luò)上能找到很多公司的評(píng)估板的原理圖,對(duì)于這些原理圖要仔細(xì)研究,摸清處理器同存儲(chǔ)器,網(wǎng)卡,液晶模塊等器件的連接方法和原因。通過(guò)對(duì)這些電路的研究,能夠較快地了解整個(gè)嵌入式系統(tǒng)的構(gòu)成,這些電路同實(shí)際產(chǎn)品中的電路雖有一定差別的,特別是對(duì)于手持設(shè)備,但這些差別不影響初學(xué)者學(xué)習(xí)嵌入式系統(tǒng)的硬件設(shè)計(jì)基本構(gòu)成。                    

以上這些知識(shí),往往需要較長(zhǎng)時(shí)間的學(xué)習(xí)和積累,需要親自參與實(shí)踐的機(jī)會(huì)。對(duì)于剛剛接觸嵌入式系統(tǒng)硬件開(kāi)發(fā)的學(xué)生來(lái)講,一般不可能全部了解這些知識(shí),但也不會(huì)是通通一無(wú)所知。筆者結(jié)合自己開(kāi)發(fā)和教學(xué)的經(jīng)驗(yàn)認(rèn)為:首先應(yīng)該選定一款主流且較為簡(jiǎn)單的嵌入式系統(tǒng)處理器,比如基于ARM7TDMI 內(nèi)核的AT91M40800,S3C44B0 等嵌入式系統(tǒng)處理器,學(xué)習(xí)32 位RISC處理器的編程模型,指令集。高校教學(xué)中,單片計(jì)算機(jī)課程一般以8051系列單片為核心講解,由于現(xiàn)代32位處理器的結(jié)構(gòu)和開(kāi)發(fā)方式同8位單片機(jī)有著較大的差別,學(xué)習(xí)者還是需要花一點(diǎn)力氣來(lái)研究以下32位處理器的。以ARM處理器為例,學(xué)習(xí)者就需要理解處理器的多種工作模式,備份寄存器,RISC 指令集的特點(diǎn),MMU 和虛擬地址,中斷處理過(guò)程等內(nèi)容。在學(xué)習(xí)指令集的過(guò)程中,最好能夠每學(xué)習(xí)幾條指令,就使用這幾條指令在模擬器上實(shí)驗(yàn)以下,觀察處理器執(zhí)行的結(jié)果。這個(gè)過(guò)程一方面是學(xué)習(xí)者對(duì)于指令本身的學(xué)習(xí)能夠取得一個(gè)比較好的效果,另外也是對(duì)開(kāi)發(fā)工具本身的一種學(xué)習(xí)。接著,就可以開(kāi)始學(xué)習(xí)片上資源的使用和配置方法。這時(shí)就需要一個(gè)方便使用的開(kāi)發(fā)板,學(xué)習(xí)者能夠通過(guò)JTAG仿真器將開(kāi)發(fā)板同調(diào)試PC機(jī)相連,進(jìn)行程序的下載,調(diào)試。特別是要仔細(xì)研究系統(tǒng)的初始化過(guò)程和中斷處理的過(guò)程。在開(kāi)發(fā)過(guò)程中如果遇到問(wèn)題,應(yīng)自己分析問(wèn)題產(chǎn)生的原因,通過(guò)分析縮小問(wèn)題可能產(chǎn)生的范圍,最終找到問(wèn)題的所在。最重要的就是要保持一種解決問(wèn)題的信心,面對(duì)困難如何處理,往往能夠決定最終系統(tǒng)是否能夠調(diào)試成功。然后,學(xué)習(xí)者可以開(kāi)始仔細(xì)學(xué)習(xí)處理器同存儲(chǔ)器的連接,存儲(chǔ)空間的配置,各種外擴(kuò)器件,如網(wǎng)卡,AC97聲卡的工作原理和使用方法。嵌入式系統(tǒng)硬件設(shè)計(jì)中往往需要使用可編程器件,學(xué)習(xí)者還需要一定的時(shí)間來(lái)學(xué)習(xí)使用常用的可編程器件(CP L D / F P G A),常用的有Xilinx和Altera公司的產(chǎn)品。進(jìn)行系統(tǒng)硬件原理圖設(shè)計(jì),就需要使用原理圖設(shè)計(jì)的EDA工具,常用的EDA 原理圖設(shè)計(jì)工具主要包括Cadence公司的Capture,Protel公司的Protel99SE等。接下來(lái)就可以參照評(píng)估板的電路圖,根據(jù)系統(tǒng)的設(shè)計(jì)要求,開(kāi)始進(jìn)行原理圖的繪制了。在原理圖繪制過(guò)程中,一定要搞清評(píng)估板電路連接的原因,對(duì)于一時(shí)沒(méi)有搞清楚的問(wèn)題切不可蒙混過(guò)關(guān)。例如,有些處理器的地址線是以字節(jié)位單位的,而另一些處理器的地址線則是以兩個(gè)字節(jié)為單位的,當(dāng)連接16位的存儲(chǔ)器的時(shí)候,切不可想當(dāng)然的把處理器的A 0 直接連接到存儲(chǔ)器的A 0 上面。另外,學(xué)生還應(yīng)具有一定的PCB板圖繪制能力,因?yàn)樵诂F(xiàn)階段,很多公司還不能完全把原理圖的設(shè)計(jì)工作和PCB 的繪制工作分開(kāi),往往要求硬件設(shè)計(jì)人員既能進(jìn)行原理圖設(shè)計(jì)又能進(jìn)行板圖設(shè)計(jì)。即使是PCB設(shè)計(jì)和原理圖設(shè)計(jì)分開(kāi)的公司,也需要原理圖設(shè)計(jì)者能為PCB 的設(shè)計(jì)者對(duì)于不同的信號(hào)提出布板要求。

3.驅(qū)動(dòng)程序和操作系統(tǒng)移植工作

現(xiàn)代嵌入式系統(tǒng)的開(kāi)發(fā)同傳統(tǒng)8位單片機(jī)系統(tǒng)的開(kāi)發(fā)相比,一個(gè)顯著的區(qū)別就是嵌入式操作系統(tǒng)的廣泛使用。在拿到焊接完畢的電路板,并進(jìn)行基本的測(cè)試后,就要進(jìn)行驅(qū)動(dòng)程序和操作系統(tǒng)的移植工作了。首先要進(jìn)行的Bootloader的編寫(xiě)和移植工作。Bootloader相當(dāng)于PC系統(tǒng)的BIOS。對(duì)于有些嵌入式操作系統(tǒng),如uc/OSII沒(méi)有bootloader同樣可以開(kāi)發(fā)調(diào)試。但是對(duì)于WindowsCE和嵌入式linux系統(tǒng)而言Bootloader就是必須的了。本文以Windows CE 為例,做一個(gè)簡(jiǎn)要的說(shuō)明。

Windows CE 系統(tǒng)的移植工作主要就是BSP(板級(jí)支持包)的開(kāi)發(fā)過(guò)程。BSP將具體的硬件差異同操作系統(tǒng)的核心隔離開(kāi)來(lái),主要由Bootloaer ,OAL(OEMAbstraction Layer)和設(shè)備驅(qū)動(dòng)程序三部分組成。WindowsCE系統(tǒng)中Bootloader叫做Eboot。Eboot被寫(xiě)入系統(tǒng)的引導(dǎo)Flash。系統(tǒng)啟動(dòng)時(shí)運(yùn)行Eboot,完成通過(guò)網(wǎng)卡將調(diào)試PC 機(jī)中Windows CE 操作系統(tǒng)映像下載到目標(biāo)系統(tǒng)的SDRAM中并開(kāi)始執(zhí)行的功能。對(duì)于一個(gè)系統(tǒng)移植人員,首先需要閱讀文檔,了解WindowsCE系統(tǒng)Bootloader和BSP的基本概念和開(kāi)發(fā)過(guò)程。(呵,還要做這工作啊,我還沒(méi)想到(初學(xué)^_^))Windows CE的開(kāi)發(fā)系統(tǒng)Platform Builder提供了詳細(xì)的文檔和例程,開(kāi)發(fā)人員需要仔細(xì)的閱讀文檔和例程。搞清楚各個(gè)函數(shù)之間的調(diào)用關(guān)系。在開(kāi)發(fā)過(guò)程中的一個(gè)重要的步驟就是打通串口,使得目標(biāo)板能夠通過(guò)PC機(jī)串口向調(diào)試PC 機(jī)發(fā)送數(shù)據(jù)。由于ARM 系統(tǒng)的仿真器比較昂貴,而且操作系統(tǒng)的調(diào)試往往不使用JTAG調(diào)試器進(jìn)行單步調(diào)試。所以能從串口觀察程序的執(zhí)行過(guò)程和結(jié)果對(duì)于調(diào)試就顯得十分重要了。串口打通之后一個(gè)比較棘手的問(wèn)題就是網(wǎng)卡芯片的調(diào)試。剛剛接觸嵌入式系統(tǒng)開(kāi)發(fā)的人往往沒(méi)有直接在寄存器級(jí)上使用網(wǎng)卡芯片的經(jīng)驗(yàn),而網(wǎng)卡芯片的說(shuō)明一般都較為簡(jiǎn)短,這就要求開(kāi)發(fā)者學(xué)習(xí)一些以太網(wǎng)的基礎(chǔ)知識(shí),對(duì)以太網(wǎng)的MAC 層有一個(gè)基本的認(rèn)識(shí)。另外,各種網(wǎng)絡(luò)調(diào)試(抓包)工具的使用也能大大降低系統(tǒng)調(diào)試的難度。系統(tǒng)的OAL需要根據(jù)具體硬件的不同做出相應(yīng)的修改,這個(gè)部分可參照文檔進(jìn)行,在調(diào)試過(guò)程中根據(jù)串口的信息分析出錯(cuò)的地方。要充分發(fā)揮跨文件字符串搜索工具的功能,在浩如煙海的源文件中找到出錯(cuò)的位置。當(dāng)然,隨著開(kāi)發(fā)者對(duì)系統(tǒng)文件目錄結(jié)構(gòu)的熟悉和了解,錯(cuò)誤定位的速度會(huì)不斷加快。

WindowsCE 的驅(qū)動(dòng)程序相對(duì)而言是比較好寫(xiě)的。程序結(jié)構(gòu)較為簡(jiǎn)單,學(xué)習(xí)者可參照
http://msdn.microsoft.com/library/default.asp MSDN Home > MSDN Library >Mobile and Embedded Development > Embedded Operating System Development > Columns SPOT the Geek and WindowsCE Drivers 這篇文章。

4.應(yīng)用程序的開(kāi)發(fā)

嵌入式系統(tǒng)的應(yīng)用程序開(kāi)發(fā)同在PC 機(jī)上開(kāi)發(fā)應(yīng)用程序的區(qū)別不是很大。對(duì)于Windows CE系統(tǒng)而言,Microsoft已經(jīng)提供了較為完善的開(kāi)發(fā)工具。特別是.NET Compact Framework的使用,使得基于Windows CE.NET CompactFramework的應(yīng)用程序有了跨平臺(tái)性。開(kāi)發(fā)人員可以使用Windows 的C# 語(yǔ)言直接在PC 上進(jìn)行CE.NET應(yīng)用程序的開(kāi)發(fā)和模擬調(diào)試,也可將目標(biāo)系統(tǒng)同PC 機(jī)相連,進(jìn)行聯(lián)機(jī)調(diào)試?,F(xiàn)在有很多系統(tǒng)支持J2ME(JAVA的嵌入式系統(tǒng)版本) ,這使得JAVA 在嵌入式系統(tǒng)應(yīng)用開(kāi)發(fā)中占有較大的優(yōu)勢(shì)。另外,作為專業(yè)的嵌入式系統(tǒng)軟件開(kāi)發(fā)人員,還需要充分了解面向?qū)ο蠹夹g(shù)和設(shè)計(jì)模式等方面的知識(shí),當(dāng)然作為初學(xué)者可以先不深入研究這方面的內(nèi)容。

常用嵌入式系統(tǒng)處理器和操作系統(tǒng)

處理器
常用嵌入式系統(tǒng)處理器主要包括ARM 處理器,Power PC 處理器,基于MIPS 內(nèi)核的嵌入式處理器,軟核處理器(如Altera 的Nios和Xilinx的MicroBlaze等)和DSP(數(shù)字信號(hào)處理器)等。

ARM 處理器的主要特點(diǎn)是具有較高的性能功耗比。ARM處理器被廣泛的應(yīng)用在手機(jī),PDA等領(lǐng)域,其中較為著名的有Intel 公司生產(chǎn)的基于ARM 內(nèi)核的XScale系列處理器。由于所有公司生產(chǎn)的基于ARM內(nèi)核的處理器具有相同的編程模型,在手持和電池供電的系統(tǒng)中,基于ARM的嵌入式系統(tǒng)處理器往往被首先選用。PowerPC(簡(jiǎn)稱PPC)處理器具有較強(qiáng)的運(yùn)算性能和數(shù)據(jù)吞吐能力,在網(wǎng)絡(luò)和數(shù)據(jù)通信領(lǐng)域基于PPC的嵌入式系統(tǒng)處理器有著廣泛的應(yīng)用。其中Motorola公司生產(chǎn)的MPC860/MPC8260被大量地應(yīng)用在嵌入式網(wǎng)絡(luò)產(chǎn)品中。MIPS 處理器的特點(diǎn)表現(xiàn)在十分強(qiáng)大的處理能力上。作為高性能處理器,MIPS處理器適用于網(wǎng)絡(luò)、企業(yè)及高級(jí)消費(fèi)類電子應(yīng)用,特別是在機(jī)頂盒系統(tǒng)中,MIPS處理器具有較高的市場(chǎng)占有率。隨著可編程器件的規(guī)模不斷擴(kuò)大,使得人們能夠根據(jù)需要定制處理器,并方便的將針對(duì)某種特殊應(yīng)用定制的處理器方便的在可編程器件內(nèi)部實(shí)現(xiàn)。除了處理器外,計(jì)算機(jī)系統(tǒng)還需要許多其他構(gòu)成部分,比如在多通道媒體數(shù)據(jù)處理系統(tǒng)中,經(jīng)常需要使用可編程器件來(lái)實(shí)現(xiàn)高速的數(shù)據(jù)處理功能,使用軟核DSP來(lái)實(shí)現(xiàn)復(fù)雜的數(shù)字信號(hào)處理算法,同時(shí)還需要處理器進(jìn)行事務(wù)處理,軟核處理器將可編程器件,DSP同處理器結(jié)合在一起,為系統(tǒng)級(jí)設(shè)計(jì)提供了極大的靈活性。DSP(數(shù)字信號(hào)處理器)有別于通用處理器,集中表現(xiàn)在其強(qiáng)大的數(shù)字信號(hào)處理能力上。在DSP
內(nèi)部提供了硬件乘累加器,處理器在設(shè)計(jì)上對(duì)于特殊的尋址方式做了優(yōu)化,一些DSP 還支持零耗循環(huán)(Zero OverheadLoop)。為了方便嵌入式系統(tǒng)設(shè)計(jì),主流DSP 一般也都提供了豐富的外設(shè)。特別值得一提的是ADI 公司的Blackfin 系列DSP 和TI 公司的DM64X系列DSP,兩種處理器都提供了豐富的片上外設(shè),非常適用嵌入式系統(tǒng)應(yīng)用。

操作系統(tǒng)
Window CE.NET/5.0
作為Microsoft的產(chǎn)品,Window CE.NE/5.0提供了功能完備的平臺(tái)開(kāi)發(fā)工具Platform  Builder和應(yīng)用開(kāi)發(fā)工具Embedded Visual C++/Visual Studio 2003。WindowsCE由于擁有廣大使用者所熟悉的windows界面,系統(tǒng)提供了眾多驅(qū)動(dòng)程序,并且有完備的文檔支持。對(duì)于應(yīng)用開(kāi)發(fā)而言,熟悉Windows系統(tǒng)開(kāi)發(fā)的程序員很容易轉(zhuǎn)到WindowsCE 應(yīng)用程序的開(kāi)發(fā)。Windows CE將會(huì)是一個(gè)非常有前途的嵌入式操作系統(tǒng)。

VxWorks
VxWorks是由Windriver(風(fēng)河)公司出品的嵌入式實(shí)時(shí)操作系統(tǒng),大名鼎鼎的火星登陸車就是使用了VxWorks。Windriver為VxWorks 提供了集成開(kāi)發(fā)環(huán)境tornado。

C/OSII
υC/OS是由Jean Labrosse設(shè)計(jì)編寫(xiě)的開(kāi)放源代碼的嵌入式實(shí)時(shí)操作系統(tǒng),筆者最早接觸的嵌入式操作系統(tǒng)就是它。閱讀并深入理解υC/OS的源代碼對(duì)于理解實(shí)時(shí)系統(tǒng)是大有裨益的。

ARM Linux
ARM linux是由Russell King和其他開(kāi)發(fā)者開(kāi)發(fā)移植的用于ARM 處理器的linux操作系統(tǒng)。 ARM Linux系統(tǒng)在GNU GPL下發(fā)布。有興趣的讀者可以參http://www.arm.linux.org.uk/docs/whatis.shtml的介紹。

υCLinux
υClinux 是適用于沒(méi)有MMU 的嵌入式處理的LinuxOS 版本。υ Clinux 同樣在GNU GPL發(fā)布,有興趣的讀者可以參看http://www.uclinux.org/index.html

 

嵌入式系統(tǒng)開(kāi)發(fā)過(guò)程中的常見(jiàn)問(wèn)題和解決方法

Bootloader如何寫(xiě)入Flash ?

初學(xué)者一般都會(huì)遇到如何將程序?qū)懭胩幚砥鞯膯?wèn)題。對(duì)于不同的處理器,可以采用不同的方法。例如Intel的Xscale處理器可以使用Intel公司提供的JFlash工具燒寫(xiě)。對(duì)于具有JTAG調(diào)試工具軟件的處理器,可以使用如下思路:編寫(xiě)一段程序,這段程序能將位于SDRAM/SRAM 固定地址中的數(shù)據(jù)寫(xiě)入Flash中。燒寫(xiě)時(shí),首先,將這段軟件下載到SDRAM 中,然后通過(guò)調(diào)試軟件將要寫(xiě)入Flash的數(shù)據(jù)下載到SDRAM/SRAM的某個(gè)固定地址開(kāi)始的緩沖區(qū),然后通過(guò)調(diào)試器開(kāi)始執(zhí)行程序,將數(shù)據(jù)寫(xiě)入Flash。除此以外,網(wǎng)絡(luò)上還提供了很多專用的寫(xiě)Flash的工具,開(kāi)發(fā)者可以根據(jù)自己的需要選用。(現(xiàn)在明白了我在學(xué)的那個(gè)BF533為什么先下個(gè)flashProgramer.dxe先了)

什么是arm-elf-gcc?

arm-elf-gcc是一個(gè)交叉C語(yǔ)言編譯器。我們?cè)赑C平臺(tái)下編譯程序,編譯器運(yùn)行的處理器同生成的代碼將要運(yùn)行的處理器相同。但是,在PC
機(jī)上編譯ARM程序時(shí),編譯器運(yùn)行的處理器同生成的代碼運(yùn)行的處理器不同,這種編譯器叫做交叉編譯器。其中的elf是指編譯器生成的目標(biāo)文件格式。(其實(shí)我們平時(shí)用的單片機(jī)編譯器如GCC—AVR等已是交叉編譯器了,我到現(xiàn)在才弄清楚什么是交叉編譯器)

走了哪條編譯路徑?

系統(tǒng)程序和驅(qū)動(dòng)程序往往包含很多的編譯選項(xiàng),很多選項(xiàng)都是在編譯時(shí)通過(guò)命令行定義的,如果想知道編譯的是那一段程序可以使用如下的方法:

#ifdef PLAT_AAA
#error Code for Platform AAA

#else
#error Code NOT for Platform AAA
#endif

這樣在編譯的時(shí)候就知道,編譯的是哪一條路經(jīng)了。對(duì)于支持#pragma message( “I am here”)的編譯器也可使用#pragma message預(yù)編譯指令。

我怎么知道那段代碼在那個(gè)文件中?

系統(tǒng)編程中經(jīng)常需要使用在多個(gè)文件中搜索字符串,在windows平臺(tái)下可以使用平臺(tái)提供的多文件字符串搜索工具。在linux平臺(tái)下,可以使用grep來(lái)搜索字符串。Grep的搜索功能十分強(qiáng)大,支持正則表達(dá)式搜索,熟練使用grep對(duì)于閱讀系統(tǒng)和驅(qū)動(dòng)程序代碼是很有幫助的。

系統(tǒng)是從那個(gè)文件開(kāi)始運(yùn)行的?


對(duì)于Windows CE系統(tǒng),一般從WINCE420PLATFORMYourPlatformKERNELHAL目錄的某個(gè)匯編文件中。對(duì)于Linux系統(tǒng)版本不同會(huì)存在一定差異,以arm處理器為例,一般會(huì)在linux2.4.xarcharmkernel的head-armv.S中。

程序執(zhí)行到了那里?
可以在程序中插入如下代碼來(lái)實(shí)現(xiàn)
printf( “I am here %s, %dn”,__FILE__, __LINE__);

代碼將打出printf語(yǔ)句所在的文件名和行號(hào)。

推薦書(shū)目

Jean J.Labrosse MicroC/OS-II The Real-Time Kernel,Second Edition這本書(shū)是筆者接觸嵌入式實(shí)時(shí)系統(tǒng)的入門(mén)書(shū),在國(guó)內(nèi)能夠買(mǎi)到中文版。這本書(shū)較為清楚地講述了實(shí)時(shí)系統(tǒng)的概念,各個(gè)組成部分的工作原理,特別是公開(kāi)了實(shí)時(shí)系統(tǒng)內(nèi)核的源代碼,仔細(xì)研究定會(huì)受益匪淺。有個(gè)小的提示,對(duì)于初學(xué)者,這本書(shū)可以先不看第一章,直接從第二章看起。

Abraham Silberschatz, Peter Baer Galvin,Greg Gagne Operating System Concepts筆者在教學(xué)過(guò)程中發(fā)現(xiàn),無(wú)論是計(jì)算機(jī)還是電子工程專業(yè)都有很多學(xué)生對(duì)于操作系統(tǒng)的基本概念都沒(méi)有搞清,很少有學(xué)生有完整的系統(tǒng)編程經(jīng)驗(yàn)。Operating System Concepts這本書(shū)對(duì)操作系統(tǒng)的概念講述只能用經(jīng)典來(lái)形容。對(duì)于嵌入式系統(tǒng)有興趣深入研究的同學(xué),首先要把基礎(chǔ)打好,這本書(shū)就成了必讀之物了。

Andrew S. Tanenbaum Computer Networks 提起Andrew S. Tanenbaum 學(xué)習(xí)計(jì)算機(jī)的同學(xué)一定都知道OPERATINGSYSTEMs:Design and
Implementation這本書(shū),筆者對(duì)于Tanenbaum這樣的教授由衷佩服。網(wǎng)絡(luò)協(xié)議棧是嵌入式系統(tǒng)中的支柱性組成部分。愿意致力于網(wǎng)絡(luò)深層技術(shù)研究的同學(xué),這本書(shū)將為你們建立一個(gè)堅(jiān)實(shí)的網(wǎng)絡(luò)基礎(chǔ)。

Karim Yaghmour Building Embedded Linux Systems本書(shū)詳盡的介紹了嵌入式linux系統(tǒng)的組成,基本概念和如何去建立各個(gè)部分。全書(shū)篇幅較小,可謂短小精悍。即可以作為嵌入式linux系統(tǒng)的入門(mén)讀物,又是開(kāi)發(fā)過(guò)程各個(gè)部分的指南。

Advanced RISC Machines Ltd (ARM) ARM7 TDMI Data Sheet     Advanced RISC Machines Ltd (ARM) ARM920T Technical Reference Manual學(xué)習(xí)嵌入式系統(tǒng)不了解當(dāng)前應(yīng)用最廣泛的嵌入式處理器怎么行? ARM7 TDMI 的 data  sheet是學(xué)習(xí)ARM編程模型,指令集的好東西。在嵌入式系統(tǒng)中,MMU(內(nèi)存管理單元)是很重要的部分,又是較難理解和掌握的部分。ARM920T Technical Reference Manual 正好可以幫你講解這方面的內(nèi)容。

Perter Van Der LinDen Expert C Programming嵌入式系統(tǒng)級(jí)編程最常用的語(yǔ)言還是C 。很多同學(xué)都自認(rèn)為自己的C語(yǔ)言學(xué)的很好,那好,就看看這本書(shū)吧,找找自己和Experts差距。


注:這篇文章是我在2004年第12期的學(xué)習(xí)園地看到的。文章的作者是袁通

作者簡(jiǎn)介

袁通,北京工業(yè)大學(xué)實(shí)驗(yàn)學(xué)院嵌入式系統(tǒng)課程教師,曾于2 0 0 4 年以訪問(wèn)學(xué)生身份工作于微軟亞洲研究院。


看完這篇文章后,我就迫不及待得貼出來(lái),因?yàn)榇_實(shí)是寫(xiě)的好啊。我搞嵌入式一年多了,從8051到ARM,學(xué)習(xí)過(guò),彷徨過(guò),高興過(guò),郁悶過(guò)。。。近來(lái)甚至有放棄的想法,終歸到底是對(duì)嵌入式開(kāi)發(fā)認(rèn)識(shí)不全面造成的,一開(kāi)始就一頭鉆到技術(shù)里,學(xué)習(xí)各種技術(shù),最終迷失在自己一手造成的泥坑里。這篇文章非常清晰的講述了嵌入式開(kāi)發(fā)的方方面面,對(duì)我這樣迷惑的人起到了醍醐灌頂?shù)淖饔谩?/p>

嵌入式開(kāi)發(fā)與桌面開(kāi)發(fā)既有不同,又有非常大的聯(lián)系,而且十分注重實(shí)際操作能力。搞桌面開(kāi)發(fā)的人在一開(kāi)始接觸嵌入式的時(shí)候,通常轉(zhuǎn)換不過(guò)來(lái),這主要體現(xiàn)在定位上。如文中所說(shuō),你是誰(shuí),你要做什么?我對(duì)硬件的了解僅限于編程領(lǐng)域,PCB設(shè)計(jì)一竅不通,但并不能說(shuō)你不懂硬件就不能從事嵌入式開(kāi)發(fā)。一個(gè)系統(tǒng)的開(kāi)發(fā)設(shè)計(jì)方方面面,在自己感興趣和熟悉的領(lǐng)域做出自己的貢獻(xiàn)才是最主要的。

1。硬件設(shè)計(jì): 需要有硬件設(shè)計(jì)的經(jīng)驗(yàn),對(duì)各種嵌入式器件有很好的了解。
2。系統(tǒng)移植:需要匯編經(jīng)驗(yàn),操作系統(tǒng)原理以及底層驅(qū)動(dòng)的了解
3。應(yīng)用程序:需要桌面編程經(jīng)驗(yàn)
 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉