剛?cè)肟拥男』锇榭催^(guò)來(lái),嵌入式系統(tǒng)在今年的實(shí)用性展望
剛?cè)肟拥男』锇榭催^(guò)來(lái),嵌入式系統(tǒng)在今年的實(shí)用性展望
///插播一條:我自己在今年年初錄制了一套還比較系統(tǒng)的入門(mén)單片機(jī)教程,想要的同學(xué)找我拿就行了免費(fèi)的,私信我就可以哦~點(diǎn)我頭像黑色字體加我地球呺也能領(lǐng)取哦。最近比較閑,帶做畢設(shè),帶學(xué)生參加省級(jí)或以上比賽///
在嵌入式領(lǐng)域,可以說(shuō)arm架構(gòu)的處理器占據(jù)了半壁江山,而arm公司也成為著名的科技公司,而它卻沒(méi)有生產(chǎn)任何處理器,而只是提供了IP,可以看出一流公司做標(biāo)準(zhǔn)。而其他用的比較多的架構(gòu)就是sparc、powerpc等。
比如arm公司有各種各樣的處理器架構(gòu),最經(jīng)典的cortex系列,它屬于ARMv7架構(gòu),這是到2010年為止ARM公司最新的指令集架構(gòu)。ARMv7架構(gòu)定義了三大分工明確的系列:“A”系列面向尖端的基于虛擬內(nèi)存的操作系統(tǒng)和用戶應(yīng)用;“R”系列針對(duì)實(shí)時(shí)系統(tǒng);“M”系列對(duì)微控制器。
嵌入式系統(tǒng)和外界交互需要一定形式的通用設(shè)備接口,如A/D、D/A、I/O等,外設(shè)通過(guò)和片外其他設(shè)備的或傳感器的連接來(lái)實(shí)現(xiàn)微處理器的輸入/輸出功能。每個(gè)外設(shè)通常都只有單一的功能,它可以在芯片外也可以內(nèi)置芯片中。外設(shè)的種類很多,可從一個(gè)簡(jiǎn)單的串行通信設(shè)備到非常復(fù)雜的802.11無(wú)線設(shè)備。
嵌入式系統(tǒng)中常用的通用設(shè)備接口有A/D(模/數(shù)轉(zhuǎn)換接口)、D/A(數(shù)/模轉(zhuǎn)換接口),I/O接口有RS-232接口(串行通信接口)、Ethernet(以太網(wǎng)接口)、USB(通用串行總線接口)、音頻接口、VGA視頻輸出接口、I2C(現(xiàn)場(chǎng)總線)、SPI(串行外圍設(shè)備接口)和IrDA(紅外線接口)等。這一點(diǎn)其實(shí)和單片機(jī)類似。
嵌入式的軟件層
也就是操作系統(tǒng)了,包括內(nèi)核和文件系統(tǒng),還有就是更為頂層的應(yīng)用程序,嵌入式操作系統(tǒng)一般都是Linux或者其他類Unix,還有一些實(shí)時(shí)操作系統(tǒng)(RTOS)比如VxWorks、RTEMS、ucOS等。
其中Linux還包括不同的distribuTIon,比如Ubuntu、Redhat、Debian、centos等,他們都是采用Linux的內(nèi)核,不同的是上面的software和tools,當(dāng)然不用太過(guò)于擔(dān)心標(biāo)準(zhǔn)問(wèn)題,這些Linux發(fā)行版選擇的軟件幾乎都是比較通用的,比如網(wǎng)頁(yè)服務(wù)器的Apache、電子郵件服務(wù)器的postfix、sendmail、文件服務(wù)器的Samba等。此外還有Linuxstandard base等標(biāo)準(zhǔn)來(lái)規(guī)范開(kāi)發(fā)者。類Unix主要是FreeBSD以及Solaris等。
嵌入式領(lǐng)域最常用的還是一些實(shí)時(shí)操作系統(tǒng),實(shí)時(shí)操作系統(tǒng)的核心就是實(shí)時(shí)性,本質(zhì)就是任務(wù)處理所華為時(shí)間的可預(yù)測(cè)性,即任務(wù)需要在規(guī)定內(nèi)時(shí)限內(nèi)完成。IEEE對(duì)實(shí)時(shí)系統(tǒng)的定義是“那些正確性不僅取決于計(jì)算的邏輯結(jié)果也取決于產(chǎn)生結(jié)果所花費(fèi)時(shí)間的系統(tǒng)”。
實(shí)時(shí)操作系統(tǒng)有硬實(shí)時(shí)和軟實(shí)時(shí)之分,硬實(shí)時(shí)要求在規(guī)定的時(shí)間內(nèi)必須完成操作,這是在操作系統(tǒng)設(shè)計(jì)時(shí)保證的;軟實(shí)時(shí)則只要按照任務(wù)的優(yōu)先級(jí),盡可能快地完成操作即可。我們通常使用的操作系統(tǒng)在經(jīng)過(guò)一定改變之后就可以變成實(shí)時(shí)操作系統(tǒng)。
那么實(shí)時(shí)操作系統(tǒng)和Linux這種分時(shí)操作系統(tǒng)的區(qū)別列舉如下:
(1)多路性。實(shí)時(shí)信息處理系統(tǒng)與分時(shí)系統(tǒng)一樣具有多路性。系統(tǒng)按分時(shí)原則為多個(gè)終端用戶服務(wù);而對(duì)實(shí)時(shí)控制系統(tǒng),其多路性則主要表現(xiàn)在經(jīng)常對(duì)多路的現(xiàn)場(chǎng)信息進(jìn)行采集以及對(duì)多個(gè)對(duì)象或多個(gè)執(zhí)行機(jī)構(gòu)進(jìn)行控制。
(2)獨(dú)立性。實(shí)時(shí)信息處理系統(tǒng)與分時(shí)系統(tǒng)一樣具有獨(dú)立性。每個(gè)終端用戶在向分時(shí)系統(tǒng)提出服務(wù)請(qǐng)求時(shí),是彼此獨(dú)立的操作,互不干擾;而在實(shí)時(shí)控制系統(tǒng)中信息的采集和對(duì)對(duì)象的控制,也彼此互不干擾。
(3)及時(shí)性。實(shí)時(shí)信息系統(tǒng)對(duì)實(shí)時(shí)性的要求與分時(shí)系統(tǒng)類似,都是以人所能接受的等待時(shí)間來(lái)確定;而實(shí)時(shí)控制系統(tǒng)的及時(shí)性,則是以控制對(duì)象所要求的開(kāi)始截止時(shí)間或完成截止時(shí)間來(lái)確定的,一般為秒級(jí)、百毫秒級(jí)直至毫秒級(jí),甚至有的要低于100微秒。
(4)交互性。實(shí)時(shí)信息處理系統(tǒng)具有交互性,但這里人與系統(tǒng)的交互,僅限于訪問(wèn)系統(tǒng)中某些特定的專用服務(wù)程序。它不像分時(shí)系統(tǒng)那樣能向終端用戶提供數(shù)據(jù)處理服務(wù)、資源共享等服務(wù)。
(5)可靠性。分時(shí)系統(tǒng)要求系統(tǒng)可靠,相比之下,實(shí)時(shí)系統(tǒng)則要求系統(tǒng)高度可靠。因?yàn)槿魏尾铄e(cuò)都可能帶來(lái)巨大的經(jīng)濟(jì)損失甚至無(wú)法預(yù)料的災(zāi)難性后果。因此,在實(shí)時(shí)系統(tǒng)中,采取了多級(jí)容錯(cuò)措施來(lái)保證系統(tǒng)的安全及數(shù)據(jù)的安全。
由于更加可靠和及時(shí)。嵌入式實(shí)時(shí)操作系統(tǒng)更加廣泛應(yīng)用于工業(yè)控制、航空航天、軍工等領(lǐng)域,比如美國(guó)航天局NASA近幾年發(fā)射的火星探測(cè)器等都是采用的RTEMS實(shí)時(shí)操作系統(tǒng)。
嵌入式的中間層
所謂的中間層就是軟件層和硬件層之間的接口層,其實(shí)嚴(yán)格而言也屬于軟件層。一般開(kāi)發(fā)者稱之為BSP,這一層主要負(fù)責(zé)的是向下提供硬件的驅(qū)動(dòng),硬件的配置等操作,向上則向軟件開(kāi)發(fā)者提供標(biāo)準(zhǔn)API,進(jìn)行中間層開(kāi)發(fā)的開(kāi)發(fā)者通常稱為嵌入式驅(qū)動(dòng)工程師。
從這里也可以看出來(lái),嵌入式設(shè)計(jì)和軟硬都分不開(kāi),既要掌握底層硬件的特性以及如何驅(qū)動(dòng)其工作,也要了解操作系統(tǒng)的相關(guān)知識(shí),才可以編寫(xiě)相應(yīng)功能的應(yīng)用。
因此看一個(gè)操作系統(tǒng)是否支持某個(gè)芯片或者某個(gè)開(kāi)發(fā)板,只要看其源碼中是否包含相應(yīng)芯片或開(kāi)發(fā)板的板級(jí)支持包。
嵌入式系統(tǒng)應(yīng)該跑在什么樣的硬件上?
談起嵌入式硬件或者開(kāi)發(fā)板,我想很多人第一印象就是RaspberryPi,是一塊只有信用卡大小的微型電腦,別看其外表“嬌小”,內(nèi)“心”卻很強(qiáng)大,視頻、音頻等功能通通皆有,可謂是“麻雀雖小,五臟俱全”。樹(shù)莓派推出后,很多廠商爭(zhēng)相推出類似產(chǎn)品,比如香蕉派之類的。
還有TI的Beagleboneblack板子,體積大小和樹(shù)莓派類似,外設(shè)包括有USBhost和USBmini以及網(wǎng)卡接口,背面還有一個(gè)sd卡槽和HDMI接口。BBB的處理器采用的是當(dāng)前嵌入式系統(tǒng)中最流行的ARMv7指令集。采用當(dāng)今廣泛使用的指令集的處理器可以被更多的軟件支持。例如,一些操作系統(tǒng)已經(jīng)不支持在ARMv6指令集上運(yùn)行,例如,Ubuntu在2012年4月放棄了對(duì)ARMv6指令集的支持。
ARMv7相對(duì)與ARMv6指令集的另一個(gè)優(yōu)勢(shì)在于,使用ARMv7的處理器的實(shí)際性能更加強(qiáng)勁。ARMv7相對(duì)與ARMv6的優(yōu)勢(shì)還有很多,比如一些顯著的改進(jìn):實(shí)現(xiàn)了超標(biāo)量架構(gòu)、包含了SIMD操作指令、改進(jìn)了分支預(yù)測(cè)算法從而極大的提高了某些性能。
總結(jié)
以上就是一塊基本的嵌入式核心板所具有的性能參數(shù),和上面說(shuō)到的單片機(jī)的性能參數(shù)相比較,單片機(jī)的處理能力較低,主頻大多在幾十M上下,和嵌入式動(dòng)輒上百上千M的處理速度還是相差較多,此外單片機(jī)并不具有圖形界面的處理能力,也就是GPU的缺乏導(dǎo)致單片機(jī)幾乎不可能帶動(dòng)圖形界面。
單片機(jī)的存儲(chǔ)空間和嵌入式處理器也不是一個(gè)等級(jí)的,單片機(jī)通常片內(nèi)存儲(chǔ)只有幾k大小,而由于外設(shè)的限制也不太可能大范圍增加外設(shè)emmc,而嵌入式處理器通常有幾百兆的RAM,如此巨大的差別導(dǎo)致單片機(jī)幾乎不可能像嵌入式處理器那樣運(yùn)行操作系統(tǒng),甚至連TCP/IP協(xié)議棧和USB協(xié)議棧都跑不起來(lái),一些高端的單片機(jī)比如ST公司的STM32系列,可能可以跑一些輕量級(jí)的系統(tǒng)os和嵌入式網(wǎng)絡(luò)協(xié)議棧,比如IwIP協(xié)議棧。
嵌入式處理器豐富強(qiáng)大的性能決定它能完成更多單片機(jī)不能完成的應(yīng)用,比如網(wǎng)絡(luò)通信功能,視頻傳輸處理功能等,而當(dāng)外設(shè)存儲(chǔ)增加后,嵌入式處理器能夠輕松運(yùn)行各種Linux系統(tǒng),以及圖形GUI界面。
在開(kāi)發(fā)方式上單片機(jī)和嵌入式也有較大差別,也就是編譯過(guò)程的區(qū)別,單片機(jī)主要在Windows等圖形界面下開(kāi)發(fā),目前有很多成熟的IDE工具比如keil、IAR、以及ti的CCS等,這些工具集編譯、匯編、鏈接、仿真為一體,并且由于在Windows下開(kāi)發(fā),具有友好的用戶界面,開(kāi)發(fā)者只需編寫(xiě)c代碼,然后點(diǎn)擊編譯鏈接按鍵即可,出現(xiàn)錯(cuò)誤還可以debug或者仿真,上手還是非常快的。
而嵌入式開(kāi)發(fā)一般是在Linux下進(jìn)行的,要將c代碼在自己主機(jī)上編譯完成,然后通過(guò)系統(tǒng)鏡像或者uboot引導(dǎo)將編譯好的文件燒入開(kāi)發(fā)板,由于主機(jī)的處理器的x86架構(gòu),而編寫(xiě)的代碼是為了運(yùn)行在arm架構(gòu)或sparc架構(gòu)的處理器上,因此存在一個(gè)交叉編譯鏈的安裝,此外,Linux下沒(méi)有Windows那樣的IDE,也就是編譯,鏈接源代碼都需要開(kāi)發(fā)者自己完成,一般都是利用GNUmake腳本編寫(xiě)Makefile以及configure文件來(lái)完成,Makefile文件中編寫(xiě)如何對(duì)c或者h文件編譯,也就是編譯規(guī)則以及依賴文件是什么。這些都需要開(kāi)發(fā)者自己完成。