嵌入式開發(fā)比單片機(jī)要難很多?談?wù)剢纹瑱C(jī)和嵌入式開發(fā)設(shè)計(jì)經(jīng)歷
嵌入式開發(fā)比單片機(jī)要難很多?談?wù)剢纹瑱C(jī)和嵌入式開發(fā)設(shè)計(jì)經(jīng)歷
\\\插播一條:文章末尾有驚喜喲~///
單片機(jī)和嵌入式,其實(shí)沒有什么規(guī)范的定義來區(qū)分他們,對于進(jìn)行過單片機(jī)和嵌入式開發(fā)的開發(fā)者來說,都有他們自己的定義,接下來,就談?wù)劚救藢@兩個概念的了解和感悟。
首先明確概念,什么是單片機(jī),單片機(jī)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理才能的中央處理器CPU、隨機(jī)存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計(jì)數(shù)器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的微型計(jì)算機(jī)系統(tǒng),在工業(yè)控制領(lǐng)域廣泛應(yīng)用。從上世紀(jì)80年代,由當(dāng)時的4位、8位單片機(jī),開展到此時的300M的高速單片機(jī)。
假如最典型的51系列單片機(jī),如下圖所示,外觀只是一塊一個拇指大小的長方體芯片,共40個引腳,里面包含了邏輯運(yùn)算單元。實(shí)際上也就是一個cpu。
在最初始接觸單片機(jī)的時候,還曾經(jīng)有過一個疑問,為什么單片機(jī)是黑色的而不能夠是別的顏色,后來才知道是單片機(jī)素材的限制。
對單片機(jī)而言,其實(shí)一個芯片就是全部,其他的假如單片機(jī)最小系統(tǒng)都是為了單片機(jī)的正常運(yùn)作而加入其他元件,假如晶振,5v電源,電感電阻等。當(dāng)然最小系統(tǒng)只能保證單片機(jī)正常運(yùn)行,簡直實(shí)現(xiàn)不了基于單片機(jī)的任何應(yīng)用。
為了使單片機(jī)實(shí)現(xiàn)應(yīng)用,必需要加入其他外設(shè)。假如按鍵,led燈,led屏,蜂鳴器,各種sensor。這也就是市面上很多公司都在做的單片機(jī)開發(fā)板。
總結(jié),單片機(jī)就是完成運(yùn)算、邏輯控制、通信等功能的單一模塊。也就是單片機(jī)真的姓“單”。DSP芯片也能夠認(rèn)為是一個單片機(jī)。當(dāng)然它們性能很強(qiáng)大,但是功能依然很單一,總之就是處理數(shù)據(jù)、邏輯。
那么什么是嵌入式呢,一般說嵌入式都是指嵌入式系統(tǒng),嵌入式系統(tǒng)是將應(yīng)用程序、操作系統(tǒng)、和計(jì)算機(jī)硬件在一起的系統(tǒng),是指以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為根底,軟硬件可裁剪,其針對的用戶應(yīng)用對功能、可靠性、老本、體積、功耗和使用環(huán)境有特殊要求的專用計(jì)算機(jī)系統(tǒng)。IEEE(Instituteof Electrical and ElectronicsEngineers,美國電氣和電子工程師協(xié)會)對嵌入式系統(tǒng)的定義:“用于控制、監(jiān)督或者輔助操作機(jī)器和設(shè)備的裝置”。
嵌入式系統(tǒng)是一種專用的計(jì)算機(jī)系統(tǒng),作為裝置或設(shè)備的一局部。通常,嵌入式系統(tǒng)是一個控制程序存儲在ROM中的嵌入式處理器控制板。事實(shí)上,所有帶有數(shù)字接口的設(shè)備,如手表、微波爐、錄像機(jī)、汽車等,都使用嵌入式系統(tǒng),有些嵌入式系統(tǒng)還包含操作系統(tǒng),但大多數(shù)嵌入式系統(tǒng)都是由單個程序?qū)崿F(xiàn)整個控制邏輯。這是由于嵌入式系統(tǒng)一般用于工業(yè)控制,也就是說對外設(shè)的控制都是寫死的,并不須要人工干預(yù),同時也為了保證系統(tǒng)的穩(wěn)定和可靠。
我們經(jīng)常能夠聽到公司招聘的要求是嵌入式軟件工程師或者嵌入式硬件工程師,也就是說嵌入式系統(tǒng)包括軟件和硬件,其實(shí)仔細(xì)想想也能明白,都已經(jīng)跑系統(tǒng)了,當(dāng)然有軟件也有bsp硬件啦。也就是說嵌入式系統(tǒng)是軟硬件聯(lián)合體,國內(nèi)普遍認(rèn)同的嵌入式系統(tǒng)定義為:以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為根底,軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、老本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
接下來將嵌入式分成硬件和軟件詳細(xì)說明。
硬件層:
硬件層中包含嵌入式微處理器、存儲器(SDRAM、ROM、Flash等)、通用設(shè)備接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式處理器根底上添加電源電路、時鐘電路和存儲器電路,就構(gòu)成了一個嵌入式核心控制模塊。其中操作系統(tǒng)和應(yīng)用程序都能夠固化在ROM中。
其中核心就是微處理器,嵌入式處理器和一般的電腦cpu還有區(qū)別,嵌入式微處理器大多工作在特定設(shè)計(jì)的系統(tǒng)中,假如TI或者Atmel公司都有很多定位不同的處理器,Atmel的SAM系列是專門為物聯(lián)網(wǎng)設(shè)計(jì)的,AVR則由于性能十分突出,廣泛應(yīng)用于工業(yè)領(lǐng)域。
嵌入式微處理器有各種不同的體系,即便在同一體系中也可能具有不同的時鐘頻次和數(shù)據(jù)總線寬度,或集成了不同的外設(shè)和接口。據(jù)不完全統(tǒng)計(jì),全世界嵌入式微處理器已經(jīng)超過1000多種,體系構(gòu)造有30多個系列,其中主流的體系有ARM、MIPS、PowerPC、X86和SH等。但與全球PC市場不同的是,沒有一種嵌入式微處理器能夠主導(dǎo)市場,僅以32位的產(chǎn)品而言,就有100種以上的嵌入式微處理器。嵌入式微處理器的選擇是依據(jù)詳細(xì)的應(yīng)用而決定的。
假如arm公司有各種各樣的處理器架構(gòu),最典型的cortex系列,它屬于ARMv7架構(gòu),這是到2010年為止ARM公司最新的指令集架構(gòu)。ARMv7架構(gòu)定義了三大分工明確的系列:“A”系列面向尖端的基于虛擬內(nèi)存的操作系統(tǒng)和用戶應(yīng)用;“R”系列針對實(shí)時系統(tǒng);“M”系列對微控制器。下圖就是cortex系列的不同定位。
在嵌入式領(lǐng)域,能夠說arm架構(gòu)的處理器占據(jù)了半壁江山,而arm公司也成為著名的科技公司,而它卻沒有出產(chǎn)任何處理器,而只是提供了IP,能夠看出最好公司做規(guī)范。而其他用的比較多的架構(gòu)就是sparc、powerpc等。
嵌入式系統(tǒng)和外界交互須要一定形式的通用設(shè)備接口,如A/D、D/A、I/O等,外設(shè)通過和片外其他設(shè)備的或傳感器的連接來實(shí)現(xiàn)微處理器的輸寫/輸出功能。每個外設(shè)通常都獨(dú)有單一的功能,它能夠在芯片外也能夠內(nèi)置芯片中。外設(shè)的品種很多,可從一個簡略的串行通信設(shè)備到非常復(fù)雜的802.11沒線設(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)場總線)、SPI(串行外圍設(shè)備接口)和IrDA(紅外線接口)等。這一點(diǎn)其實(shí)和單片機(jī)類似。
軟件層:
也就是操作系統(tǒng)了,包括內(nèi)核和文件系統(tǒng),還有就是更為頂層的應(yīng)用程序,嵌入式操作系統(tǒng)一般都是Linux或者其他類Unix,還有一些實(shí)時操作系統(tǒng)(RTOS)假如VxWorks、RTEMS、ucOS等。
其中Linux還包括不同的distribution,假如Ubuntu、Redhat、Debian、centos等,他們都是采用Linux的內(nèi)核,不同的是上面的software和tools,當(dāng)然不用太過于擔(dān)憂規(guī)范問題,這些Linux發(fā)行版選擇的軟件簡直都是比較通用的,假如網(wǎng)頁效勞器的Apache、電子郵件效勞器的postfix、sendmail、文件效勞器的Samba等。此外還有Linuxstandard base等鄙訇準(zhǔn)來規(guī)范開發(fā)者。
類Unix主要是FreeBSD以及Solaris等。
嵌入式領(lǐng)域最常用的還是一些實(shí)時操作系統(tǒng),實(shí)時操作系統(tǒng)的核心就是實(shí)時性,本質(zhì)就是任務(wù)處理所華為時長的可預(yù)測性,即任務(wù)須要在規(guī)定內(nèi)時限內(nèi)完成。IEEE對實(shí)時系統(tǒng)的定義是“那些正確性不僅取決于計(jì)算的邏輯結(jié)果也取決于產(chǎn)生結(jié)果所花費(fèi)時長的系統(tǒng)”。實(shí)時操作系統(tǒng)有硬實(shí)時和軟實(shí)時之分,硬實(shí)時要求在規(guī)定的時長內(nèi)必需完成操作,這是在操作系統(tǒng)設(shè)計(jì)時保證的;軟實(shí)時則只有依照任務(wù)的優(yōu)先級,盡可能快地完成操作即可。我們通常使用的操作系統(tǒng)在經(jīng)過一定變更之后就能夠變成實(shí)時操作系統(tǒng)。
那么實(shí)時操作系統(tǒng)和Linux這種分時操作系統(tǒng)的區(qū)別列舉如下:
(1)多路性。實(shí)時信息處理系統(tǒng)與分時系統(tǒng)一樣具有多路性。系統(tǒng)按分時原則為多個終端用戶效勞;而對實(shí)時控制系統(tǒng),其多路性則主要表此時經(jīng)常對多路的現(xiàn)場信息進(jìn)行采集以及對多個對象或多個執(zhí)行機(jī)構(gòu)進(jìn)行控制。
(2)獨(dú)立性。實(shí)時信息處理系統(tǒng)與分時系統(tǒng)一樣具有獨(dú)立性。每個終端用戶在向分時系統(tǒng)提出效勞請求時,是彼此獨(dú)立的操作,互不干擾;而在實(shí)時控制系統(tǒng)中信息的采集和對對象的控制,也彼此互不干擾。
(3)及時性。實(shí)時信息系統(tǒng)對實(shí)時性的要求與分時系統(tǒng)類似,都是以人所能承受的等待時長來確定;而實(shí)時控制系統(tǒng)的及時性,則是以控制對象所要求的初始截止時長或完成截止時長來確定的,一般為秒級、百毫秒級直至毫秒級,甚至有的要低于100微秒。
(4)交互性。實(shí)時信息處理系統(tǒng)具有交互性,但這里人與系統(tǒng)的交互,僅限于訪問系統(tǒng)中某些特定的專用效勞程序。它不像分時系統(tǒng)那樣能向終端用戶提供數(shù)據(jù)處理效勞、資源共享等效勞。
(5)可靠性。分時系統(tǒng)要求系統(tǒng)可靠,相比之下,實(shí)時系統(tǒng)則要求系統(tǒng)高度可靠。由于任何差錯都可能帶來宏大的經(jīng)濟(jì)損失甚至沒法預(yù)料的災(zāi)難性后果。因此,在實(shí)時系統(tǒng)中,采取了多級容錯措施來保證系統(tǒng)的安全及數(shù)據(jù)的安全。
由于愈加可靠和及時。嵌入式實(shí)時操作系統(tǒng)愈加廣泛應(yīng)用于工業(yè)控制、航空航天、軍工等領(lǐng)域,假如美國航天局NASA近幾年發(fā)射的火星探測器等都是采用的RTEMS實(shí)時操作系統(tǒng)。
中間層:
所謂的中間層就是軟件層和硬件層之間的接口層,其實(shí)嚴(yán)格而言也屬于軟件層。一般開發(fā)者稱之為BSP,這一層主要負(fù)責(zé)的是向下提供硬件的驅(qū)動,硬件的配置等操作,向上則向軟件開發(fā)者提供規(guī)范API,進(jìn)行中間層開發(fā)的開發(fā)者通常稱為嵌入式驅(qū)動工程師。
從這里也能夠看出來,嵌入式設(shè)計(jì)和軟硬都分不開,既要掌握底層硬件的特性以及如何驅(qū)動其工作,也要了解操作系統(tǒng)的相關(guān)知識,才能夠編寫相應(yīng)功能的應(yīng)用。
因此看一個操作系統(tǒng)是否支持某個芯片或者某個開發(fā)板,只有看其源碼中是否包含相應(yīng)芯片或開發(fā)板的板級支持包。
以上就是本人對嵌入式系統(tǒng)系統(tǒng)的了解,接下來再來談?wù)勄度胧较到y(tǒng)應(yīng)該跑在什么樣的硬件上。
談起嵌入式硬件或者開發(fā)板,我想很多人第一印象就是RaspberryPi,是一塊獨(dú)有信譽(yù)卡大小的微型電腦,別看其外表“嬌小”,內(nèi)“心”卻很強(qiáng)大,視頻、音頻等功能通通皆有,可謂是“麻雀雖小,五臟俱全”。樹莓派推出后,很多廠商爭相推出類似產(chǎn)品,假如香蕉派之類的。在這里用TI的Beagleboneblack板子進(jìn)行說明,Beagleboneblack板如下圖所示:
能夠看出體積大小和樹莓派類似,外設(shè)包括有USBhost和USBmini以及網(wǎng)卡接口,,背面還有一個sd卡槽和HDMI接口。接下來看看它的性能參數(shù):
下表是BBB板和樹莓派的性能參數(shù)比較:
Beagleboneblack的處理器是一塊主頻到達(dá)1GHZ的Ti處理器,基于arm的cortexa8架構(gòu),RAM是512M的DDR3,存儲器大小為2GB,支持的操作系統(tǒng)包括Ubuntu、archLinux、Android等。外設(shè)有USBhost和一塊百兆網(wǎng)卡。
BBB的處理器采用的是當(dāng)前嵌入式系統(tǒng)中最時興的ARMv7指令集。采用當(dāng)今廣泛使用的指令集的處理器能夠被更多的軟件支持。例如,一些操作系統(tǒng)已經(jīng)不支持在ARMv6指令集上運(yùn)行,例如,Ubuntu在2012年4月放棄了對ARMv6指令集的支持。
ARMv7相對與ARMv6指令集的另一個優(yōu)勢在于,使用ARMv7的處理器的實(shí)際性能愈增強(qiáng)勁。ARMv7相對與ARMv6的優(yōu)勢還有很多,假如一些顯著的改進(jìn):實(shí)現(xiàn)了超標(biāo)量架構(gòu)、包含了SIMD操作指令、改進(jìn)了分支預(yù)測算法從而極大的提高了某些性能。
最后總結(jié):
以上就是一塊根本的嵌入式核心板所具有的性能參數(shù),和上面說到的單片機(jī)的性能參數(shù)相比較,單片機(jī)的處理才能較低,主頻大多在幾十M高低,和嵌入式動輒上百上千M的處理速度還是相差較多,此外單片機(jī)并不具有圖形界面的處理才能,也就是GPU的缺少乏導(dǎo)致單片機(jī)簡直不可能帶動圖形界面;單片機(jī)的存儲空間和嵌入式處理器也不是一個等級的,單片機(jī)通常片內(nèi)存儲獨(dú)有幾k大小,而由于外設(shè)的限制也不太可能大范圍增加外設(shè)emmc,而嵌入式處理器通常有幾百兆的RAM,如此宏大的差別導(dǎo)致單片機(jī)簡直不可能像嵌入式處理器那樣運(yùn)行操作系統(tǒng),甚至連TCP/IP協(xié)議棧和USB協(xié)議棧都跑不起來,一些高端的單片機(jī)假如ST公司的STM32系列,可能能夠跑一些輕量級的系統(tǒng)os和嵌入式網(wǎng)絡(luò)協(xié)議棧,假如IwIP協(xié)議棧。嵌入式處理器豐盛強(qiáng)大的性能決定它能完成更多單片機(jī)不能完成的應(yīng)用,假如網(wǎng)絡(luò)通信功能,視頻傳輸處理功能等,而當(dāng)外設(shè)存儲增加后,嵌入式處理器能夠輕松運(yùn)行各種Linux系統(tǒng),以及圖形GUI界面。
在開發(fā)方式上單片機(jī)和嵌入式也有較大差別,也就是編譯過程的區(qū)別,單片機(jī)主要在Windows等圖形界面下開發(fā),目前有很多成熟的IDE工具假如keil、IAR、以及ti的CCS等,這些工具集編譯、匯編、鏈接、仿真為一體,并且由于在Windows下開發(fā),具有友好的用戶界面,開發(fā)者只需編寫c代碼,然后點(diǎn)擊編譯鏈接按鍵即可,出現(xiàn)錯誤還能夠debug或者仿真,上手還是非??斓?。而嵌入式開發(fā)一般是在Linux下進(jìn)行的,要將c代碼在自己主機(jī)上編譯完成,然后通過系統(tǒng)鏡像或者uboot引導(dǎo)將編譯好的文件燒入開發(fā)板,由于主機(jī)的處理器的x86架構(gòu),而編寫的代碼是為了運(yùn)行在arm架構(gòu)或sparc架構(gòu)的處理器上,因此存在一個交叉編譯鏈的安裝,此外,Linux下沒有Windows那樣的IDE,也就是編譯,鏈接源代碼都須要開發(fā)者自己完成,一般都是利用GNUmake腳本編寫Makefile以及configure文件來完成,Makefile文件中編寫如何對c或者h文件編譯,也就是編譯規(guī)則以及依賴文件是什么。這些都須要開發(fā)者自己完成。并且以上過程都是在Linux下的終端也就是命令行中完成,這也給嵌入式開發(fā)增加了難度。
彩蛋:最近有同學(xué)跟我要單片機(jī)的資料,我特意花幾個月時間,總結(jié)了我10年產(chǎn)品研發(fā)經(jīng)驗(yàn),資料包幾乎覆蓋了C語言、單片機(jī)、模電數(shù)電、原理圖和PCB設(shè)計(jì)、單片機(jī)高級編程等等,非常適合初學(xué)者入門和進(jìn)階。除此以外,再含淚分享我壓箱底的22個熱門開源項(xiàng)目,包含源碼+原理圖+PCB+說明文檔,不是市面上打包賣的那種課程,我認(rèn)為教程多未必是好事,10年前我自學(xué)快,除了自身執(zhí)行力以外,還有就是教程少。不要害羞做伸手黨,等你一個小紅點(diǎn)。后期我也會組建一些純技術(shù)交流的小圈子,讓大家能認(rèn)識更多的大佬,有個好的圈子,你對行業(yè)的認(rèn)知一定是最前沿的。