摘要:VxWorks操作系統是一個高實時性和高可靠性的嵌入式操作系統,它被廣泛的應用于高精尖以及實時性要求極高的領域中。本文介紹了一種采用PC/104體系結構的硬件環境結合基于嵌入式操作系統Vxworks控制軟件實現的視頻記錄儀,并重點介紹了基于Vxworks的控制軟件實現過程。
關鍵詞:VxWorks;多任務調度;信號量;中斷
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2009)05-1246-02
VxWorks-based Video Recorder Control Software Design and Implementation
LI Xiao-kang1, GAO Rong-fang1, CHEN Jiang2
(1.School of Computer Science, Xi'an Shiyou University, Xi'an 710065, China;2.School of Computer Science, Northwestern Polytechnical University, Xi'an 710072, China)
Abstract: VxWorks is a highly real-time and reliable embeded operation system, it is widely applied in high tech scope and the scopes with high command for real-time characteristic. This paper introduces a kind of video record instrument, which based on the hardware of pc/104 architecture and the control software of the embedded operation system vxworks. this paper also highlights the realization process of control software, which based on vxworks.
Key words: Vxworks; multiple-task scheduling; semaphore; interrupt
1 引言
近年來,由于數字圖像技術的快速發展,視頻記錄儀也越來越多地應用到各個行業中。其中大部分行業對于視頻記錄議的軟硬件要求不是很高,但在某些特殊行業,比如軍用上,由于其特殊的工作環境,對于記錄議的硬件可靠性和控制軟件的實時性提出了更高的要求,并且傳統的通用操作系統已無法滿足控制軟件的高實時性要求。
本文設計了一種采用PC/104體系結構的硬件環境結合嵌入式操作系統Vxworks控制軟件的方案,該方案滿足了視頻記錄儀的可靠性和實時性要求,本文重點介紹了記錄儀控制軟件的實現。
2 視頻記錄儀的結構圖及工作原理
視頻記錄儀的硬件環境由pc\\104主板、圖像采集壓縮卡、圖像存儲器、RS232通訊口和電源等模塊組成。采用這樣的硬件結構使得整個記錄儀具有超小尺寸、超低功耗、寬溫特性、+5伏供電、高可靠性、可適用于各種惡劣環境等優點。因此,可以滿足對于記錄儀硬件的高可靠性要求。具體硬件結構如圖1所示。
工作原理:記錄儀上電后,首先對系統硬件進行初始化,然后通過串口發出開始命令后開始數據采集,并將采集到的視頻數據保存到電子硬盤中,數據采集結束后再用串口發出結束命令結束數據采集。返回地面后,記錄儀與地面PC機通過網線連接,將采集到的視頻數據傳輸到PC機上以供工作人員分析與處理。
3 實時操作系統Vxworks及其任務調度
記錄儀的控制軟件采用嵌入式操作系統VxWorks實現。VxWorks是美國WindRiver公司設計開發的一種嵌入式實時操作系統(RTOS),是一個運行在目標機上的高性能、可裁減的嵌入式實時操作系統。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中,如衛星通訊、軍事演習、彈道制導、飛機導航等。
VxWorks操作系統卓越的實時性主要是通過其精簡的內核﹑靈活的多任務調度方式﹑信號量機制和中斷機制實現的。VxWorks是采用微內核結構設計的操作系統,其Wind內核最小可以達到8KB,并且Wind內核提供了基本的多任務環境,從表面看系統中多個任務同時執行,實際上是內核根據某種任務調度策略讓它們交替運行。
3.1 VxWorks多任務調度策略
Wind內核采用基于優先級的搶占式調度算法作為它的默認調度策略,同時也提供了輪轉調度算法。Wind內核優先級劃分為256級,0及為最高優先級,255為最低優先級。通常情況下,在同優先級任務間采用時間片輪轉調度,不同優先級采用搶占式調度。
3.2 信號量
VxWorks支持各任務間通信機制,提供了多種任務間通信方式,主要有共享內存、信號量和消息隊列等。但其中信號量能提供最快速的任務間通信機制,它主要用于解決任務間的互斥與同步。針對不同類型的問題,VxWorks提供以下3中信號量:1) 二進制信號量:使用最快捷、最廣泛,主要用于同步或互斥;2) 互斥信號量:主要用于優先級繼承、安全刪除和回溯;3)計數器信號量:用于資源的數目較多的情況。
3.3 中斷
在一個實時系統中,中斷處理是至關重要的,系統通過中斷機制響應外部事件,并對外部事件作出處理,系統對中斷的響應速度和中斷服務程序的處理速度直接反映了實時系統的性能。為了快速響應中斷,中斷服務程序ISR運行在特定的空間,不同于其它任何任務,中斷處理沒有任務的上下文切換。
由于VxWorks上述的性能和優點,采用它實現視頻記錄儀的控制軟件能夠滿足系統的高實時性要求。
4 控制軟件的設計與實現
根據系統的工作原理,可將控制軟件分為以下4個模塊:1)串口控制模塊:通過串口發出一個中斷命令開始或者停止錄像;2)定時控制模塊:通過看門狗定時器控制錄像時間,防止視頻文件過大;3)圖像采集模塊:將采集的視頻圖像進行壓縮存儲,并以系統當前時間作為視頻圖像的文件名;4)網絡通訊模塊:返回地面后通過網線與PC機相連,將視頻文件傳回PC機以供分析。
嵌入式系統控制軟件設計的關鍵在于軟件實時性的保證,具體內容包括任務的劃分﹑任務優先級的確定﹑多任務間的通信機制和中斷的處理。
首先是根據系統控制軟件的功能進行任務劃分,任務的準確劃分對于整個控制軟件的設計極為關鍵,它決定了整個控制軟件實時性能的優劣。任務數目過多會造成系統運行效率降低,資源開銷增大。任務劃分過少又會造成每個任務需要實現的功能過于繁雜。
為使任務劃分合理,達到理想的目標,任務劃分的方法依據以下原則:1)以CPU為中心,將輸入/輸出設備相關的功能分別劃分為獨立的任務;2)找出關鍵任務,用一個獨立的高優先級任務或ISR實現;3)剩余的﹑按固定順序執行的功能劃分為較低優先級的任務。
根據以上劃分原則,整個系統控制軟件可劃分為4個任務:視頻圖像采集任務﹑圖像存儲任務﹑定時控制任務和網絡通訊任務,其中視頻圖像采集任務和圖像存儲任務設置為相同優先級。串口控制著圖像采集的開始與結束并且屬于外部事件,因此它應具有最高優先級,采用中斷的方式實現。定時控制按周期循環執行,將它設置為最低優先級。網絡通訊是在地面實現的功能,屬于關鍵任務,因此將它也作為最高優先級。
任務的數目和優先級確定之后,還需要考慮任務之間的通信,多任務間的通信機制決定了各任務能否同步協調運行,它主要是通過信號量實現,根據信號量的類型特點,本方案采用二進制信號量。需要注意的是,二進制信號量的初值可為empty和full,決定了它適用于不同的情況,當初值為empty時用于任務間的同步,當初值為full時用于任務間的互斥。而且信號量釋放與等待操作必須成對出現。
針對以上劃分的四個任務分析,實際上串口中斷和定時任務控制著視頻圖像存儲任務的執行,它們三者具有同步關系,它們之間的協調要通過二進制信號量實現。其中串口控制采用中斷服務程序實現,為了保證系統的實時性,必須使中斷服務程序處理時間最短,因此,在中斷服務程序中只執行釋放信號量操作。定時任務每隔一段周期向圖像存儲任務釋放一次信號量,而圖像采集任務只有等到信號量可用時才能執行,通過這樣的方式以達到三個任務之間的協調運行。
具體的程序實現過程如下:
1)主程序創建四個任務
void Dspmain()
{…
taskSpawn(\"tDSP1\", 100, 0, 10000, (FUNCPTR)DSPTask1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
taskSpawn(\"tDSP2\", 100, 0, 10000, (FUNCPTR)DSPTask2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
taskSpawn(\"tcpftp\",30,VX_FP_TASK,20480,mymain,0,0,0,0,0,0,0,0,0,0);
taskSpawn(\"sTimeControl\",110,0,5000,(FUNCPTR)TimerControl,0,0,0,0,0,0,0,0,0,0);
…}
2)創建一個中斷連接,將其與中斷服務程序綁定,并通過中斷服務程序釋放信號量
if(pciIntConnect((VOIDFUNCPTR*)INUM_TO_IVEC(INT_VEC_GET(
TIMERINTNUM)), ComInterrupt, maxnum) != 0)
void ComInterrupt(int maxnum)
{…
semGive(ControlSem1);
…}
3)圖像存儲任務等待因為等待信號量而處于阻塞狀態,當中斷產生并釋放信號量后視頻采集任務獲得信號量得以運行。
void DSPTask2(int dspnum)
{…
semTake(ControlSem1, WAIT_FOREVER);
…}
4)定時控制任務在串口發出開始命令之后通過看門狗實現每隔一固定周期釋放一次信號量,以控制圖像存儲任務的定時存儲
void TimerControl()
{while(1)
{/*啟動看門狗定時器*/
setTimer(CAPTURE_TIME,sbs_watch_dog,Time_out);
break;}}
Void setTimer(int timer,WDOG_ID sbs_watch_dog,UINT32 is_watch_dog)
{
…
if((wdStart(sbs_watch_dog,timer/TICK_MS,(FUNCPTR)OnTimer,0))==ERROR)
…
}
LOCAL void OnTimer(UINT32 is_watch_dog)
{
…
semGive(ControlSem1);
setTimer(CAPTURE_TIME,sbs_watch_dog,Time_out);
…
}
5)在返回地面后,網絡通訊任務為最高優先級,因為該任務只有在網絡連接后才被激活,因此它與串口中斷任務并不沖突。
5 結束語
本文設計的視頻記錄儀控制軟件基于嵌入式操作系統VxWorks實現,創新點在于將信號量與中斷服務程序相聯系,在中斷服務程序中只執行釋放信號量操作,從而在實現實時系統控制的同時,也避免了低優先級任務被中斷所阻塞。而且根據系統功能對任務的準確劃分極好的實現了系統的實時性,保證了記錄儀數據采集的順利完成。
參考文獻:
[1] 陳智育,溫彥軍, 陳琪. VxWorks程序開發實踐[M].北京:人民郵電出版社,2004.
[2] 王學龍.嵌入式操作系統VxWorks系統開發與應用[M].北京:人民郵電出版社,2003.
[3] VxWorks Programmer's guide 5.4[M].wind river.inc,1999.
[4] 冉義貴,昊勤章,任國強. 基于嵌入式操作系統VxWorks的SCSI硬盤高速記錄系統[J].計算機應用,2004,30(2):11-13.
[5] 李慧,李濤,楊占華,等. VxWorks下基于多任務調度的分析和研究[J].微機發展,2005,15(6):30-32.