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