定義
嵌入式系統是以套用為中心,以計算機技術為基礎,並且軟硬體可裁剪,適用於套用系統對功能、可靠性、成本、體積、功耗有嚴格要求的
專用計算機系統。它一般由
嵌入式微處理器、外圍硬體設備、
嵌入式作業系統以及用 戶的應用程式等四個部分組成,用於實現對其他設備的控制、監視或管理等功能
嵌入式系統一般指非PC系統,它包括硬體和軟體兩部分。硬體包括
處理器/
微處理器、
存儲器及外設器件和I/O連線埠、圖形控制器等。軟體部分包括作業系統軟體(OS)(要求實時和多任務操作)和應用程式編程。有時設計人員把這兩種軟體組合在一起。應用程式控制著系統的運作和行為;而作業系統控制著應用程式編程與硬體的互動作用。
基礎知識
一、軟體方面的知識:
或傳統的“
微機原理與
接口”課程,嵌入式是軟硬體結合的技術,搞嵌入式系統的人應對
ARM處理器工作原理和接口技術有充分了解,包括彙編
指令系統。不了解
處理器原理,就沒辦法寫出驅動程式。在
嵌入式開發的一些關鍵部分,如Bootloader等,主要靠彙編寫程式。
從事嵌入式系統的人至少須掌握一個嵌入式作業系統(當然越多越好),目前最重要的RTOS主要包括:
(1)、傳統的經典RTOS:最主要的是Vxworks作業系統,以及其Tornado開發平台。Vxworks出現早,實時性很強,並且核心可極微,可靠性較高。特別在通信設備等實時性要求較高的系統中,有比較廣泛的套用。
(2)、嵌入式Linux作業系統:嵌入式Linux廣泛套用的原因當然是免費、開源、支持軟體多、支持者多,成本也低。
(3)、 Windows CE
嵌入式作業系統:Windows CE是微軟的作業系統,也有很大的市場份額,特別是在PDA、手機等界面要求較高或者要求快速開發的場合。
(1)、數字圖像壓縮技術:嵌入式最熱門的套用領域之一,要掌握MPEG編解碼算法和技術,如DVD、MP3、PDA、高畫質電視、
機頂盒等都涉及MPEG高速解碼問題。
(2)、
通信協定及編程技術:大多數
嵌入式設備都要連入區域網路或Internet,所以首先應掌握
TCP/IP協定及其編程;另外,掌握無線通信協定及編程也是是很重要的。
二、硬體方面的知識:
嵌入式本身就是從單片機發展過來的,如今很多單片機都已經帶OS,嵌入式開發領域,驅動人才非常缺乏。寫驅動必須掌握作業系統的內部工作原理,包括相關的硬體知識,即所謂的軟硬通吃,所以這方面的人才是一將難求。
特點
嵌入式計算機系統同通用型計算機系統相比具有以下特點:
1.嵌入式系統通常是面向特定套用的嵌入式CPU與通用型的最大不同就是嵌入式CPU大多工作在為特定用戶群設計的系統中,它通常都具有低功耗、體積小、集成度高等特點,能夠把通用CPU中許多由
板卡完成的任務集成在晶片內部,從而有利於嵌入式系統設計趨於小型化,移動能力大大增強,跟網路的耦合也越來越緊密。
2.嵌入式系統是將先進的計算機技術、半導體技術和電子技術與各個行業的具體套用相結合後的產物。這一點就決定了它必然是一個技術密集、資金密集、高度分散、不斷創新的知識集成系統。
3.嵌入式系統的硬體和軟體都必須高效率地設計,量體裁衣、去除
冗餘,力爭在同樣的矽片面積上實現更高的性能,這樣才能在具體套用中對
處理器的選擇更具有競爭力。
4.嵌入式系統和具體套用有機地結合在一起,它的升級換代也是和具體產品同步進行,因此嵌入式系統產品一旦進入市場,具有較長的生命周期。
5.為了提高執行速度和
系統可靠性,嵌入式系統中的軟體一般都固化在
存儲器晶片或
單片機本身中,而不是存貯於磁碟等載體中。
6.嵌入式系統本身不具備
自舉開發能力,即使設計完成以後用戶通常也是不能對其中的程式功能進行修改的,必須有一套開發工具和環境才能進行開發。
要素
嵌入式處理器
嵌入式系統的功能軟體集成於硬體系統之中,系統的套用軟體與硬體一體化。在嵌入式系統的硬體設備中,嵌入處理器是整個系統的核心部件,其性能的好壞直接決定整個系統的運行效果。Pc機銷售市場中,隨著通用cPu技術的突破和工作頻率的倍增,舊款低檔cPu早已經不見蹤跡。嵌入式系統開發面向具體套用,不同領域的套用市場需要不同款式和性能指標的處理器來開發,於是在嵌入式處理器市場中,中低端的4位、8位和l6位處理器依然存在,高性能的32位處理器也有很多產品。隨著超大規模積體電路技術和微電子技術發展,包含嵌入式處理器以及部分外圍電路的微控制器產品也進入市場,片上系統soc(system on chip)產品也開始出瑚。這些產品的上市,不僅豐富了嵌入式處理器產品,而且也更加方便了工程技術人員進行嵌入式系統的技術開發和擴大嵌入式產品的套用領域。
由於嵌入式系統套用需求的多樣性,市場上基於RIsc結構的嵌入式處理器提供商也日漸增多。統計數字表明,1999年底市場銷售額排在前三位的公司分別是ARM、Motor01a和MIPs,其中ARM公司的晶片銷售量達1.5億個,市場份額超過50%。面對這樣的嵌入式處理器市場,開發設計人員應該如何選擇呢?這裡有兩個前提條件。一是深入研究具體的嵌入式系統套用需求,充分的套用需求分析後獲取套用系統的性能指標。面向套用是嵌入式系統的特色,具體的套用需求決定著嵌入式處理器的性能選型。在工業控制等特殊領域,系統需求分析員不僅需要和工作人員、上級主管親自面談,而且要到工作現場獲取第一手信息,收集充分的資料。套用需求分析後、需要定義產品具備的基本功能和性能指標,如系統處理的數據量大小和處理實時性要求、系統正常運行時的工作環境、系統運行過程中可能遇到的突發事件、系統的尺寸大小和功耗指標等。第二個前提條件是.分析研究市場上各大廠商提供的各款嵌入式處理器的性能指標,如功耗、體積、成本、可靠性、速度、處理能力、電磁兼容性等c這些參數也是各個半導體晶片廠商之間競爭的熱點。
開發人員通過套用需求分析獲取了產品的功能性和非功能性指標,研究了市場上嵌入式處理器的性能參數後,能夠對嵌入式處理器作出較好的選擇。嵌入式處理器選擇的基本原則是滿足具體功能性和非功能性指標需求的、市場套用反應良好的、硬體配置最少的嵌入式處理器。如簡單的智慧型儀器儀表設計考慮使用4位或者8位低檔單片機8051;和數位訊號處理密切相關的選用TI公司的TMx320x系列的DsP(數位訊號處理)晶片;如果產品偏重於通信功能,考慮Motorola公司的嵌入式處理器68K系列;如果產品功能比較齊全,可選用嵌入式處理器領域的後起之秀ARM公司的高性能嵌入式處理器ARM晶片系列等。除了上述的產品性能需求因素,選擇嵌入式處理器時也需要考慮開發人員對此系列處理器的熟悉程度c因為不同公司開發的嵌入式處理器差別較大,從一類處理器轉移到另一類處理器的難度比同一系列不同處理器間的轉移難度大得多,風險多得多。
實時作業系統
以嵌入式處理器為中心,開發人員搭建好硬體電路時僅提供了裸機運行平台,要使整個系統有限的硬體資源充分利用起來,還需要(嵌入式)實時作業系統RTOs(RealTimeoperatingsystem)的軟體支持。RTos與一般商用多任務os(如unix、windows以及LInux等j有共同的…面,也有不同的一面。商用多任務os主要目的是方便用戶管理計算機資源和追求系統資源的最大利用率;而RTOs重點追求的是實時性、可確定性、可靠性,當然也包括有限資源的管理。一般RTOs核心都很小,在幾KB~十幾KB之間。流行的RTOs基本上都支持基於優先權的搶占式調度策略和時間片輪轉,具有微核心結構,有標準組件可供選用.支持虛擬存儲技術和存儲保護機制。由於具體嵌入式套用的功能需求差異以及不同RTOs問不同的性能指標,RTOs的選擇有三種方案:
一是根據套用需要和公司技術實力,考慮自主開發研究(國內手機廠商寧渡波導公司部分款式的手機作業系統就是自主開發的);
二是充分考慮系統需求和流行RTos的性能指標及性價比選擇商用RTOs,如wIncE、Vxworks等;
三是考慮嵌入式Linux(RTLinux),RTLjnux是開放原始碼的免費自由軟體,網際網路技術論壇較多,具備較好的裁減性以支持不同的套用範疇。
當前全球範圍內商用RTos多達200多種,套用領域的多樣性使得市場反應較好的也將近有十幾種,如Vxworks、psOs、Nucleus、QNx、wincE以及中科院軟體研究中心研製的Hopen等。這些不同名稱的RTOs,核心軟體差異微妙而且難以琢磨,選擇時重點是考慮它們的性能評價指標,主要包括調度算法、RTOs本身記憶體開銷、RTOs記憶體管理模式、最大中斷禁止時間和最大任務切換時間。當然,也包括RTOs的購買成本和提供的技術支持等相關因素。針對實時性要求較高的套用,需要重點考慮RTOs的最大中斷禁止時間和最大任務切換時問。這兩個參數越小越好。減小這兩個參數值,除了選用較高工作主頻的嵌入式處理器外,還和RTOs本身任務調度和中斷處理機制密切相關。選擇RTOs時,通常還要考慮系統功能方面支持何種處理器硬體平台,何種API,是否支持核心態用戶態、是否支持記憶體管理單元MMu、可移植性、調試支持、標準支持等。如果開發網路套用,還需要考慮該RTOs是否支持TCP/IP的網路組件和I/O服務等。如果開發遊戲和娛樂市場,要著重研究該RTos對多媒體的支持能力。市場套用需求的多樣性,使得RTOs本身應該支持用戶自定製能力,根據套用需要在微核心的基礎上選用標準組件。
仿真器和調試器
調試是嵌入式系統開發過程的重要環節。嵌入式系統開發調試和一般pc系統開發調試有較大差別。在一般Pc機系統開發中,調試器和被調試程式是運行在相同的硬體和軟體平台上的兩個進程,而在嵌入式系統中,調試器是運行在桌面作業系統上的應用程式,被調試程式是運行在基於特定硬體平台的作業系統,兩個程式問需要實時通信。嵌入式系統調試時,主機上運行的集成開發調試工具(調試器)通過仿真器和目標機相連a仿真器處理宿主機和目標機之間所有的通信,這個通信口可以是串並行口或者高速乙太網接口。仿真器通過JTAG口和目標機相連。三者間的關係如圖1所示。
嵌入式系統開發調試方法有快速原型仿真法和實時線上調試法。快速原型仿真法用於硬體設備尚未完成時,直接在宿主機上對應用程式運行進行仿真分析。在此過程中系統不直接和硬體打交道,由開發調試軟體內部某一特定軟體模組模擬硬體cPu系統執行過程,並可同時將仿真異常反饋給開發者進行錯誤定位和修改。實時線上調試法在具體的目標機平台上調試應用程式.系統在調試狀態下的執行情況和實際運行模式完全一樣,這種方式更有利於開發者實時對系統硬體和軟體故障進行定位和修改,提高產品開發速度。選用的調試器是運行在主機上的集成開發環境一般需要集編輯、彙編、編譯、連結和調試環境於一體,支持低級彙編語言、c和c++語言,基於友好的圖形用戶界面(GuI),支持用戶觀察或修改嵌入式處理器的暫存器和存儲器配置、數據變數的類型和數值,堆疊和暫存器的使用,支持程式斷點設定,單步、斷點豉者全速運行等特性。套用需求的多樣性導致市場上仿真器和調試器的提供商也較多,windriver公司的Tornado是一個很好的開發調試工具。根據實踐經驗,一般配套選擇規模較大、信譽較好公司的仿真器和調試器,雖然價格偏高,但是這些公司技術實力強,售後服務好,調試器和仿真器開發結合緊密。如果在開發調試過程遇到技術障礙,可以通過電話或者電子郵件方式及時獲取技術支持。如選用ARM系列的嵌入式處理器時,可以購買Multi—IcE仿真器.並附加ARM250集成開發調試環境等。
開發隊伍的技術水平和結構比例
嵌入式系統開發中選擇好了嵌入式處理器、RTOs、仿真器和調試器等設備外,還需要考慮開發隊伍的技術水平和結構比例。經驗豐富的開發小組都深有體會:民用產品開發中,產品能夠在預計的時間內進入市場贏得效益,其整個技術範圍內新技術比例至多只能達到20%,超過這個界限,估算的時間期限可能會出現較大偏差。從高層規劃人員的角度分析:20%以內的新技術,公司可以集中力量,投入足夠多的人力、物力和財力進行突破性研究,正常情況下可以達到滿意效果。如果新技術超出20%這個範圍,恐怕心有餘而力不足。公司運作以市場作為嚮導,是市場賦予它們生命。
公司看重市場,付出的勞動有市場回報才能正常運轉。公司在開發過程中一般都儘量避免風險,而且整個開發過程中始終將風險分析作為重要的參考因素。公司一般都選擇保守的開發模式,基於當前開發人員的技術實力和已經達到的技術儲備,在許多種備選方案的技術論證過程,充分分析成本收益、風險大小、投入資源、開發人員的技術水平等因素,全面考慮,權衡利弊,儘量選用可靠的,風險小的設計方案。在項目開發中,分配開發人員時不僅要確保任務在給定時間期限內完成的成功性,而且也要體現在鍛鍊培養後繼人才方面。任何項目的開發,依據需求分析後,經過概要設計和詳細設計,都會形成模組化結構,其工作難度也有一定的層次性。這樣,公司在選派項目人員時,需要合理的人員結構安排,現在~般公認的人才結構比例是1(博士或同等學歷)3(碩士或同等學歷):7(學士、大專或同等學歷)。在項目開發中,除了開發人員的技術水平和結構比例外,小組內部的民主化、科學化管理決策也是很重要的環節。
核心技術
處理器技術
處理器技術與實現系統功能的計算引擎結構有關,很多不可程式的
數字系統也可以視為處理器,這些處理器的差別在於其面向特定功能的專用化程度,導致其設計指標與其它處理器不同。
(1)通用處理器
這類處理器可用於不同類型的套用,一個重要的特徵就是
存儲程式,由於設計者不知道處理器將會運行何種運算,所以無法用數字電路建立程式。另一個特徵就是通用的數據路徑,為了處理各類不同的計算,數據路徑是通用的,其數據路徑一般有大量的
暫存器以及一個或多個通用的
算術邏輯單元。設計者只需要對處理器的存儲器編程來執行所需的功能,即設計相關的軟體。 在嵌入式系統中使用通用
處理器具有設計指標上的一些優勢。提前上市時間和NRE成本較低,因為設計者只需編寫程式,而不需要做任何數字設計,靈活性高,功能的改變通過修改程式進行即可。與自行設計處理器相比,數量少時單位成本較低。
當然,這種方式也有一些設計指標上的缺陷,數量大時的單位成本相對較高,因為數量大時,自行設計的NRE成本分攤下來,可降低單位成本。同時,對於某些套用,性能可能很差。由於包含了非必要的處理器硬體,系統的體積和功 耗可能變大。
(2)單用途處理器
單用途處理器是設計用於執行特定程式的數字電路,也指協處理器、加速器、外設等。如JPEG
編碼解碼器執行單一程式,壓縮或解壓視頻信息。嵌入式系統設計者可通過設計特定的數字電路來建立單用途的
處理器。設計者也可以採用預先設計好的商品化的單用途處理器。
在嵌入式系統中使用單用途處理器,在指標上有一些優缺點。這些優缺點與通用處理器基本相反,性能可能更好,體積與功率可能較小,數量大時的單位成本可能較低,而設計時間與NRE成本可能較高,靈活性較差,數量小時的單位成本較高,對某些套用性能不如通用處理器。
(3)專用處理器
專用指令集處理器(
ASIP)是一個可程式處理器,針對某 一特定類型的套用進行最最佳化。這類特定套用具有相同的特徵,如嵌入式控制、
數位訊號處理等。在嵌入式系統中使用ASIP可以保證良好的性能、功率和大小的 情況下,提供更大的靈活性,但這類
處理器仍需要昂貴的NRE成本建立處理器本身和編譯器,
單片機和
數位訊號處理器是兩類套用廣泛的ASIP,數位訊號處理器是一種針對數位訊號進行常見運算的
微處理器,而單片機是一種針對嵌入式控制套用進行最佳化的微處理器,通常控制套用中的常見外設,如
串列通信外設、定時 器、計數器、脈寬調製器及數/模
轉換器等都集成到了微處理器晶片上,從而使得產品的體積更小、成本更低。
IC技術
(1)全定製/VLSI
在全定製IC技術中,需要根據特定的嵌入式系統的數字實現來最佳化各層,設計人員從電晶體的版圖尺寸、位置、連線開始設計以達到晶片面積利用率高、速度快、功耗低的最最佳化性能。利用
掩膜在製造廠生產實際晶片,全定製的IC設計也常稱為大規模
積體電路設計,具有很高的NRE成本、很長的製造時間,適用於大量或對性能要求嚴格的套用。
(2)半定製ASIC
半定製ASIC是一種約束型設計方法,包括門陣列設計法和 標準單元設計法。它是在晶片製作好一些具有通用性的單元元件和元件組的半成品硬體,設計者僅需要考慮電路的邏輯功能和各功能模組之間的合理連線即可。這種設計方法靈活方便、性價比高,縮短了設計周期,提高了成品率。
(3)可程式ASIC
可程式器件中所有各層都已經存在,設計完成後,在實驗室里即可燒制出設計的晶片,不需要IC廠家參與,開發周期顯著縮短。 可程式ASIC具有較低的NRE成本,單位成本較高,功耗較大,速度較慢。
設計/驗證技術
嵌入式系統的設計技術主要包括硬體設計技術和
軟體設計技術兩大類。其中,硬體設計領域的技術主要包括晶片級設計技術和電路板級設計技術兩個方面。
晶片級設計技術的核心是編譯/綜合、庫/IP、測試/驗證。編譯/綜合技術使設計者用抽象的方式描述所需的功能,並自動分析和插入實現細節。庫/IP技術將預先設計好的低抽象級實現用於高級。測試/驗證技術確保每級功能正確,減少各級之間反覆設計的成本。
開發流程
第一步:建立開發環境
作業系統一般使用Redhat Linux,選擇定製安裝或全部安裝,通過網路下載相應的GCC交叉編譯器進行安裝(比如,arm-linux-gcc、arm-uclibc-gcc),或者安裝產品廠家提供的相關交叉編譯器;
第二步:配置開發主機
配置MINICOM,一般的參數為波特率115200 Baud/s,數據位8位,停止位為1,9,無奇偶校驗,軟體硬體流控設為無。在Windows下的超級終端的配置也是這樣。MINICOM軟體的作用是作為調試嵌入式開發板的信息輸出的監視器和鍵盤輸入的工具。配置網路主要是配置NFS網路檔案系統,需要關閉防火牆,簡化嵌入式網路調試環境設定過程。
第三步:建立引導裝載程式BOOTLOADER
從網路上下載一些公開原始碼的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據具體晶片進行移植修改。有些晶片沒有內置引導裝載程式,比如,三星的ARV17、ARM9系列晶片,這樣就需要編寫開發板上FLASH的燒寫程式,可以在網上下載相應的燒寫程式,也有Linux下的公開原始碼的J-FLASH程式。如果不能燒寫自己的開發板,就需要根據自己的具體電路進行原始碼修改。這是讓系統可以正常運行的第一步。如果用戶購買了廠家的仿真器比較容易燒寫FLASH,雖然無法了解其中的核心技術,但對於需要迅速開發自己的套用的人來說可以極大提高開發速度。
第四步:下載已經移植好的Linux作業系統
如MCLiunx、ARM-Linux、PPC-Linux等,如果有專門針對所使用的CPU移植好的Linux作業系統那是再好不過,下載後再添加特定硬體的驅動程式,然後進行調試修改,對於帶MMU的CPU可以使用模組方式調試驅動,而對於MCLiunx這樣的系統只能編譯核心進行調試。
第五步:建立根檔案系統
下載使用BUSYBOX軟體進行功能裁減,產生一個最基本的根檔案系統,再根據自己的套用需要添加其他的程式。由於默認的啟動腳本一般都不會符合套用的需要,所以就要修改根檔案系統中的啟動腳本,它的存放位置位於/etc目錄下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自動掛裝檔案系統的配置檔案/etc/fstab,具體情況會隨系統不同而不同。根檔案系統在嵌入式系統中一般設為唯讀,需要使用mkcramfs genromfs等工具產生燒寫映像檔案。
第六步:建立應用程式的FLASH磁碟分區
一般使用JFFS2或YAFFS檔案系統,這需要在核心中提供這些檔案系統的驅動,有的系統使用一個線性FLASH(NOR型)512KB~32MB,有的系統使用非線性FLASH(NAND型)8MB~512MB,有的兩個同時使用,需要根據套用規劃FLASH的分區方案。
第七步:開發應用程式
可以放入根檔案系統中,也可以放入YAFFS、JFFS2檔案系統中,有的套用不使用根檔案系統,直接將應用程式和核心設計在一起,這有點類似於μC/OS-II的方式。
第八步:燒寫核心
根檔案系統和應用程式,發布產品。