摘要:VxWorks操作系統(tǒng)是一個(gè)高實(shí)時(shí)性和高可靠性的嵌入式操作系統(tǒng),它被廣泛的應(yīng)用于高精尖以及實(shí)時(shí)性要求極高的領(lǐng)域中。本文介紹了一種采用PC/104體系結(jié)構(gòu)的硬件環(huán)境結(jié)合基于嵌入式操作系統(tǒng)Vxworks控制軟件實(shí)現(xiàn)的視頻記錄儀,并重點(diǎn)介紹了基于Vxworks的控制軟件實(shí)現(xiàn)過(guò)程。
關(guān)鍵詞:VxWorks;多任務(wù)調(diào)度;信號(hào)量;中斷
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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 引言
近年來(lái),由于數(shù)字圖像技術(shù)的快速發(fā)展,視頻記錄儀也越來(lái)越多地應(yīng)用到各個(gè)行業(yè)中。其中大部分行業(yè)對(duì)于視頻記錄議的軟硬件要求不是很高,但在某些特殊行業(yè),比如軍用上,由于其特殊的工作環(huán)境,對(duì)于記錄議的硬件可靠性和控制軟件的實(shí)時(shí)性提出了更高的要求,并且傳統(tǒng)的通用操作系統(tǒng)已無(wú)法滿足控制軟件的高實(shí)時(shí)性要求。
本文設(shè)計(jì)了一種采用PC/104體系結(jié)構(gòu)的硬件環(huán)境結(jié)合嵌入式操作系統(tǒng)Vxworks控制軟件的方案,該方案滿足了視頻記錄儀的可靠性和實(shí)時(shí)性要求,本文重點(diǎn)介紹了記錄儀控制軟件的實(shí)現(xiàn)。
2 視頻記錄儀的結(jié)構(gòu)圖及工作原理
視頻記錄儀的硬件環(huán)境由pc\\104主板、圖像采集壓縮卡、圖像存儲(chǔ)器、RS232通訊口和電源等模塊組成。采用這樣的硬件結(jié)構(gòu)使得整個(gè)記錄儀具有超小尺寸、超低功耗、寬溫特性、+5伏供電、高可靠性、可適用于各種惡劣環(huán)境等優(yōu)點(diǎn)。因此,可以滿足對(duì)于記錄儀硬件的高可靠性要求。具體硬件結(jié)構(gòu)如圖1所示。
工作原理:記錄儀上電后,首先對(duì)系統(tǒng)硬件進(jìn)行初始化,然后通過(guò)串口發(fā)出開(kāi)始命令后開(kāi)始數(shù)據(jù)采集,并將采集到的視頻數(shù)據(jù)保存到電子硬盤(pán)中,數(shù)據(jù)采集結(jié)束后再用串口發(fā)出結(jié)束命令結(jié)束數(shù)據(jù)采集。返回地面后,記錄儀與地面PC機(jī)通過(guò)網(wǎng)線連接,將采集到的視頻數(shù)據(jù)傳輸?shù)絇C機(jī)上以供工作人員分析與處理。
3 實(shí)時(shí)操作系統(tǒng)Vxworks及其任務(wù)調(diào)度
記錄儀的控制軟件采用嵌入式操作系統(tǒng)VxWorks實(shí)現(xiàn)。VxWorks是美國(guó)WindRiver公司設(shè)計(jì)開(kāi)發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS),是一個(gè)運(yùn)行在目標(biāo)機(jī)上的高性能、可裁減的嵌入式實(shí)時(shí)操作系統(tǒng)。它以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習(xí)、彈道制導(dǎo)、飛機(jī)導(dǎo)航等。
VxWorks操作系統(tǒng)卓越的實(shí)時(shí)性主要是通過(guò)其精簡(jiǎn)的內(nèi)核﹑靈活的多任務(wù)調(diào)度方式﹑信號(hào)量機(jī)制和中斷機(jī)制實(shí)現(xiàn)的。VxWorks是采用微內(nèi)核結(jié)構(gòu)設(shè)計(jì)的操作系統(tǒng),其Wind內(nèi)核最小可以達(dá)到8KB,并且Wind內(nèi)核提供了基本的多任務(wù)環(huán)境,從表面看系統(tǒng)中多個(gè)任務(wù)同時(shí)執(zhí)行,實(shí)際上是內(nèi)核根據(jù)某種任務(wù)調(diào)度策略讓它們交替運(yùn)行。
3.1 VxWorks多任務(wù)調(diào)度策略
Wind內(nèi)核采用基于優(yōu)先級(jí)的搶占式調(diào)度算法作為它的默認(rèn)調(diào)度策略,同時(shí)也提供了輪轉(zhuǎn)調(diào)度算法。Wind內(nèi)核優(yōu)先級(jí)劃分為256級(jí),0及為最高優(yōu)先級(jí),255為最低優(yōu)先級(jí)。通常情況下,在同優(yōu)先級(jí)任務(wù)間采用時(shí)間片輪轉(zhuǎn)調(diào)度,不同優(yōu)先級(jí)采用搶占式調(diào)度。
3.2 信號(hào)量
VxWorks支持各任務(wù)間通信機(jī)制,提供了多種任務(wù)間通信方式,主要有共享內(nèi)存、信號(hào)量和消息隊(duì)列等。但其中信號(hào)量能提供最快速的任務(wù)間通信機(jī)制,它主要用于解決任務(wù)間的互斥與同步。針對(duì)不同類型的問(wèn)題,VxWorks提供以下3中信號(hào)量:1) 二進(jìn)制信號(hào)量:使用最快捷、最廣泛,主要用于同步或互斥;2) 互斥信號(hào)量:主要用于優(yōu)先級(jí)繼承、安全刪除和回溯;3)計(jì)數(shù)器信號(hào)量:用于資源的數(shù)目較多的情況。
3.3 中斷
在一個(gè)實(shí)時(shí)系統(tǒng)中,中斷處理是至關(guān)重要的,系統(tǒng)通過(guò)中斷機(jī)制響應(yīng)外部事件,并對(duì)外部事件作出處理,系統(tǒng)對(duì)中斷的響應(yīng)速度和中斷服務(wù)程序的處理速度直接反映了實(shí)時(shí)系統(tǒng)的性能。為了快速響應(yīng)中斷,中斷服務(wù)程序ISR運(yùn)行在特定的空間,不同于其它任何任務(wù),中斷處理沒(méi)有任務(wù)的上下文切換。
由于VxWorks上述的性能和優(yōu)點(diǎn),采用它實(shí)現(xiàn)視頻記錄儀的控制軟件能夠滿足系統(tǒng)的高實(shí)時(shí)性要求。
4 控制軟件的設(shè)計(jì)與實(shí)現(xiàn)
根據(jù)系統(tǒng)的工作原理,可將控制軟件分為以下4個(gè)模塊:1)串口控制模塊:通過(guò)串口發(fā)出一個(gè)中斷命令開(kāi)始或者停止錄像;2)定時(shí)控制模塊:通過(guò)看門狗定時(shí)器控制錄像時(shí)間,防止視頻文件過(guò)大;3)圖像采集模塊:將采集的視頻圖像進(jìn)行壓縮存儲(chǔ),并以系統(tǒng)當(dāng)前時(shí)間作為視頻圖像的文件名;4)網(wǎng)絡(luò)通訊模塊:返回地面后通過(guò)網(wǎng)線與PC機(jī)相連,將視頻文件傳回PC機(jī)以供分析。
嵌入式系統(tǒng)控制軟件設(shè)計(jì)的關(guān)鍵在于軟件實(shí)時(shí)性的保證,具體內(nèi)容包括任務(wù)的劃分﹑任務(wù)優(yōu)先級(jí)的確定﹑多任務(wù)間的通信機(jī)制和中斷的處理。
首先是根據(jù)系統(tǒng)控制軟件的功能進(jìn)行任務(wù)劃分,任務(wù)的準(zhǔn)確劃分對(duì)于整個(gè)控制軟件的設(shè)計(jì)極為關(guān)鍵,它決定了整個(gè)控制軟件實(shí)時(shí)性能的優(yōu)劣。任務(wù)數(shù)目過(guò)多會(huì)造成系統(tǒng)運(yùn)行效率降低,資源開(kāi)銷增大。任務(wù)劃分過(guò)少又會(huì)造成每個(gè)任務(wù)需要實(shí)現(xiàn)的功能過(guò)于繁雜。
為使任務(wù)劃分合理,達(dá)到理想的目標(biāo),任務(wù)劃分的方法依據(jù)以下原則:1)以CPU為中心,將輸入/輸出設(shè)備相關(guān)的功能分別劃分為獨(dú)立的任務(wù);2)找出關(guān)鍵任務(wù),用一個(gè)獨(dú)立的高優(yōu)先級(jí)任務(wù)或ISR實(shí)現(xiàn);3)剩余的﹑按固定順序執(zhí)行的功能劃分為較低優(yōu)先級(jí)的任務(wù)。
根據(jù)以上劃分原則,整個(gè)系統(tǒng)控制軟件可劃分為4個(gè)任務(wù):視頻圖像采集任務(wù)﹑圖像存儲(chǔ)任務(wù)﹑定時(shí)控制任務(wù)和網(wǎng)絡(luò)通訊任務(wù),其中視頻圖像采集任務(wù)和圖像存儲(chǔ)任務(wù)設(shè)置為相同優(yōu)先級(jí)。串口控制著圖像采集的開(kāi)始與結(jié)束并且屬于外部事件,因此它應(yīng)具有最高優(yōu)先級(jí),采用中斷的方式實(shí)現(xiàn)。定時(shí)控制按周期循環(huán)執(zhí)行,將它設(shè)置為最低優(yōu)先級(jí)。網(wǎng)絡(luò)通訊是在地面實(shí)現(xiàn)的功能,屬于關(guān)鍵任務(wù),因此將它也作為最高優(yōu)先級(jí)。
任務(wù)的數(shù)目和優(yōu)先級(jí)確定之后,還需要考慮任務(wù)之間的通信,多任務(wù)間的通信機(jī)制決定了各任務(wù)能否同步協(xié)調(diào)運(yùn)行,它主要是通過(guò)信號(hào)量實(shí)現(xiàn),根據(jù)信號(hào)量的類型特點(diǎn),本方案采用二進(jìn)制信號(hào)量。需要注意的是,二進(jìn)制信號(hào)量的初值可為empty和full,決定了它適用于不同的情況,當(dāng)初值為empty時(shí)用于任務(wù)間的同步,當(dāng)初值為full時(shí)用于任務(wù)間的互斥。而且信號(hào)量釋放與等待操作必須成對(duì)出現(xiàn)。
針對(duì)以上劃分的四個(gè)任務(wù)分析,實(shí)際上串口中斷和定時(shí)任務(wù)控制著視頻圖像存儲(chǔ)任務(wù)的執(zhí)行,它們?nèi)呔哂型疥P(guān)系,它們之間的協(xié)調(diào)要通過(guò)二進(jìn)制信號(hào)量實(shí)現(xiàn)。其中串口控制采用中斷服務(wù)程序?qū)崿F(xiàn),為了保證系統(tǒng)的實(shí)時(shí)性,必須使中斷服務(wù)程序處理時(shí)間最短,因此,在中斷服務(wù)程序中只執(zhí)行釋放信號(hào)量操作。定時(shí)任務(wù)每隔一段周期向圖像存儲(chǔ)任務(wù)釋放一次信號(hào)量,而圖像采集任務(wù)只有等到信號(hào)量可用時(shí)才能執(zhí)行,通過(guò)這樣的方式以達(dá)到三個(gè)任務(wù)之間的協(xié)調(diào)運(yùn)行。
具體的程序?qū)崿F(xiàn)過(guò)程如下:
1)主程序創(chuàng)建四個(gè)任務(wù)
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)創(chuàng)建一個(gè)中斷連接,將其與中斷服務(wù)程序綁定,并通過(guò)中斷服務(wù)程序釋放信號(hào)量
if(pciIntConnect((VOIDFUNCPTR*)INUM_TO_IVEC(INT_VEC_GET(
TIMERINTNUM)), ComInterrupt, maxnum) != 0)
void ComInterrupt(int maxnum)
{…
semGive(ControlSem1);
…}
3)圖像存儲(chǔ)任務(wù)等待因?yàn)榈却盘?hào)量而處于阻塞狀態(tài),當(dāng)中斷產(chǎn)生并釋放信號(hào)量后視頻采集任務(wù)獲得信號(hào)量得以運(yùn)行。
void DSPTask2(int dspnum)
{…
semTake(ControlSem1, WAIT_FOREVER);
…}
4)定時(shí)控制任務(wù)在串口發(fā)出開(kāi)始命令之后通過(guò)看門狗實(shí)現(xiàn)每隔一固定周期釋放一次信號(hào)量,以控制圖像存儲(chǔ)任務(wù)的定時(shí)存儲(chǔ)
void TimerControl()
{while(1)
{/*啟動(dòng)看門狗定時(shí)器*/
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)在返回地面后,網(wǎng)絡(luò)通訊任務(wù)為最高優(yōu)先級(jí),因?yàn)樵撊蝿?wù)只有在網(wǎng)絡(luò)連接后才被激活,因此它與串口中斷任務(wù)并不沖突。
5 結(jié)束語(yǔ)
本文設(shè)計(jì)的視頻記錄儀控制軟件基于嵌入式操作系統(tǒng)VxWorks實(shí)現(xiàn),創(chuàng)新點(diǎn)在于將信號(hào)量與中斷服務(wù)程序相聯(lián)系,在中斷服務(wù)程序中只執(zhí)行釋放信號(hào)量操作,從而在實(shí)現(xiàn)實(shí)時(shí)系統(tǒng)控制的同時(shí),也避免了低優(yōu)先級(jí)任務(wù)被中斷所阻塞。而且根據(jù)系統(tǒng)功能對(duì)任務(wù)的準(zhǔn)確劃分極好的實(shí)現(xiàn)了系統(tǒng)的實(shí)時(shí)性,保證了記錄儀數(shù)據(jù)采集的順利完成。
參考文獻(xiàn):
[1] 陳智育,溫彥軍, 陳琪. VxWorks程序開(kāi)發(fā)實(shí)踐[M].北京:人民郵電出版社,2004.
[2] 王學(xué)龍.嵌入式操作系統(tǒng)VxWorks系統(tǒng)開(kāi)發(fā)與應(yīng)用[M].北京:人民郵電出版社,2003.
[3] VxWorks Programmer's guide 5.4[M].wind river.inc,1999.
[4] 冉義貴,昊勤章,任國(guó)強(qiáng). 基于嵌入式操作系統(tǒng)VxWorks的SCSI硬盤(pán)高速記錄系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2004,30(2):11-13.
[5] 李慧,李濤,楊占華,等. VxWorks下基于多任務(wù)調(diào)度的分析和研究[J].微機(jī)發(fā)展,2005,15(6):30-32.