如今,嵌入式產品設計師已把嵌入式設計普遍用於專用的、非PC設備之中。我們每天在電話、汽車、家電、玩具、收款機、電子游戲機、保安系統、環境監控和個人電子器具上到處都要用嵌入式處理器,有的甚至每天要與其打上幾百次的交道。眼下,第二次浪潮又將來臨,因為上述的這些設備要與因特網或本地通信網連接。而且,要使這些產品之間的公共鏈接具有與用戶、外部事件和通信頻道實時交換信息的能力。
如果你留心看過十幾歲的孩子是怎樣玩游戲機的,那你就會明白"實時"是什麼意思了。設想,游戲機裡編的程序要捕捉到所有標明方向性的移動或槍炮火力的輸入信息。與此同時,還要不斷地顯示更新動作的畫面,而且顯示的圖像還不能讓人覺察出計算機的延遲。這就需要實時操作系統(RTOS)確保你的例行程序能及時地響應外部事件並准時進行操作。你要設定優先級和數據的相關性質,用RTOS來管理應用軟件,即使是外部的實時活動很不穩定,也能及時捕捉到。你可以獨立地編寫每個軟件程序,不要因為內部作業的定時問題而陷入泥塘。通過例行程序之間的信息互遞使用戶感覺到,一切都在同時運行。
RTOS像一種高級語言,應該能使開發工作更容易進行,甚至提前完成,但要選擇正好適用於嵌入式產品的RTOS,也不是一件輕而易舉的事情。與台式機系統可選擇品種很有限不同,可供選擇的操作系統差不多有200種之多,而每種軟件的差異卻都很微妙而且難以捉摸。RTOS供應廠家相互的關系也在不斷地變化。隨著Wind River Systems公司對Integrated Systems公司的收購,兩種最流行的RTOS(VxWorks和p SOS)現在已同是一家人。在安裝RTOS之前,你應該先了解一下有關諸如調度算法、信號傳送特征、存儲器要求、等待時間、工具的支持以及價格模型等方面的知識。要不,你想另辟蹊徑,冒些風險,撇開市場上的RTOS,自己編寫自用的實時例行程序。
硬實時還是軟實時?
實時系統自動執行軟件程序,或且能自動響應外部事件的作業。RTOS廠家還發明了幾個術語,例如,"硬"實時和"軟"實時,用以描述它們系統的操作。硬實時系統的時間安排是事先排定的,所以各種作業保證從外部事件的響應起,在精確的時間限度內開始執行。硬實時系統是確定型的。軟實時系統通常會排列起始例行程序的平均時間長度,但有一個小的概率,那就是最大的時間會很長。任務要求十分嚴格的應用項目必須是確定型的。例如,汽車保險氣袋控制器、反鎖剎車,甚至放在走廊的游戲機等都必須在既定時間內要有反應。軟實時的應用項目通常是在幾秒之內響應。當然,偶爾也會有慢一些反應的,但問題也不大。
多作業RTOS的基本結構包括一個程序接口、內核程序、器件驅動程序及供選用的服務模塊。圖1是典型全功能RTOS的框圖。內核程序是操作系統的核心,它可提供中斷處理程序、作業調度、資源共享標記及存儲管理程序。對內核應用編程接口的調用,要求內核的服務。在實時操作期間,內核處於連續工作狀態,存儲器也必須保持在駐留狀態。QNX Software公司的Neutrino操作系統則是采用微內核結構的另一種方法,把傳統的內核成份納入到選項模塊。
內核程序的基本功能之一是處理由外部或內部事件引起的中斷。當中斷發生時,處理器將控制轉給登錄在中斷程序中的中斷服務例行程序,並向調度程序發一個消息,然後再返,回正在執行中的程序。中斷服務例行程序一般是用匯編語言編寫的,這種程序必須很短,因為大多數RTOS在這些程序的執行過程中會禁止全局中斷。內核程序也包括設備應用程序執行順序的調度程序。軟件由許多單項作業組成,每項都有其入口點、優先級和堆棧位置。優先級保證級別高的作業先於級別低的作業運行,以保持確定型的響應時間。
RTOS在調度技術上並不完全一樣。它們采用先進先出和循環的方法,調度優先級相同的線索。如果作業中沒有一個作業的規定時間比組合作業的執行時間短,這個方法就行得通。這種調度方法類似於軟件對所有中斷輸入進行巡回探查。對循環調度技術的簡單修改是加入了時間分片,這樣,可保證即使在一些作業的完成要很長時間的作業中每個作業都有一定的處理器時間。但是時間分片是在作業之間均等分配處理器時間,無法保證RTOS先執行時間要求嚴格的那些作業。
最常用的調度技術是搶先作業的排優先級調度法。各種作業可以先占優先級較低的作業。並占用處理器直到作業完成,或直到優先級更高的作業把他們擠開。這種技術要求仔細地分派優先級,以確保各種作業都能准時完成。大多數RTOS廠家都把工具軟件包括進去,以分析優先級調度並觀察結果。例如,Accelerated Technology公司Nucleus Plus的SurroundView就提供現實運行應用層的數據監控和作業組合畫面(圖2)。
每次都應准時
調度技術的根本要求是,按任務的規定執行時間定其優先級。這種方法允許調度程序在運行中改變其他作業的優先級,以確保每項任務能准時完成。該法的特點是,在調度安排每項新的任務前,要耗費很多時間去計算完成每項任務的規定時間。到目前為止,動態調度還只限於研究課題和機器人技術試驗上。即使是最好的調度算法也會有問題。Mars Pathfinder火星路徑探測器項目的RTOS優先級顛倒問題是眾所周知的。為了說明這個概念,我們假設一個運行時間長而優先級低的一項任務調用一個優先級高的任務。內核程序把正在運行作業的優先級改為最高優先級子元素的優先級。除非高優先級例行程序已完成,調度程序將優先級復位,否則低優先級任務會阻斷中優先級的作業,這樣就發生了優先級顛倒。解決這種顛倒問題的一項技術是優先級繼承,由調度程序自動重新指定高優先級任務的優先級,使其與調用作業的一樣。
除了優先級調度外,實時內核程序也提供作業同步的目標。以執行打印任務的操作為例,如果幾個任務同時要求打印,也一定要等到打印機能接收下一個字符為止才行,否則打印出來的東西就會混淆不清。每項任務發出的字符會在打印紙上混在一起。RTOS處理這種情況時有一個目標,叫信號量。使用打印機的第一項任務鎖定在相關的信號量上,直到打印完成為止。其他要打印的任務必須等到信號量開鎖,才開始執行下一次打印任務。這時優先級最高的任務(或等待時間最長的任務)獲得信號量。信號量也可能允許不止一項任務同時使用某個資源。在這種情況下,程序員要起動一個計數的信號量,並規定同時使用的用戶數量最多是多少個。
存儲器分配也是內核程序的事,這時實時系統的功能有影響。當每項新的任務開始執行時,存儲器分配模塊就開始搜索夠這一項任務用的自由存儲器塊。根據分散的不同情況,存儲器搜索的時間也各不相同,並構成任務轉換的等待時間的一部分。幸運的是,大多數RTOS都先有准備,對存儲器預留了固定的位置,以跳過這種忽長忽短的搜索時間。對於Green Hills Software公司的Integrity2000型RTOS,作業是在他們自己的存儲器分段上運行,申請內核服務時要通過中斷機制,防止作業直接存取內核程序,或弄環關鍵的內核數據結構(圖3)。
在如何縮短等待時間,以致不會降低實時系統功能問題上,內核程序的設計是極為重要的。中斷等待,是外部事件間到中斷例行程序第一條指令間最環的延遲,就像關機停止運行一樣。如果處理器中斷被起動,硬件延遲會短得多,通常是幾毫微秒時間,但隨處理器的不同也有所差別。在轉向請求中斷單元之前,處理器只要求完成現行的指令。如果處理器只有一條中斷線,要求巡回探查以決定調用哪一個中斷例行程序的時間,就是中斷等待時間的一部分。你也可以用應用軟件來改變中斷等待時間,方法是禁止程序中時間嚴格部分的中斷。例如,如果你禁止中斷生成輸出引腳上一個已知的脈沖寬度,中斷等待時間會至少就與脈沖一樣長。
脫離前後關系
內核引起的另一種等待時間,是串聯前後任務轉換所用時間造成的。每項任務都有一個程序計數器、數據區域指針、寄存器數據及其他狀態信息,這些信息內核程序必須為現行作業而保存,為搶先作業而恢復。有些操作系統也要求在前後相關轉接被批准前,系統調用要返回應用軟件。你可以很容易地用示波器和邏輯分析儀,測出這些等待的平均時間。但是在產品到達用戶手上前,那些引起等待時間過長和隱含災難性等待時間的最環情況組合,卻不一定會顯現出來。
在內核程序之外,RTOS廠家又加了各種選用模塊,誘使你在下一個應用項目中還用他們的產品。例如,幾乎每個RTOS都納入了互連網通信規約,如TCP/IP(傳輸控制規約/互連網規約)。大多數主要的RTOS廠家,還提供圖形用戶接口例行程序。用戶可以根據應用的實際需要,增加或刪去這些模塊。最近,QNX Software公司還把多媒體功能擴展到自己的RTOS裡,以進入游戲和娛樂的市場。選用模塊提供解碼功能,以支持流行的音頻或視頻格式,並與三維效果的插卡接口。RTOS的廠家常與第三方軟件開發商結伙,擴大其選項模塊的市場。
如果你的應用程序涉及繁重的數據處理,你就應該討教一下RTOS,它能很容易地按比例化分成多個處理器。你可以把任務分攤給幾個處理器,這樣,可以明顯地提高功效。像雷達和聲納那樣的應用項目,光分析信號就要用幾百個處理器。Eonic Systems公司的Virtuoso DSP RTOS允許設計師不用過問系統中處理器的數量和連接方法。這種RTOS提供通信和同步服務程序,使多處理變得透明。
大多數RTOS都是為32位處理器設計的。應用的復雜性和多實時輸入項目,使軟件開發成為龐大的隊伍;這對商用RTOS的開發倒是理想的情況。如果你的處理器降一檔,只有16位時,如大多數用戶是汽車行業,歐洲的制造廠商們則創造了一種為汽車應用服務的瘦型RTOS標准,叫作OSEK(OSEK這幾個大寫字母取自"Open Systems and interfaces for in-car electronics""車內電器用開放系統和接口")。雖然8位微處理器仍在處理現實生活中絕大多數的實時應用,但卻幾乎沒有8位的RTOS。許多這類系統相當小,完全可以把實時處理納入應用程序中。不過,也支持8051和6800處理器的商用RTOS。
編寫自己的軟件
自編的操作系統仍占實時操作系統中相當大的比例。有時一個小的系統生成已多年,還有很多世襲下來的代碼程序,很難變成商用產品。設計師們往往堅持要全面控制硬件和軟件,聲稱只有他們才能生產出最小、最便宜而且是速度最快的產品。編寫一個實時應用程序也的確是一個不小的工程,是一種不小的挑戰。而且,預算資金少、計劃周期短,這些因素都在幫RTOS廠家促銷他們的軟件的大忙。關於RTOS決定是買還是自編的全面討論,請閱參考文獻1。
在選擇RTOS時,鏈鎖開發工具是另一個大問題。在開發中,為了能快速地存取編輯程序、編譯程序、鏈接程序、下載程序和運行時使用的工具軟件,你會把軟件開發和調試的大部分精力,都花在和一體化開發環境(IDE)打交道上。在改變你的IDE之前,一定先要考慮成本,因為一套新的工具,可能會要求一個相當龐大的學習曲線。有一些廠家的工具也可能會成功地配合你的IDE。例如,Mentor Graphics公司的X Ray調試程序是一種很流行的工具,而且已被收集在大全型的鏈鎖工具集中(圖4)。參考文獻2則匯集了調試程序特性和生產廠家。軟件廠家也提供軟件功能的分析工具,幫助用戶剖析和觀察自己軟件中的實時活動。許多這類分析工具都帶有選擇項的,你要仔細考慮,否則會增加你的工具總成本。
在購買時要做的另一個決定是:你是否需要(或想要)廠家的RTOS源代碼。有些廠家在你買他們的軟件時,就自動提供源碼。如果你需要更多的存儲器空間,你可以逼迫軟件,要它把程序沒占用的每一行都騰出來。源代碼還會幫助你了解你的應用程序中的那些隱藏障礙。不過,只提供目的代碼的廠家宣稱,如果你改動了源碼,你就生成了一個獨特而無法得到支持的RTOS。你應該總是買一份源碼副本放在系統的文件中,或提供給你的用戶。源碼來自Accelerated Technology公司的Nucleus Plus操作系統和Embedded Systems Products公司的RTXC操作系統(www.rtxc.com)。
你可能會驚奇地發現,商用操作系統的價格差別很大。因為像軟件這樣的商品基本上無法討論成本,廠家可以調整其價格模型從各種來源以產生收益。廠家可以收取初始許可證費、每位工程師的開發坐位費、開發工具費、按單位計算的專利費、繼續支持費、或主要升級費等各種名名目的費用。為了公平地比較價格,你必須計算你考慮之中的每個RTOS所有權的全部成本。你的計算必須包括產品壽命期內你計劃分發的單位數量。例如,Green Hill Software公司對購買其編譯程序和開發工具的用戶,免收VeIOSity RTOS專利費。
展望未來,實時軟件會成為今後嵌入式產品的規范。用戶要求響應速度更快、功能更強和瞬時數據存取的功能,這些都會加大嵌入式產品的設計難度。典型的項目開發配置要有一個32位的處理器,一個大的軟件開發組和一個RTOS。幸運的是,實時產品的廠家會提供多種現成的軟件模塊,你用不著再費心發明標准功能。所以,請上網選址浏覽,選你中意的RTOS,加入實時的革命。
摘自:http://www.oso.com.cn