尤 磊,王邦繼,吳 博,邱 嵩,張仲金
(西南交通大學(xué)物理科學(xué)與技術(shù)學(xué)院,四川成都 610031)
隨著相控陣技術(shù)的發(fā)展,對(duì)控制系統(tǒng)軟件的響應(yīng)能力和功能多樣性的需求不斷增加,要求系統(tǒng)擁有實(shí)時(shí)多任務(wù)的處理能力[1]。由于多個(gè)任務(wù)相對(duì)獨(dú)立運(yùn)行并且需要及時(shí)響應(yīng),這就需要控制軟件對(duì)系統(tǒng)任務(wù)進(jìn)行實(shí)時(shí)統(tǒng)一的管理,通過利用實(shí)時(shí)操作系統(tǒng)能夠很好地實(shí)現(xiàn)系統(tǒng)資源的合理調(diào)用。目前,國(guó)外的VxWorks、RT-Linux等嵌入式實(shí)時(shí)操作系統(tǒng)具有較成熟的開發(fā)方案,國(guó)內(nèi)外學(xué)者基于此類操作系統(tǒng)進(jìn)行研究[2-3],但是VxWorks價(jià)格昂貴、不開源,RT-Linux存在實(shí)時(shí)性改進(jìn)不穩(wěn)定、占用資源高的缺點(diǎn)[4]。隨著國(guó)產(chǎn)操作系統(tǒng)的發(fā)展,RT-Thread作為一款國(guó)產(chǎn)開源嵌入式實(shí)時(shí)操作系統(tǒng),具有實(shí)時(shí)性高、啟動(dòng)快速、占用資源小的優(yōu)點(diǎn),可應(yīng)用在實(shí)時(shí)性要求較高的實(shí)時(shí)監(jiān)測(cè)、航天機(jī)器人控制和通信控制系統(tǒng)等場(chǎng)景[5-6],取得了較好的效果。同時(shí)利用以太網(wǎng)作為通信傳輸媒介,便于實(shí)時(shí)控制所需數(shù)據(jù)的快速傳輸[7]。本文基于國(guó)產(chǎn)RT-Thread操作系統(tǒng),結(jié)合操作系統(tǒng)的實(shí)時(shí)多任務(wù)調(diào)度和實(shí)時(shí)任務(wù)間通信等機(jī)制,設(shè)計(jì)了在Zynq-7000系列的SoC FPGA硬件平臺(tái)的實(shí)時(shí)多任務(wù)控制系統(tǒng)。
系統(tǒng)控制總體設(shè)計(jì)采用三層分布式測(cè)控體系架構(gòu),分別為上位控制計(jì)算機(jī)、控制系統(tǒng)和現(xiàn)場(chǎng)設(shè)備,系統(tǒng)組成框圖如圖1所示。
圖1 系統(tǒng)組成框圖
上位控制計(jì)算機(jī)界面在PC計(jì)算機(jī)上運(yùn)行,主要提供操作人員對(duì)于控制系統(tǒng)交互功能的人機(jī)界面。
控制系統(tǒng)以Zynq-7000系列(ZYNQ xc7z030)的一款可擴(kuò)展處理、集成了ARM處理器和FPGA可編程邏輯的芯片為核心硬件平臺(tái),其中處理器系統(tǒng)(process system,PS)包含了一個(gè)主頻為800 MHz的雙核ARM Cortex-A9處理子系統(tǒng),并具有以太網(wǎng)控制器MAC、CAN、UART和SDIO等豐富外設(shè)資源[8]??刂葡到y(tǒng)采用雙ARM內(nèi)核處理器方案進(jìn)行設(shè)計(jì),將控制接口分別在ARM1和ARM2內(nèi)核實(shí)現(xiàn)。ARM1利用以太網(wǎng)接收上位控制計(jì)算機(jī)的指令,經(jīng)過信息解析處理之后,通過CAN總線實(shí)現(xiàn)對(duì)現(xiàn)場(chǎng)設(shè)備的實(shí)時(shí)監(jiān)控。ARM2內(nèi)核接收ARM1傳遞的控制信息,通過UART接口控制供電系統(tǒng)為現(xiàn)場(chǎng)設(shè)備供電,通過SD卡實(shí)現(xiàn)系統(tǒng)的日志管理功能。
現(xiàn)場(chǎng)設(shè)備實(shí)現(xiàn)對(duì)子陣上所有單位天線的相位計(jì)算,并控制天線波束指向到位,由CAN總線將運(yùn)行情況反饋給控制系統(tǒng)處理。
控制系統(tǒng)采用分層模塊化軟件設(shè)計(jì)模式,具體軟件系統(tǒng)結(jié)構(gòu)設(shè)計(jì)如圖2所示。首先,以RT-Thread作為底層操作系統(tǒng),配置驅(qū)動(dòng)ARM內(nèi)核相關(guān)硬件外設(shè)。然后根據(jù)控制系統(tǒng)實(shí)現(xiàn)的功能不同,將控制系統(tǒng)的以太網(wǎng)通信、天線相位控制等實(shí)時(shí)任務(wù)以及供電系統(tǒng)控制、日志管理等非實(shí)時(shí)任務(wù)分別在ARM1和ARM2雙核處理器實(shí)現(xiàn),作為實(shí)時(shí)核和非實(shí)時(shí)核的劃分??刂葡到y(tǒng)以實(shí)時(shí)核作為主處理系統(tǒng),非實(shí)時(shí)核作為輔助,本文主要對(duì)實(shí)時(shí)核的實(shí)時(shí)可靠多任務(wù)的設(shè)計(jì)進(jìn)行說明。
圖2 軟件系統(tǒng)結(jié)構(gòu)圖
控制系統(tǒng)接收上位控制計(jì)算機(jī)通過以太網(wǎng)傳輸?shù)闹噶钚畔?執(zhí)行相應(yīng)的任務(wù)。對(duì)于實(shí)現(xiàn)不同的功能,依據(jù)實(shí)時(shí)系統(tǒng)的特性,去創(chuàng)建相應(yīng)的任務(wù)并分配優(yōu)先級(jí)。系統(tǒng)實(shí)時(shí)任務(wù)的軟件框圖如圖3所示,任務(wù)之間通過消息隊(duì)列郵箱(msg)和信號(hào)量(sem)等通信機(jī)制,實(shí)現(xiàn)任務(wù)間的通信與同步,也通過創(chuàng)建全局?jǐn)?shù)組實(shí)現(xiàn)資源數(shù)據(jù)共享。
圖3 實(shí)時(shí)任務(wù)軟件總體框圖
對(duì)于實(shí)時(shí)多任務(wù)軟件設(shè)計(jì)而言,任務(wù)及其優(yōu)先級(jí)的合理劃分以及任務(wù)間通信機(jī)制的合理設(shè)置是系統(tǒng)實(shí)時(shí)性和可靠性的保證[9]。
2.2.1 實(shí)時(shí)任務(wù)的劃分和調(diào)度
RT-Thread下應(yīng)用程序的任務(wù)運(yùn)行路線分為實(shí)時(shí)內(nèi)核調(diào)度執(zhí)行的線程和處理器產(chǎn)生的中斷服務(wù)程序2條路線。為了提高系統(tǒng)的實(shí)時(shí)性和減少系統(tǒng)調(diào)用的時(shí)間消耗,任務(wù)的劃分要基于實(shí)際工作數(shù)據(jù)流程進(jìn)行合理的設(shè)計(jì),實(shí)時(shí)核中RT-Thread中斷及任務(wù)劃分如圖4所示。
圖4 軟件系統(tǒng)結(jié)構(gòu)圖
RT-Thread的任務(wù)調(diào)度是基于優(yōu)先級(jí)搶占式調(diào)度,在創(chuàng)建新的線程時(shí),任務(wù)優(yōu)先級(jí)的設(shè)置主要取決于任務(wù)本身的緊急程度,并且優(yōu)先級(jí)不能設(shè)置過低,否則會(huì)影響到線程管理列表所占用的資源和管理的時(shí)效性。
在本文基于優(yōu)先級(jí)搶占調(diào)度機(jī)制的設(shè)計(jì)中,主要分為2種運(yùn)行情況:
(1)優(yōu)先級(jí)高的線程已獲得等待的信號(hào),在下一個(gè)時(shí)間滴答中斷發(fā)生時(shí),會(huì)將CPU的使用權(quán)從優(yōu)先級(jí)低的線程處搶奪,使其轉(zhuǎn)入就緒態(tài),進(jìn)而分配到CPU的使用權(quán)。
(2)當(dāng)創(chuàng)建的線程阻塞獲取信號(hào)時(shí),主動(dòng)放棄CPU的使用權(quán),調(diào)度系統(tǒng)將在就緒的線程中尋找最高的線程,來分配CPU使用權(quán)。
線程優(yōu)先級(jí)配置如表1所示。
表1 線程優(yōu)先級(jí)配置
2.2.2 任務(wù)間通信與同步機(jī)制設(shè)置
RT-Thread提供靈活多樣的任務(wù)間同步與通信機(jī)制,應(yīng)用于協(xié)調(diào)任務(wù)或者中斷處理程序與任務(wù)之間的運(yùn)行,包括消息隊(duì)列、郵箱和信號(hào)量。
圖5為采用消息隊(duì)列和郵箱的任務(wù)間通信過程,消息隊(duì)列用于以太網(wǎng)DMA接收中斷服務(wù)程序向以太網(wǎng)底層驅(qū)動(dòng)信息接收任務(wù)發(fā)送以指針方式定義不固定長(zhǎng)度的消息,并緩存于其內(nèi)存空間中。在LwIP協(xié)議棧中,LwIP內(nèi)核消息處理任務(wù)在RT-Thread操作系統(tǒng)中作為一個(gè)線程運(yùn)行,在實(shí)現(xiàn)以太網(wǎng)接收消息過程中,LwIP內(nèi)核消息處理線程通過以郵箱消息的形式阻塞等待接收底層網(wǎng)卡處理的以太網(wǎng)信息,并根據(jù)接收不同郵箱消息的類型處理相應(yīng)的消息。
圖5 消息列隊(duì)和郵箱的任務(wù)間通信
RT-Thread信號(hào)量提供快速的任務(wù)間通信機(jī)制,為了實(shí)現(xiàn)線程任務(wù)間運(yùn)行的協(xié)同配合,控制系統(tǒng)的軟件設(shè)計(jì)充分利用了二進(jìn)制信號(hào)量。當(dāng)CAN接收到數(shù)據(jù)產(chǎn)生中斷時(shí),會(huì)調(diào)用接收回調(diào)函數(shù)發(fā)送信號(hào)量通知CAN數(shù)據(jù)處理線程有數(shù)據(jù)到達(dá)。對(duì)于現(xiàn)場(chǎng)設(shè)備反饋的CAN消息類型,以太網(wǎng)發(fā)送處理至上位控制計(jì)算機(jī)顯示的任務(wù)阻塞獲取天線控制CAN信息接收處理線程釋放的不同類型的信號(hào)量,實(shí)現(xiàn)任務(wù)間同步運(yùn)行的功能,具體信號(hào)量的任務(wù)間同步設(shè)計(jì)如圖6所示。
圖6 信號(hào)量的任務(wù)間同步
將RT-Thread移植到Zynq-7000的PS部分主要做以下工作:
(1)利用Vivado軟件搭建SoC系統(tǒng)工程。首先,在Vivado軟件中創(chuàng)建工程并設(shè)置“ZYNQ7 Processing System”IP核建立ARM處理器系統(tǒng),然后生成硬件信息,服務(wù)于SDK軟件中應(yīng)用工程的硬件平臺(tái)。
(2)利用SDK軟件移植RT-Thread操作系統(tǒng)。首先,在SDK軟件新建裸機(jī)空工程中移植需要完成裁剪的RT-Thread源代碼。其中bsp用于存放板級(jí)支持包選擇Zynq-7000,components組件中主要保留finsh命令組件用于調(diào)試輸出,complier組件中newlib文件用于平衡GCC編譯器內(nèi)置C庫(kù)函數(shù)差異,include文件和src文件分別是內(nèi)核源碼的頭文件和內(nèi)核源碼C文件,不做修改。libcpu文件夾里是CPU接口文件,對(duì)于Zynq-7000芯片的PS部分來說,只保留libcpu中arm文件夾里的zynq7000文件夾即可。其次,修改系統(tǒng)時(shí)鐘等參數(shù)以匹配現(xiàn)用的開發(fā)平臺(tái)。然后,修改配置文件rtconfig.h,打開需要啟用相應(yīng)功能的宏定義。最后,創(chuàng)建線程任務(wù)用來驗(yàn)證操作系統(tǒng)是否移植成功。
對(duì)于LwIP協(xié)議棧的移植來說,主要工作就是為其提供網(wǎng)絡(luò)MAC驅(qū)動(dòng)開發(fā)和PHY驅(qū)動(dòng)開發(fā),即網(wǎng)卡的驅(qū)動(dòng)是網(wǎng)絡(luò)協(xié)議棧功能實(shí)現(xiàn)的基礎(chǔ)[10-11]。網(wǎng)卡的BSP驅(qū)動(dòng)主要是Zynq-7000的ARM處理器部分通過MAC控制器由RGMII接口控制PHY芯片,最終能夠?qū)崿F(xiàn)發(fā)送和接收以太網(wǎng)數(shù)據(jù)包的功能。BSP驅(qū)動(dòng)包括初始化、接收數(shù)據(jù)與發(fā)送數(shù)據(jù)。
初始化是對(duì)MAC與PHY芯片進(jìn)行初始化配置。首先,獲取MAC并對(duì)其進(jìn)行配置初始化,完成對(duì)PHY芯片的訪問,創(chuàng)建PHY狀態(tài)檢測(cè)線程,獲取PHY芯片連接狀態(tài)。然后,初始化DMA控制器來生成多個(gè)緩沖描述符直接管理網(wǎng)絡(luò)上接收和發(fā)送的數(shù)據(jù),減輕處理器的負(fù)擔(dān),提高網(wǎng)絡(luò)數(shù)據(jù)包的傳輸速率[12]。
接收數(shù)據(jù)驅(qū)動(dòng)功能需要完成數(shù)據(jù)轉(zhuǎn)移和數(shù)據(jù)封裝等任務(wù),即從網(wǎng)卡芯片接收的數(shù)據(jù)轉(zhuǎn)移給LwIP所對(duì)應(yīng)的應(yīng)用程序以及將數(shù)據(jù)封裝成LwIP的數(shù)據(jù)包結(jié)構(gòu)[13]。以太網(wǎng)BSP執(zhí)行流程如圖7 所示,接收驅(qū)動(dòng)采用DMA產(chǎn)生接收中斷觸發(fā),將接收的數(shù)據(jù)轉(zhuǎn)移到LwIP內(nèi)存分配函數(shù)為DMA生成緩沖描述符開辟的pbuf空間中。
圖7 以太網(wǎng)BSP執(zhí)行流程
在發(fā)送數(shù)據(jù)時(shí),應(yīng)用程序通過Socket套接字接口發(fā)送數(shù)據(jù),需要經(jīng)過LwIP協(xié)議棧,LwIP各層分別對(duì)要發(fā)送的數(shù)據(jù)進(jìn)行幀封裝處理。以太網(wǎng)發(fā)送數(shù)據(jù)函數(shù),其實(shí)現(xiàn)過程與接收函數(shù)類似,以太網(wǎng)數(shù)據(jù)幀發(fā)送過程是將需要發(fā)送的LwIP協(xié)議棧pbuf緩沖區(qū)的數(shù)據(jù)拷貝至DMA描述符的緩沖空間中,并使用驅(qū)動(dòng)發(fā)送至以太網(wǎng)。
通過在Zynq-7000上搭建完成控制系統(tǒng)的實(shí)驗(yàn)測(cè)試平臺(tái),PC端上位控制計(jì)算機(jī)設(shè)置控制系統(tǒng)服務(wù)端的IP地址和端口號(hào)分別為192.168.100.30和20004,兩者通過網(wǎng)線直連。上位控制計(jì)算機(jī)分別以不延時(shí)、延時(shí)2 ms、延時(shí)5 ms、延時(shí)10 ms的間隔時(shí)間向控制系統(tǒng)發(fā)送10 000個(gè)UDP指令數(shù)據(jù)包,控制系統(tǒng)接收到消息并及時(shí)上報(bào)回復(fù)。通過Wireshark分析工具,得出以上過程的往返時(shí)間值,即為網(wǎng)絡(luò)傳輸時(shí)延,其中往返時(shí)間(round trip time,RTT)表示從發(fā)送方發(fā)送數(shù)據(jù)開始,到發(fā)送方收到來自接收方回復(fù)信息的確認(rèn),總共經(jīng)歷的時(shí)間。利用相鄰2個(gè)數(shù)據(jù)包的網(wǎng)絡(luò)傳輸時(shí)延值的絕對(duì)差作為時(shí)延抖動(dòng)值[14],并統(tǒng)計(jì)出平均抖動(dòng)作為時(shí)延變化情況。測(cè)試結(jié)果如表2所示,圖8為網(wǎng)絡(luò)傳輸時(shí)延測(cè)試值的具體分布情況。
表2 網(wǎng)絡(luò)傳輸時(shí)延測(cè)試
由表2可知,網(wǎng)絡(luò)傳輸時(shí)延平均值低于1.05 ms,平均抖動(dòng)值低于0.04 ms,丟包率為0%,此時(shí)網(wǎng)絡(luò)通信比較穩(wěn)定。通過圖8可知,網(wǎng)絡(luò)傳輸時(shí)延值大部分集中在1.0~1.1 ms,當(dāng)發(fā)送間隔時(shí)間變大,需要處理的數(shù)據(jù)流量變小,處理速度變快,超出范圍值就變少。
采用定時(shí)器(triple timer counter,TTC)實(shí)現(xiàn)計(jì)時(shí)功能。其中,時(shí)鐘選擇內(nèi)部的PS總線時(shí)鐘,頻率為f=133 333 344 Hz。使定時(shí)器工作在計(jì)數(shù)模式,在給定的0到間隔寄存器之間,計(jì)數(shù)器連續(xù)遞增。當(dāng)中斷接收以太網(wǎng)的數(shù)據(jù)時(shí),記下此時(shí)計(jì)數(shù)器值a1;隨著接收以太網(wǎng)UDP協(xié)議的解析和運(yùn)行,當(dāng)對(duì)應(yīng)指令的CAN發(fā)出數(shù)據(jù)時(shí),記下此時(shí)計(jì)數(shù)器的值a2,判斷計(jì)數(shù)值是否存在溢出情況,并使定時(shí)器值清空復(fù)位。重復(fù)多次實(shí)驗(yàn),不存在計(jì)數(shù)值溢出情況,系統(tǒng)執(zhí)行時(shí)間為T=(a2-a1)/f。統(tǒng)計(jì)出系統(tǒng)執(zhí)行最大時(shí)間和最小時(shí)間以及系統(tǒng)執(zhí)行抖動(dòng)情況,如表3所示,圖9為系統(tǒng)執(zhí)行時(shí)間值分布情況。
表3 系統(tǒng)執(zhí)行時(shí)間測(cè)試值
圖9 系統(tǒng)執(zhí)行時(shí)間值分布圖
由表3可知,1 000次的實(shí)驗(yàn)結(jié)果中 ,最差的情況執(zhí)行時(shí)間為111.86μs,執(zhí)行時(shí)間平均值為93.10μs。圖9中,表明了系統(tǒng)執(zhí)行時(shí)間大部分分布的范圍在92.5~95.0μs,保證了系統(tǒng)運(yùn)行的穩(wěn)定性。
本系統(tǒng)實(shí)現(xiàn)了基于RT-Thread和Zynq-7000的實(shí)時(shí)多任務(wù)調(diào)度中心的控制系統(tǒng),通過任務(wù)的劃分和任務(wù)間通信機(jī)制的確定等方法,保證了系統(tǒng)的實(shí)時(shí)性和可靠性,強(qiáng)化了系統(tǒng)模塊化設(shè)計(jì),使其具有可移植性和可擴(kuò)展性的特點(diǎn)。經(jīng)過多次實(shí)驗(yàn)測(cè)試表明:網(wǎng)絡(luò)通信穩(wěn)定可靠,可適用于實(shí)時(shí)性要求較高的通信系統(tǒng),并且能夠準(zhǔn)確及時(shí)地執(zhí)行上位控制計(jì)算機(jī)發(fā)送的指令,實(shí)現(xiàn)系統(tǒng)的實(shí)時(shí)控制。