摘要:1 引言 嵌入式系統在生活中隨處可見,一臺通用計算機的外部設備中就包含了5-10個嵌入式處理器,打印機、掃描儀、數字相機、USB集線器等均是由嵌入式處理器控制的。制造工業、過程控制、通訊、儀器儀表、汽車、船舶、航空航天、軍事裝備、消費類產品等方面均是嵌入式..
1 引言 嵌入式系統在生活中隨處可見,一臺通用計算機的外部設備中就包含了5-10個嵌入式處理器,打印機、掃描儀、數字相機、USB集線器等均是由嵌入式處理器控制的。制造工業、過程控制、通訊、儀器儀表、汽車、船舶、航空航天、軍事裝備、消費類產品等方面均是嵌入式系統的應用領域。嵌入式系統廣為接受定義是:以應用為中心,以計算機技術為基礎,軟件硬件可裁剪、適應應用系統,對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。美國著名未來學家Nicholas Negroponte在1999年訪華時預言,若干年后嵌入式智能工具將是繼PC 和Internet 之后最偉大的發明。 2 嵌入式系統的結構 圖1 嵌入式系統結構圖 嵌入式系統作為一類特殊的計算機系統,自底向上包含有3個部分:嵌入式硬件平臺、嵌入式操作系統、嵌入式應用軟件,如圖1中虛線框所示。隨著嵌入式越來越復雜的應用,如何簡潔有效地使嵌入式系統應用于各種不同的應用環境是嵌入式系統發展中所必須解決的關鍵問題。經過不斷的發展,原先嵌入式系統的3層結構逐步演化成為一種4層結構。如圖1中實線框所示,這個新增加的中間層次叫硬件抽象層,有時也叫板級支持包,是一個介于硬件與軟件之間的中間層次。硬件抽象層通過特定的上層接口與操作系統進行交互,實現操作系統對硬件的直接操作。硬件抽象層的引入大大推動了嵌入式操作系統的通用化。 3 嵌入式操作系統 通用計算機具有完善的操作系統和應用程序接口(API),是計算機基本組成不可分離的一部分,應用程序的開發以及完成后的軟件都在OS平臺上面運行,但一般不是實時的。嵌入式系統應用軟件可以沒有操作系統直接在芯片上運行,但是為了合理地調度多任務,利用系統資源、系統函數以及和專家庫函數接口,用戶必須自行選配RTOS開發平臺,這樣才能保證程序執行的實時性、可靠性,并減少開發時間,保障軟件質量。嵌入式操作系統完成嵌入式應用的任務調度和控制等核心功能,具有內核較精簡、可配置、與高層應用緊密關聯等特點。 嵌入式操作系統的高實時性是基本要求,在多任務嵌入式系統中,對重要性各不相同的任務進行統籌兼顧的合理調度是保證每個任務及時執行的關鍵,單純通過提高處理器速度是無法完成和沒有效率的,這種任務調度只能由優化編寫的系統軟件來完成,因此操作系統的高實時性是基本要求。多任務操作系統是知識集成的平臺和走向工業標準化道路的基礎。 表1
為了滿足嵌入式電子設備功能的不斷升級和日趨復雜的電氣結構,全世界EOS多達數百種,而且新的EOS不斷涌現,很多IT組織、大公司都有自己的RTOS。EOS不但支持8/16位處理器,而且能支持TriCore、ATmega 128、PA-RISC、Power PC、ARM、Strong ARM、SE3208、NIOS、ARC、AVR、HMS39C7092、LH7A404、TMS320C6711、68XXX、CPU32等32/64位RISC芯片或信號處理器DSP。新一代EOS 還具備TCP/IP、IEEE1394、USB、CAN、Bluetooth和IrDA通信接口組網協議軟件和物理層驅動軟件,采用實時多任務編程技術和交叉開發工具技術來控制功能復雜性,簡化應用程序設計、提供精巧的多媒體人機界面、保障軟件質量和縮短開發周期。就每種特定的EOS而言,其更新速度日新月異,為了及時了解EOS新的特征,筆者列舉了20世紀80-90年代一些著名的EOS,其主要特征如表1所述。 下面對1999年至2004年五年期間使用率較高的RTOS,做一詳細介紹。 (1) RTLinux是比較受歡迎而又比較成功的實時Linux實現方案之一,它既有專有版本,又有源碼開放的版本,兩種版本均可從FSMLabs公司買到。RTLinux把Linux看作是在小型RTOS下的一個低優先權任務執行軟件。只有在沒有實時任務可執行時,Linux才會運行。這種技術使RTLinux能在35μs預定時間內,在一個典型的PC兼容系統上執行周期性的任務,而標準的Linux則需要超過20ms的預定時間。這種混合方法的優點在于簡單的RTOS能夠收集實時數據,然后用戶可以利用標準Linux應用程序的功能來分析和顯示這些數據。RTLinux是源代碼開放的具有硬實時特性的多任務操作系統,它是通過底層對Linux實施改造的產物。通過在Linux內核與硬件中斷之間增加一個精巧的可搶先的實時內核,把標準的Linux內核作為實時內核的一個進程與用戶進程一起調度,標準的Linux內核的優先級最低,可以被實時進程搶斷。正常的Linux進程仍可以在Linux內核上運行,這樣既可以使用標準分時操作系統―Linux的各種服務,又能提供低延時的實時環境。RTLinux在默認的情況下采用優先級的調度策略,即系統調度器根據各個實時任務的優先級來確定執行的先后次序。優先級高的先執行,優先級低的后執行,這樣就保證了實時進程的迅速調度。同時RTLinux也支持其它的調度策略,如最短時限最先調度(EDP)、確定周期調度(RM)(周期段的實時任務具有高的優先級)。RTLinux將任務調度器本身設計成一個可裝載的內核模塊,用戶可以根據自己的實際需要,編寫適合自己的調度算法。 (2) VxWorks操作系統是美國WIND RIVER公司于1983年設計開發的一種嵌入式實時操作系統(RTOS),它是目前嵌入式系統領域中使用最廣泛,市場占有率最高的系統。它支持多種處理器,如x86、i960、Sun Sparc、Motorola MC68xxx、MIPS RX000、POWER PC等等。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中,如衛星通訊、軍事演習、彈道制導、飛機導航等。在美國的 F-16、FA-18 戰斗機,B-2 隱形轟炸機和愛國者導彈上,甚至連1997年在火星表面登陸的火星探測器上也使用到了VxWorks。 (3) QNX RTOS 兩個加拿大人Gordon Bell和Dan Dodge在1980年成立了Quantum Software Systems公司,他們根據大學時代的一些設想寫出了一個能在IBM PC上運行的名叫QUNIX(Quick UNIX)的系統,直到AT&T發律師函過來才把名字改成QNX。QNX在正式發行的1.0版就成功實現了多任務,而20世紀80年代中期Microsoft年復一年的宣布其新版的DOS將是真真正正的多任務系統的時候,QNX已經在各大公司用開了。POSIX出現后,QNX被重寫了一遍,一方面避免了被指責用戶界面與UNIX過于相似的尷尬,另一方面在保持特色的同時作了一些改進,變得更加優秀。為了與Microsoft抗衡,改名為QNX Software Systems的公司又推出了基于微內核技術的Neutrino版本,這使得QNX在嵌入式應用方面有了廣闊的前景。QNX的最新版本為QNX Neutrino RTOS Version 6.2.1 [Apr-7-2003],國內的官方網站有非商業版的下載。嵌入式系統應用最廣泛的一種操作系統是加拿大QNX公司推出的QNX RTOS操作系統。該系統可與Linux兼容,不同于Windows 98,它是一種實時系統,在存儲器的裝載周期中進行命令處理而不會延誤時間。它可以用在腎病患者換血時所需的透析設備及宇宙飛船、工藝控制設備或電訊設備中。QNX是一個實時的、可擴充的操作系統,它遵循POSIX.1(程序接口)和POSIX.2(Shell和工具),部分遵循POSIX.1b(實時擴展)。它提供了一個很小的微內核以及一些可選的配合進程。其內核僅提供4種服務:進程調度、進程間通信、底層網絡通信和中斷處理,其進程在獨立的地址空間運行。所有其它OS服務,都實現為協作的用戶進程,因此QNX內核非常小巧(QNX4.x大約為12KB)而且運行速度極快。這個靈活的結構可以使用戶根據實際的需求將系統配置成微小的嵌入式操作系統或是包括幾百個處理器的超級虛擬機操作系統。 (4) Nucleus Embedded RTOS AT的Nucleus實時操作系統可于各式中央處理機上激活各種嵌入式應用軟件,Nucleus實時操作系統為以大型項目且高成本敏感為典型著稱的移動通訊市場提供一個合乎成本效益的替代方案。 (5) Lynx實時系統公司的LynxOS是一個分布式、嵌入式、可規模擴展的實時操作系統,它遵循POSIX.1a、POSIX.1b和POSIX.1c標準,最早開發于1988年。LynxOS目前還不是一個微內核結構的操作系統,但它計劃使用所謂的“Galaxy”技術將其從大型集成化內核改造成微內核,這一技術將在LynxOS 3.0中引入。新的28KB微內核提供以下服務:核心啟動和停止、底層內存管理、出錯處理、中斷處理、多任務、底層同步和互斥支持。 (6) Real-Time Mach 分布式實時系統在現代社會中起著非常重要的作用,它廣泛應用于飛行器控制、工廠自動化等領域。但是復雜系統的設計者們缺乏系統的開發方法和分析工具,他們面臨著一個新的挑戰,即必須開發一種實時內核,為用戶提供可預測、分析的實時計算環境,它允許系統設計者在設計階段分析運行時的行為。RT-Mach 是基于這個目標而產生的一個實時操作系統內核,它是CMU在原標準Mach 微內核之上開發的實時微內核,它提供了一個公用的分布式實時計算環境[25]。與標準Mach 相比,它增加了以下特點:實時線程模型、實時調度、實時時鐘和計時器、實時同步以及實時IPC。 (7) ITRON 設在東京的Industrial TRON(the RTOS Nucleus,實時操作系統中心)或叫ITRON(工業實時操作系統中心),組織制訂嵌入式系統RTOS的標準。該組織于1987年發布了第一個ITRON規范,即ITRON1。其后,又著手開發針對8位和16位μC、有較小的功能集的μITRON規范和用于32位處理器的ITRON2規范,并于1989年發布了μITRON和ITRON2兩個技術規范。日本的TRON(The Real-time Operating system Nucleus,即實時操作系統內核)工程始于1984年,是由日本東京大學坂村健博士倡導。而ITRON是一種工業實時嵌入式操作系統,在微處理器中運行。據稱這一系統已經安裝到了全球30億到40億臺家用電子產品當中,遠遠超過Windows的普及程度,后者不過安裝到了1.5億臺計算機上。盡管在個人電腦領域知名度幾乎為零,但ITRON現在卻占據了全球實時嵌入式操作系統市場上大約70%的份額。目前,日本出售的imode電話,就是采用了TRON的技術。在2003年的年底,微軟也加入坂村健教授發起T-Engine論壇,為未來“網絡無處不在的社會”(Ubiquitous Network Society)共同努力。 (8) Microsoft Windows CE是一個簡潔的,高效率的多平臺操作系統。它不是削減的Windows95版本,而是從整體上為有限資源的平臺設計的多線程、完整優先權、多任務的操作系統。它的模塊化設計允許它對于從掌上電腦到專用的工業控制器的用戶電子設備進行定制。操作系統的基本內核需要至少200K的ROM。從SEGA的DreamCast游戲機到現在大部分的高價掌上電腦,都采用了Windows CE,但是無奈價格太高,使得整個產品的成本急劇上升。 (9) μC/OS-II是一款多任務的實時操作系統,其最關鍵部分是實時多任務內核,內核的基本功能包括:任務管理、定時器管理、存儲器管理、事件管理、系統管理、消息(隊列)管理、信號量管理等,這些管理功能都是通過應用程序接口函數API由用戶調用的。 μC/OS-II采用占先式實時內核的任務管理機制,當一個運行著的任務使一個比它優先級高的任務進入了就緒態,當前任務的CPU使用權就被剝奪了,高優先級的任務獲得CPU的控制權。占先式運行機制特別適合于對實時性要求較高的場合,可以管理64個任務,其中,系統保留8個任務,應用程序最多可以使用56個任務。μC/OS-II不支持時間片輪轉調度法,所以賦予每個任務的優先級必須是不同的。優先級號越低,任務的優先級越高。它的基本代碼尺寸不到5K字節,對存儲器容量要求低,滿足于嵌入式系統對體積的苛刻要求。μC/OS-II有完整的TCP/IP協議棧、GUI和文件管理系統,可隨內核一起移植,目前已被應用于各個領域,如照相機行業、醫療檢測儀器、音響設施等等。 (10) μCLinux是對Linux的小型化改造得到的,是高度優化的、代碼緊湊的嵌入式Linux,完全符合GNU(GNU Is Not Unix)/GPL(General Public License)公約的項目,開放代碼。雖然它的體積很小,但是μCLinux仍然保留了Linux的大多數的優點:穩定、良好的移植性,優秀的網絡功能、完備的對各種文件系統的支持,以及標準豐富的API。內存管理是μCLinux同標準Linux的最大區別。標準Linux使用的虛擬存儲器技術,而μCLinux沒有MMU管理,所以采用實存儲器管理策略。μCLinux有完整的TCP/IP協議棧,支持大量其它的網絡協議,支持NFS、ext2、ROMFS and JFFS、MS-DOS和FAT16/32等文件系統,支持GNU編譯器和命令行調試器GDB。 國內的嵌入式系統開發也已經取得了一定的成績,包括中科院的EEOS,凱思昊鵬的HOPEN OS等等。但是國內的產品很大程度上只是外國公司的附屬和擴充,技術含量很低。國內EOS市場占有率還很低,與國外的發展有很大的差距,多數公司還是依靠政策的支持、國內投資、海外上市獲得龐大的開發投資,真正的市場回報還是杯水車薪。 4 開發實例
圖2 數字化語音教室終端結構圖 圖3 μCLinux移植流程圖 面對多種多樣各具特色的嵌入式操作系統,應根據實際應用認真選擇。選擇時,主要對調試工具、性能、兼容性、內核要求的最小存儲器尺寸、軟件組件和設備驅動程序、代碼開放性及版稅等方面綜合權衡。筆者采用TI公司生產的TMS320VC5471雙核結構芯片,研制了數字化語音教室學生終端。該芯片由主處理器ARM7TDMI(簡稱ARM7)和從數字信號處理器TMS320VC5409(簡稱C5409)組成。ARM7采用馮?諾依曼結構,將指令、數據地址存儲在同一個存儲器中統一編址,依靠指令計數器提供的地址對指令、數據和地址進行區分。ARM7芯片使用單一的32位數據總線傳送指令和數據,這種并行的體系結構使ARM7控制功能要強一些,運行速度要慢一些。人機接口對速度要求是比較低的,控制功能要求較高,鑒于此由ARM7處理鍵盤、顯示器及以太網卡三部件等事務密集型控制,如圖2所示。 ARM7內部集成了一個以太網媒體存取控制模塊MAC(Media Access Control),使網絡設計大大簡化。H.323應用系統需要在Linux環境下編譯,底層的函數與標準的Linux API接口,鑒于此,在ARM內核上移植了μCLinux嵌入式操作系統。H.323應用系統、鍵盤、顯示器等用戶接口模塊均由μCLinux 統一管理和調度,移植過程如圖3所示。 DSP是采用哈佛結構的C5409芯片。哈佛結構的最大特點是計算機具有獨立的數據存儲空間、程序存儲空間和相應的數據總線和程序總線。C5409可同時進行數據訪問與指令讀寫,提高了數據吞吐率,從而提高了系統運算速度,運算密集型事務適合在C5409運行。在話音編解碼運算中,需要較高的CPU運算速度,在C5409上可以實現G.711、G.728、G.729語音編解碼算法和AAC、MP3等音頻編解碼算法。在本方案中,筆者采用比特率為16KB/s低延遲語音編碼標準G.728,編碼延遲為0.625ms。語音的采集和回放對實時性要求苛刻。為此,筆者選用硬實時性較高的μC/OS-II作為移植對象,在DSP內核上移植了μC/OS-II,其控制A/D、D/A模塊實現語音信號輸入輸出,以及實時實現語音編解碼算法。移植過程如下: (1) 用#define聲明兩個管理中斷的宏和一個定義堆棧生長方式的宏; (2) 用C語言編寫初始化任務的堆棧結構函數; (3) 用#define設置一個常量的值,并聲明10個與編譯器相關的數據類型; (4) 用DSP指令系統編寫“調用高優先級就緒任務”、“任務切換”和“時間的延時和期滿”等三個匯編語言函數。 |