宋桂景,崔美英,班亞明
(中國(guó)電子科技集團(tuán)公司第五十四研究所,河北石家莊050081)
近年來,隨著嵌入式計(jì)算技術(shù)的不斷發(fā)展,VxWorks嵌入式實(shí)時(shí)操作系統(tǒng)以高度可裁減的微內(nèi)核、高效的多任務(wù)調(diào)度和靈活的任務(wù)間通信等優(yōu)點(diǎn)在目前的衛(wèi)星通信領(lǐng)域中得到了廣泛應(yīng)用。VxWorks作為一種嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng),是指能在確定的時(shí)間內(nèi)執(zhí)行其功能,并對(duì)外部的異步事件作出實(shí)時(shí)響應(yīng)的計(jì)算機(jī)系統(tǒng)。在通信系統(tǒng)內(nèi)部,管理代理終端設(shè)備以及信道設(shè)備之間大多是以串口連接,通過串口進(jìn)行一些控制指令的交互和數(shù)據(jù)的傳輸。串口在嵌入式系統(tǒng)中是一類重要的數(shù)據(jù)通信接口,其本質(zhì)功能是作為CPU和串行設(shè)備間的編碼轉(zhuǎn)換器。應(yīng)用程序在多串口間的通信方式,就是利用實(shí)時(shí)的多任務(wù)靈活調(diào)度機(jī)制來實(shí)現(xiàn)的數(shù)據(jù)通信的方式。
在VxWorks的多串口卡設(shè)計(jì)中,應(yīng)遵循以下3個(gè)原則:
①盡量選用目前通用的嵌入式核心模塊;
②選用方便可靠的多串口擴(kuò)展模塊;
③程序設(shè)計(jì)框架要實(shí)用,方便串口信息的增加或刪減。
在VxWorks的多串口卡硬件設(shè)計(jì)中,采用高集成度小型化的設(shè)計(jì)思想,選用具有獨(dú)立功能的嵌入式CPU核心模塊——PowerPC 8270處理器模塊作為核心單元,外接多串口擴(kuò)展模塊。按照功能類型劃分,該種設(shè)計(jì)方式主要由3部分組成:核心單元、串口擴(kuò)展單元以及串口轉(zhuǎn)換單元,硬件原理框圖如圖1所示。

圖1 原理框圖
1.1.1 核心單元
該mpc8270核心單元具有豐富的通信接口、大量數(shù)據(jù)傳輸能力、實(shí)時(shí)/多任務(wù)復(fù)雜邏輯和過程處理能力。在8270核心模塊上運(yùn)行嵌入式操作系統(tǒng)和應(yīng)用軟件,實(shí)現(xiàn)業(yè)務(wù)接入、監(jiān)視控制等功能。該核心模塊自帶2個(gè)低速串口,可直接連接串口轉(zhuǎn)換芯片,一般在系統(tǒng)應(yīng)用中采用其中的1個(gè)串口作為打印串口以監(jiān)測(cè)通信狀態(tài)。其硬件框圖如圖2所示。

圖2 Mpc8270核心模塊原理框圖
1.1.2 串口擴(kuò)展單元
該設(shè)計(jì)實(shí)現(xiàn)串口擴(kuò)展采用2種方式:采用基于PCI總線接口芯片XR17V258IV可擴(kuò)展出8個(gè)串口,通過可編程邏輯芯片(FPGA)實(shí)現(xiàn)串口的進(jìn)一步擴(kuò)展。XR17V258IV是基于PCI總線串口的單芯片解決方案,該串口擴(kuò)展卡可以很容易地?cái)U(kuò)展為8個(gè)串口,而不需要進(jìn)行硬件的更改和時(shí)鐘時(shí)序調(diào)整;該設(shè)計(jì)還可以利用總線,通過FPGA進(jìn)一步實(shí)現(xiàn)串口的擴(kuò)展,該方法在可編程邏輯芯片內(nèi)實(shí)現(xiàn),對(duì)于串口的擴(kuò)展以及管腳的分配更為方便,所以應(yīng)用更為靈活。
雖然多數(shù)學(xué)者原則上支持會(huì)聚研究和組織結(jié)構(gòu)創(chuàng)新,但在涉及本人或部門利益時(shí)往往退縮。因此,探索有效的機(jī)構(gòu)組織形式,在兼顧現(xiàn)有組織文化的同時(shí)創(chuàng)建以科學(xué)或社會(huì)挑戰(zhàn)為核心的新型研究組織方式,制定合理的會(huì)聚項(xiàng)目評(píng)審標(biāo)準(zhǔn)、任務(wù)分配制度和績(jī)效考核指標(biāo),以促進(jìn)不同學(xué)科背景的科研人員間高效的合作伙伴關(guān)系,是科研機(jī)構(gòu)亟待解決的問題。
1.1.3 串口轉(zhuǎn)換單元
串口轉(zhuǎn)換單元可以根據(jù)實(shí)際需要進(jìn)行電平轉(zhuǎn)換:TTL/RS232、TTL/RS485、TTL/RS422,以連接外部數(shù)據(jù)通信接口。
VxWorks實(shí)時(shí)內(nèi)核Wind提供了基本的多任務(wù)環(huán)境。VxWorks操作系統(tǒng)中任務(wù)調(diào)度算法有時(shí)間片輪轉(zhuǎn)、優(yōu)先級(jí)搶占和獨(dú)占資源。時(shí)間片輪轉(zhuǎn)算法依據(jù)時(shí)間片的分配來為任務(wù)分配CPU資源,優(yōu)先級(jí)搶占算法指在任務(wù)生成之時(shí)都分配有不同或相同的優(yōu)先級(jí),獨(dú)占資源式算法指任務(wù)獨(dú)占CPU資源。采用優(yōu)先級(jí)搶占式資源調(diào)度算法更貼近實(shí)際,在VxWorks中,需要盡快處理的設(shè)置為高優(yōu)先級(jí)。而獨(dú)占資源或時(shí)間片輪轉(zhuǎn)的調(diào)度方式都是面向同優(yōu)先級(jí)任務(wù)的。在該設(shè)計(jì)中采用優(yōu)先級(jí)搶占調(diào)度和時(shí)間片輪轉(zhuǎn)調(diào)度相結(jié)合的方式。
1.2.1 多任務(wù)交互
在8270核心模塊上運(yùn)行VxWorks嵌入式操作系統(tǒng)和應(yīng)用軟件,實(shí)現(xiàn)實(shí)時(shí)多串口通信的信息交互。多串口通信中多任務(wù)間的交互方式用到主要以下3種:
①共享內(nèi)存:將需要共享的數(shù)據(jù)聲明為全局變量;
②信號(hào)量:提供簡(jiǎn)單的同步和互斥機(jī)制;
③消息隊(duì)列或管道:任務(wù)間傳輸帶有數(shù)據(jù)的消息(為長(zhǎng)度、數(shù)目可變的一組數(shù)據(jù)進(jìn)行排隊(duì))。
1.2.2 通信流程
在利用VxWorks操作系統(tǒng)進(jìn)行多串口通信,必須在串口通信使用之前向操作系統(tǒng)提出資源申請(qǐng)要求(打開串口),并進(jìn)行串口配置,通信完成后必須釋放資源(關(guān)閉串口)。
針對(duì)VxWorks的上述通信機(jī)制,為每個(gè)串口創(chuàng)建1個(gè)串口守候接收任務(wù),1個(gè)發(fā)送任務(wù),同時(shí)為每個(gè)串口建立1個(gè)二進(jìn)制信號(hào)量。建立1個(gè)主處理任務(wù)的消息隊(duì)列,同時(shí)還需啟動(dòng)看門狗的定時(shí)功能。通信數(shù)據(jù)流程如圖3所示。

圖3 串口任務(wù)數(shù)據(jù)流程
串口通信在命令狀態(tài)下對(duì)數(shù)據(jù)的實(shí)時(shí)性要求要稍低一些,所以串口接收守候任務(wù)在命令狀態(tài)下,接收到數(shù)據(jù)、搜幀,而后加上標(biāo)志發(fā)送到主處理任務(wù)的消息隊(duì)列,由主處理任務(wù)根據(jù)標(biāo)志在分發(fā)到相應(yīng)的處理函數(shù)進(jìn)行處理。而在數(shù)據(jù)狀態(tài)下,對(duì)數(shù)據(jù)的實(shí)時(shí)性要求要高,因此可以通過激活二進(jìn)制信號(hào)量,啟動(dòng)數(shù)據(jù)狀態(tài)下的數(shù)據(jù)接收,此時(shí)將數(shù)據(jù)內(nèi)容放入環(huán)形緩存中,對(duì)應(yīng)接收端有一個(gè)數(shù)據(jù)收指針。
串口數(shù)據(jù)發(fā)送任務(wù)獲取二進(jìn)制信號(hào)量,對(duì)應(yīng)發(fā)送端有發(fā)送指針,通過發(fā)送指針從對(duì)應(yīng)環(huán)形緩存中取得數(shù)據(jù)發(fā)送。
主處理任務(wù)可以接收多個(gè)串口接收任務(wù)和看門狗等其他任務(wù)發(fā)送過來的消息,根據(jù)消息的標(biāo)志分配給不同的數(shù)據(jù)處理函數(shù)進(jìn)行處理。
各數(shù)據(jù)處理函數(shù)采用狀態(tài)機(jī)實(shí)現(xiàn)業(yè)務(wù)的處理,就是將一項(xiàng)工作分成若干階段,明確指定在每階段應(yīng)該做什么,以及下一步可以做什么的轉(zhuǎn)移,狀態(tài)機(jī)是一個(gè)有向圖,由一組節(jié)點(diǎn)和一組相應(yīng)的轉(zhuǎn)移函數(shù)組成,節(jié)點(diǎn)即工作流中的某個(gè)環(huán)節(jié),而轉(zhuǎn)移函數(shù)對(duì)應(yīng)的是業(yè)務(wù)邏輯層的某一個(gè)對(duì)應(yīng)類中的方法集合,轉(zhuǎn)移函數(shù)返回“下一個(gè)”節(jié)點(diǎn)。此種處理方式可以方便地增加狀態(tài)信息的處理。
在實(shí)時(shí)通信應(yīng)用中,對(duì)時(shí)間的處理是至關(guān)重要的。需要將操作系統(tǒng)中的時(shí)間片與現(xiàn)實(shí)時(shí)間聯(lián)系在一起,函數(shù)接口sysClkRateGet用于獲取每秒產(chǎn)生的時(shí)間片數(shù)量,時(shí)間片函數(shù)taskDelay具有延時(shí)和任務(wù)調(diào)度的功能,任務(wù)在調(diào)用了taskDelay后,會(huì)被系統(tǒng)放置在等待隊(duì)列中,此時(shí)CPU資源被讓出,開始執(zhí)行就緒隊(duì)列中的下一個(gè)任務(wù),當(dāng)系統(tǒng)核心在調(diào)度時(shí)發(fā)現(xiàn)延時(shí)完成后,該任務(wù)會(huì)被放置在就緒隊(duì)列末尾等待CPU資源,此種調(diào)度方式會(huì)導(dǎo)致定時(shí)不準(zhǔn)確。看門狗計(jì)時(shí)可以提供比較精確的計(jì)時(shí),定時(shí)時(shí)間一到,所安排的任務(wù)將以中斷級(jí)別執(zhí)行,會(huì)打斷大部分的任務(wù)執(zhí)行。看門狗計(jì)時(shí)方式比taskDelay消耗了更多的系統(tǒng)資源,但更精確,可以用于延時(shí)、計(jì)時(shí)和定時(shí)。
該設(shè)計(jì)中,采用模塊化的思想,主要由2個(gè)方面來體現(xiàn)。
①數(shù)據(jù)處理函數(shù)模塊化:因?yàn)橥粋€(gè)物理串口可以根據(jù)實(shí)際需要連接不同的串口設(shè)備,所以在實(shí)際設(shè)計(jì)中可以按照實(shí)際應(yīng)用分為不同的數(shù)據(jù)處理函數(shù)來處理;
②函數(shù)狀態(tài)模塊化:采用狀態(tài)轉(zhuǎn)移來實(shí)現(xiàn)不同狀態(tài)的數(shù)據(jù)通信。在不同的狀態(tài)可以通過消息隊(duì)列接收不同的消息來處理。此種數(shù)據(jù)處理方式擴(kuò)展和分析問題都很方便,可以根據(jù)需要增加某個(gè)函數(shù)的處理,同時(shí)在數(shù)據(jù)狀態(tài)處理中,既可以根據(jù)需要增加1條消息的處理,又可以根據(jù)需要增加1個(gè)狀態(tài)的處理。
在該電路設(shè)計(jì)中,核心模塊通過PCI總線接口芯片XR17V258IV擴(kuò)展出8個(gè)串口,通過可編程邏輯芯片F(xiàn)PGA擴(kuò)展出4個(gè)串口,共12個(gè)串口,其中6個(gè)連接數(shù)據(jù)終端設(shè)備(可以連接計(jì)算機(jī)終端),6個(gè)連接數(shù)據(jù)通信設(shè)備(可連接調(diào)制解調(diào)器Modem)。
利用計(jì)算機(jī)自帶的通訊工具—超級(jí)終端進(jìn)行通信測(cè)試,打開超級(jí)終端,設(shè)置通信速率,通過信道Modem向?qū)Χ税l(fā)起呼叫,可測(cè)試呼叫成功率(測(cè)試命令狀態(tài)下的通信),以及數(shù)據(jù)通信中報(bào)文發(fā)送成功率(測(cè)試數(shù)據(jù)狀態(tài)下的通行,其中涉及到數(shù)據(jù)流控的處理)。測(cè)試結(jié)果如表1所示。經(jīng)過多次呼叫和數(shù)據(jù)通信,測(cè)試結(jié)果滿足實(shí)際要求。實(shí)際數(shù)據(jù)通信中需要考慮信道狀態(tài)是否良好。

表1 通信測(cè)試結(jié)果
該串口卡設(shè)計(jì)綜合考慮了系統(tǒng)中多任務(wù)程序的設(shè)計(jì)及任務(wù)間的通信機(jī)制,該設(shè)備已在某工程中應(yīng)用,滿足系統(tǒng)對(duì)各個(gè)任務(wù)實(shí)時(shí)性的要求。合理的通信機(jī)制可以優(yōu)化整個(gè)系統(tǒng)的性能,提高了CPU的利用率和軟件效率。在嵌入式實(shí)時(shí)操作系統(tǒng)中使用串口通信,不僅可擴(kuò)展嵌入式設(shè)備通信能力,而且可擴(kuò)大其應(yīng)用范圍。
[1]張揚(yáng),于銀濤.VxWorks內(nèi)核、設(shè)備驅(qū)動(dòng)與BSP開發(fā)詳解[M].北京:人民郵電出版社,2009.
[2]孔祥營(yíng),柏桂枝.嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado[M].北京:中國(guó)電力出版社,2002.
[3]李洪亮,侯朝楨.VxWorks下實(shí)時(shí)多任務(wù)程序的實(shí)現(xiàn)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(24):7 -2.
[4]樊爭(zhēng)奇.VxWorks操作系統(tǒng)下基于緩沖隊(duì)列網(wǎng)絡(luò)通信應(yīng)用[J].電腦開發(fā)與應(yīng)用,2009,22(3):67 -68.
[5]郭平.VxWorks串口通信程序設(shè)計(jì)與實(shí)現(xiàn)[J].科技信息,2010(11):69 -70.
[6]蒲元遠(yuǎn),孫大維.VxWorks下多串口通信設(shè)計(jì)[J].光電技術(shù)應(yīng)用,2009(4):48 -50.