宋桂景,崔美英,班亞明
(中國電子科技集團公司第五十四研究所,河北石家莊050081)
近年來,隨著嵌入式計算技術的不斷發(fā)展,VxWorks嵌入式實時操作系統(tǒng)以高度可裁減的微內(nèi)核、高效的多任務調度和靈活的任務間通信等優(yōu)點在目前的衛(wèi)星通信領域中得到了廣泛應用。VxWorks作為一種嵌入式實時多任務操作系統(tǒng),是指能在確定的時間內(nèi)執(zhí)行其功能,并對外部的異步事件作出實時響應的計算機系統(tǒng)。在通信系統(tǒng)內(nèi)部,管理代理終端設備以及信道設備之間大多是以串口連接,通過串口進行一些控制指令的交互和數(shù)據(jù)的傳輸。串口在嵌入式系統(tǒng)中是一類重要的數(shù)據(jù)通信接口,其本質功能是作為CPU和串行設備間的編碼轉換器。應用程序在多串口間的通信方式,就是利用實時的多任務靈活調度機制來實現(xiàn)的數(shù)據(jù)通信的方式。
在VxWorks的多串口卡設計中,應遵循以下3個原則:
①盡量選用目前通用的嵌入式核心模塊;
②選用方便可靠的多串口擴展模塊;
③程序設計框架要實用,方便串口信息的增加或刪減。
在VxWorks的多串口卡硬件設計中,采用高集成度小型化的設計思想,選用具有獨立功能的嵌入式CPU核心模塊——PowerPC 8270處理器模塊作為核心單元,外接多串口擴展模塊。按照功能類型劃分,該種設計方式主要由3部分組成:核心單元、串口擴展單元以及串口轉換單元,硬件原理框圖如圖1所示。
圖1 原理框圖
1.1.1 核心單元
該mpc8270核心單元具有豐富的通信接口、大量數(shù)據(jù)傳輸能力、實時/多任務復雜邏輯和過程處理能力。在8270核心模塊上運行嵌入式操作系統(tǒng)和應用軟件,實現(xiàn)業(yè)務接入、監(jiān)視控制等功能。該核心模塊自帶2個低速串口,可直接連接串口轉換芯片,一般在系統(tǒng)應用中采用其中的1個串口作為打印串口以監(jiān)測通信狀態(tài)。其硬件框圖如圖2所示。
圖2 Mpc8270核心模塊原理框圖
1.1.2 串口擴展單元
該設計實現(xiàn)串口擴展采用2種方式:采用基于PCI總線接口芯片XR17V258IV可擴展出8個串口,通過可編程邏輯芯片(FPGA)實現(xiàn)串口的進一步擴展。XR17V258IV是基于PCI總線串口的單芯片解決方案,該串口擴展卡可以很容易地擴展為8個串口,而不需要進行硬件的更改和時鐘時序調整;該設計還可以利用總線,通過FPGA進一步實現(xiàn)串口的擴展,該方法在可編程邏輯芯片內(nèi)實現(xiàn),對于串口的擴展以及管腳的分配更為方便,所以應用更為靈活。
雖然多數(shù)學者原則上支持會聚研究和組織結構創(chuàng)新,但在涉及本人或部門利益時往往退縮。因此,探索有效的機構組織形式,在兼顧現(xiàn)有組織文化的同時創(chuàng)建以科學或社會挑戰(zhàn)為核心的新型研究組織方式,制定合理的會聚項目評審標準、任務分配制度和績效考核指標,以促進不同學科背景的科研人員間高效的合作伙伴關系,是科研機構亟待解決的問題。
1.1.3 串口轉換單元
串口轉換單元可以根據(jù)實際需要進行電平轉換:TTL/RS232、TTL/RS485、TTL/RS422,以連接外部數(shù)據(jù)通信接口。
VxWorks實時內(nèi)核Wind提供了基本的多任務環(huán)境。VxWorks操作系統(tǒng)中任務調度算法有時間片輪轉、優(yōu)先級搶占和獨占資源。時間片輪轉算法依據(jù)時間片的分配來為任務分配CPU資源,優(yōu)先級搶占算法指在任務生成之時都分配有不同或相同的優(yōu)先級,獨占資源式算法指任務獨占CPU資源。采用優(yōu)先級搶占式資源調度算法更貼近實際,在VxWorks中,需要盡快處理的設置為高優(yōu)先級。而獨占資源或時間片輪轉的調度方式都是面向同優(yōu)先級任務的。在該設計中采用優(yōu)先級搶占調度和時間片輪轉調度相結合的方式。
1.2.1 多任務交互
在8270核心模塊上運行VxWorks嵌入式操作系統(tǒng)和應用軟件,實現(xiàn)實時多串口通信的信息交互。多串口通信中多任務間的交互方式用到主要以下3種:
①共享內(nèi)存:將需要共享的數(shù)據(jù)聲明為全局變量;
②信號量:提供簡單的同步和互斥機制;
③消息隊列或管道:任務間傳輸帶有數(shù)據(jù)的消息(為長度、數(shù)目可變的一組數(shù)據(jù)進行排隊)。
1.2.2 通信流程
在利用VxWorks操作系統(tǒng)進行多串口通信,必須在串口通信使用之前向操作系統(tǒng)提出資源申請要求(打開串口),并進行串口配置,通信完成后必須釋放資源(關閉串口)。
針對VxWorks的上述通信機制,為每個串口創(chuàng)建1個串口守候接收任務,1個發(fā)送任務,同時為每個串口建立1個二進制信號量。建立1個主處理任務的消息隊列,同時還需啟動看門狗的定時功能。通信數(shù)據(jù)流程如圖3所示。
圖3 串口任務數(shù)據(jù)流程
串口通信在命令狀態(tài)下對數(shù)據(jù)的實時性要求要稍低一些,所以串口接收守候任務在命令狀態(tài)下,接收到數(shù)據(jù)、搜幀,而后加上標志發(fā)送到主處理任務的消息隊列,由主處理任務根據(jù)標志在分發(fā)到相應的處理函數(shù)進行處理。而在數(shù)據(jù)狀態(tài)下,對數(shù)據(jù)的實時性要求要高,因此可以通過激活二進制信號量,啟動數(shù)據(jù)狀態(tài)下的數(shù)據(jù)接收,此時將數(shù)據(jù)內(nèi)容放入環(huán)形緩存中,對應接收端有一個數(shù)據(jù)收指針。
串口數(shù)據(jù)發(fā)送任務獲取二進制信號量,對應發(fā)送端有發(fā)送指針,通過發(fā)送指針從對應環(huán)形緩存中取得數(shù)據(jù)發(fā)送。
主處理任務可以接收多個串口接收任務和看門狗等其他任務發(fā)送過來的消息,根據(jù)消息的標志分配給不同的數(shù)據(jù)處理函數(shù)進行處理。
各數(shù)據(jù)處理函數(shù)采用狀態(tài)機實現(xiàn)業(yè)務的處理,就是將一項工作分成若干階段,明確指定在每階段應該做什么,以及下一步可以做什么的轉移,狀態(tài)機是一個有向圖,由一組節(jié)點和一組相應的轉移函數(shù)組成,節(jié)點即工作流中的某個環(huán)節(jié),而轉移函數(shù)對應的是業(yè)務邏輯層的某一個對應類中的方法集合,轉移函數(shù)返回“下一個”節(jié)點。此種處理方式可以方便地增加狀態(tài)信息的處理。
在實時通信應用中,對時間的處理是至關重要的。需要將操作系統(tǒng)中的時間片與現(xiàn)實時間聯(lián)系在一起,函數(shù)接口sysClkRateGet用于獲取每秒產(chǎn)生的時間片數(shù)量,時間片函數(shù)taskDelay具有延時和任務調度的功能,任務在調用了taskDelay后,會被系統(tǒng)放置在等待隊列中,此時CPU資源被讓出,開始執(zhí)行就緒隊列中的下一個任務,當系統(tǒng)核心在調度時發(fā)現(xiàn)延時完成后,該任務會被放置在就緒隊列末尾等待CPU資源,此種調度方式會導致定時不準確??撮T狗計時可以提供比較精確的計時,定時時間一到,所安排的任務將以中斷級別執(zhí)行,會打斷大部分的任務執(zhí)行??撮T狗計時方式比taskDelay消耗了更多的系統(tǒng)資源,但更精確,可以用于延時、計時和定時。
該設計中,采用模塊化的思想,主要由2個方面來體現(xiàn)。
①數(shù)據(jù)處理函數(shù)模塊化:因為同一個物理串口可以根據(jù)實際需要連接不同的串口設備,所以在實際設計中可以按照實際應用分為不同的數(shù)據(jù)處理函數(shù)來處理;
②函數(shù)狀態(tài)模塊化:采用狀態(tài)轉移來實現(xiàn)不同狀態(tài)的數(shù)據(jù)通信。在不同的狀態(tài)可以通過消息隊列接收不同的消息來處理。此種數(shù)據(jù)處理方式擴展和分析問題都很方便,可以根據(jù)需要增加某個函數(shù)的處理,同時在數(shù)據(jù)狀態(tài)處理中,既可以根據(jù)需要增加1條消息的處理,又可以根據(jù)需要增加1個狀態(tài)的處理。
在該電路設計中,核心模塊通過PCI總線接口芯片XR17V258IV擴展出8個串口,通過可編程邏輯芯片F(xiàn)PGA擴展出4個串口,共12個串口,其中6個連接數(shù)據(jù)終端設備(可以連接計算機終端),6個連接數(shù)據(jù)通信設備(可連接調制解調器Modem)。
利用計算機自帶的通訊工具—超級終端進行通信測試,打開超級終端,設置通信速率,通過信道Modem向對端發(fā)起呼叫,可測試呼叫成功率(測試命令狀態(tài)下的通信),以及數(shù)據(jù)通信中報文發(fā)送成功率(測試數(shù)據(jù)狀態(tài)下的通行,其中涉及到數(shù)據(jù)流控的處理)。測試結果如表1所示。經(jīng)過多次呼叫和數(shù)據(jù)通信,測試結果滿足實際要求。實際數(shù)據(jù)通信中需要考慮信道狀態(tài)是否良好。
表1 通信測試結果
該串口卡設計綜合考慮了系統(tǒng)中多任務程序的設計及任務間的通信機制,該設備已在某工程中應用,滿足系統(tǒng)對各個任務實時性的要求。合理的通信機制可以優(yōu)化整個系統(tǒng)的性能,提高了CPU的利用率和軟件效率。在嵌入式實時操作系統(tǒng)中使用串口通信,不僅可擴展嵌入式設備通信能力,而且可擴大其應用范圍。
[1]張揚,于銀濤.VxWorks內(nèi)核、設備驅動與BSP開發(fā)詳解[M].北京:人民郵電出版社,2009.
[2]孔祥營,柏桂枝.嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado[M].北京:中國電力出版社,2002.
[3]李洪亮,侯朝楨.VxWorks下實時多任務程序的實現(xiàn)[J].單片機與嵌入式系統(tǒng)應用,2008(24):7 -2.
[4]樊爭奇.VxWorks操作系統(tǒng)下基于緩沖隊列網(wǎng)絡通信應用[J].電腦開發(fā)與應用,2009,22(3):67 -68.
[5]郭平.VxWorks串口通信程序設計與實現(xiàn)[J].科技信息,2010(11):69 -70.
[6]蒲元遠,孫大維.VxWorks下多串口通信設計[J].光電技術應用,2009(4):48 -50.