*
1. 中國科學(xué)院 安徽光學(xué)精密機(jī)械研究所,合肥 230031 2. 中國科學(xué)技術(shù)大學(xué),合肥 230026
在衛(wèi)星中RT(Remote Terminal,遠(yuǎn)程終端)接入系統(tǒng)之前,要在地面檢測設(shè)備上使用其他裝置來模擬總線控制端(Bus Controller,BC),按照MIL-STD-1553B總線(以下簡稱為1553B)協(xié)議與此RT進(jìn)行通信,對其進(jìn)行一系列檢測。
傳統(tǒng)的方案是使用工控機(jī)搭載1553B_PCI板卡來模擬BC[1-3],但工控機(jī)的Windows操作系統(tǒng)并不是實(shí)時(shí)系統(tǒng),會(huì)有定時(shí)不準(zhǔn)的情況,使任務(wù)的周期偏差超出允許范圍。
為了解決這個(gè)問題,可以使用FPGA、DSP或單片機(jī)以裸跑或者搭載實(shí)時(shí)操作系統(tǒng)的方式來模擬BC[4-5]。本設(shè)計(jì)使用BM3803處理器搭載實(shí)時(shí)操作系統(tǒng)μC/OS-II來模擬BC。選用BM3803是因其在衛(wèi)星數(shù)管計(jì)算機(jī)中較為常用,與其他航空用處理器如AT697等兼容[6-8],最接近真實(shí)的衛(wèi)星平臺(tái)工作狀態(tài),并考慮衛(wèi)星器件國產(chǎn)化的需要,不選用傳統(tǒng)的AT697等器件。設(shè)計(jì)框圖如圖1所示,使用BM3803搭載μC/OS-II,以B61580作為 1553B通信引擎[9],模擬了某衛(wèi)星的BC,與某RT進(jìn)行一系列通信任務(wù),以檢測此RT的功能,同時(shí)用工控機(jī)通過串口給BM3803發(fā)送指令并顯示通信記錄。
圖1 設(shè)計(jì)框圖Fig.1 Design block diagram
BM3803是基于SPARC V8體系架構(gòu)的國產(chǎn)32位抗輻射加固微處理器[10-11],具備航天應(yīng)用場景下所需的功能及性能。其容錯(cuò)設(shè)計(jì)采用三模冗余、糾一檢二的EDAC編解碼以及奇偶校驗(yàn)等抗單粒子翻轉(zhuǎn)效應(yīng)的設(shè)計(jì)方案,極大程度上保證了可靠性[12-13]。
選用μC/OS-II是按照此衛(wèi)星總體部門的要求來滿足未來任務(wù)擴(kuò)充的需要。它是一個(gè)可ROM化、可裁剪、搶占式、實(shí)時(shí)多任務(wù)操作系統(tǒng),在航空電子領(lǐng)域通過了美國航空航天管理局(FAA)的安全認(rèn)證,可以用于飛機(jī)、航天器等性命攸關(guān)的系統(tǒng)中[14-15]。μC/OS-II已經(jīng)大范圍應(yīng)用于SPARC構(gòu)架的航空航天用CPU,如TSC695F等,其可靠性與實(shí)時(shí)性經(jīng)過了長時(shí)間的理論與實(shí)踐驗(yàn)證[16-18]。
本文首先給出軟件的整體結(jié)構(gòu);然后將μC/OS-II移植入BM3803;再利用B61580和BM3803的硬件特性,在用戶任務(wù)中加入各種檢驗(yàn)、糾錯(cuò)機(jī)制;之后按照某衛(wèi)星星上軟件高層通信協(xié)議布置用戶任務(wù),對比了BM3803+μC/OS-II與Windows+1553B_PCI板卡這兩種方案的執(zhí)行情況;最后得到結(jié)論,BM3803+μC/OS-II的實(shí)時(shí)性滿足此衛(wèi)星高層通信協(xié)議的要求,解決了Windows+1553B_PCI板卡方案定時(shí)不準(zhǔn)的問題。
本設(shè)計(jì)的軟件結(jié)構(gòu)如圖2所示,分為三部分:用戶任務(wù)、操作系統(tǒng)與硬件。首先在操作系統(tǒng)中,開發(fā)與硬件相關(guān)的內(nèi)外部設(shè)備驅(qū)動(dòng)。然后依據(jù)SPARC V8構(gòu)架與BM3803寄存器性質(zhì),開發(fā)板級(jí)支持包,以提供操作系統(tǒng)所需的時(shí)鐘節(jié)拍和堆棧段等來完成多任務(wù)的實(shí)時(shí)調(diào)度。最后在用戶層面上使用操作系統(tǒng)所提供的接口和功能函數(shù)布置任務(wù)。以這樣的軟件結(jié)構(gòu),可以實(shí)現(xiàn)將用戶任務(wù)與硬件的關(guān)聯(lián)度降到最低,方便創(chuàng)立任務(wù)的同時(shí)也極大減少了與硬件有關(guān)的設(shè)計(jì)錯(cuò)誤。
在實(shí)際運(yùn)行中,引導(dǎo)程序被固化在PROM中,操作系統(tǒng)被固化在FLASH中,一般情況下不會(huì)輕易改動(dòng)。而用戶層軟件被燒寫到另一段FLASH中,可以由用戶通過對此段存儲(chǔ)器的改寫來實(shí)現(xiàn)用戶任務(wù)的在軌更新,這種“可在軌更新”的性質(zhì)可以在用戶任務(wù)段代碼出現(xiàn)問題時(shí)重寫代碼,并提供增刪任務(wù)的功能,提高了軟件可靠性的同時(shí)增強(qiáng)了軟件的靈活性。
圖2 軟件結(jié)構(gòu)Fig.2 Software structure
在BM3803中運(yùn)行μC/OS-II,相當(dāng)于操作系統(tǒng)工作在單CPU的情況,各個(gè)任務(wù)輪番占用CPU與寄存器組,故在任務(wù)切出的時(shí)候要將當(dāng)前任務(wù)的運(yùn)行情況(寄存器組的值)保存到自己的堆棧段中,任務(wù)切入時(shí)再從此堆棧中將運(yùn)行情況恢復(fù)到寄存器組中。根據(jù)SPARC V8架構(gòu)和任務(wù)需求,設(shè)計(jì)堆棧段如表1所示。SPARC V8標(biāo)準(zhǔn)定義的程序堆棧由堆指針和棧指針組成,由高地址向低地址生長,故在堆棧段設(shè)計(jì)中將任務(wù)地址放在最高端,以最先取出。接著放置PSR、WIM和TBR這3個(gè)對BM3803的運(yùn)行最重要的內(nèi)部寄存器。BM3083屬于32位SPARC,堆棧數(shù)據(jù)類型需要定義為32位整型。經(jīng)過實(shí)際運(yùn)行證明此設(shè)計(jì)可行。
定時(shí)器中斷的工作設(shè)計(jì)如圖3所示。實(shí)時(shí)操作系統(tǒng)是基于時(shí)間切片工作的。中斷之間的時(shí)間間隔,即為時(shí)間切片的長度,其值取決于不同的應(yīng)用場合,一般為10~200 ms。因?yàn)楸疚闹械挠脩羧蝿?wù)的周期均為百毫秒和秒級(jí),故取定時(shí)器中斷時(shí)間間隔為100 ms。時(shí)鐘的節(jié)拍式中斷使得內(nèi)核可以將任務(wù)延時(shí)若干個(gè)整數(shù)時(shí)鐘節(jié)拍,以及當(dāng)任務(wù)等待事件發(fā)生時(shí),提供等待超時(shí)的依據(jù)。此中斷的服務(wù)函數(shù)主要是給每個(gè)用戶任務(wù)控制塊中的時(shí)間延時(shí)項(xiàng)減1(如果此項(xiàng)不為0),當(dāng)此項(xiàng)為0時(shí),此任務(wù)便進(jìn)入就緒態(tài)。BM3803提供了2個(gè)定時(shí)器,本設(shè)計(jì)中使用TIMER1實(shí)現(xiàn)100 ms定時(shí):主頻80 MHz,預(yù)分頻器計(jì)數(shù)寄存器、預(yù)分頻器重載寄存器、計(jì)數(shù)寄存器和重載寄存器分別設(shè)置為0x0000004F、0x0000004F、0x0001869F和0x0001869F。在系統(tǒng)初始化的過程中,定時(shí)器中斷的使能必須要發(fā)生在多任務(wù)調(diào)度開始(OSStart()函數(shù))之后。
表1 堆棧段設(shè)計(jì)
任務(wù)切換由軟件陷阱(ta 80)觸發(fā),在對操作系統(tǒng)初始化之前就要將此陷阱與任務(wù)切換函數(shù)關(guān)聯(lián)起來。此函數(shù)涉及對處理器內(nèi)部寄存器的操作,故必須放置在OS_CPU_A.asm文件中使用匯編語言編寫。軟陷阱指令會(huì)將一些處理器寄存器(比如返回地址和處理器狀態(tài)字)壓入到當(dāng)前任務(wù)的堆棧中,并進(jìn)入任務(wù)切換函數(shù)執(zhí)行任務(wù)切換。
這里對堆棧的壓入和彈出都必須要嚴(yán)格按照第2.1節(jié)所述的堆棧結(jié)構(gòu)來操作。任務(wù)切換的流程如圖4所示。圖中的“保存上下文”指的就是將當(dāng)前任務(wù)的運(yùn)行狀態(tài)(寄存器組的值)按設(shè)計(jì)好的堆棧結(jié)構(gòu)壓入棧中,然后從就緒表中找到已經(jīng)處于就緒狀態(tài)的優(yōu)先級(jí)最高的任務(wù),將此任務(wù)設(shè)定為當(dāng)前任務(wù),并將其運(yùn)行狀態(tài)一一按照堆棧結(jié)構(gòu)反向彈出給相應(yīng)的寄存器,以恢復(fù)上下文。由于1553B通信任務(wù)的特殊性:通信系統(tǒng)中只有一套1553B總線,所有用戶任務(wù)都要共同這一套總線,不可以在一個(gè)任務(wù)沒完成的時(shí)候?qū)⑵浯驍?,故本設(shè)計(jì)中屏蔽掉了中斷級(jí)任務(wù)切換。
圖4 任務(wù)切換Fig.4 Task switching
設(shè)置用戶任務(wù)之前要對操作系統(tǒng)初始化。在操作系統(tǒng)初始化函數(shù)的開頭留有鉤子函數(shù),BM3803內(nèi)外部設(shè)備的初始化均在此完成,如串口等。
μC/OS-II最多可以支持63個(gè)用戶任務(wù),每一個(gè)任務(wù)都定義成一個(gè)單獨(dú)的函數(shù),由OSTimeDly()函數(shù)控制執(zhí)行周期。如建立2個(gè)用戶任務(wù)“周期500 ms返回矢量字”和“周期2 s系統(tǒng)同步”,可按圖5所示步驟建立。由于設(shè)定操作系統(tǒng)的切片時(shí)長為100 ms,故在以上兩任務(wù)后的延時(shí)分別為5個(gè)節(jié)拍和20個(gè)節(jié)拍。
圖5 用戶任務(wù)的設(shè)置Fig.5 User task settings
在執(zhí)行用戶任務(wù)的過程中,增加了以下設(shè)計(jì)來增強(qiáng)軟件可靠性:
1) 在未使用的ROM區(qū),每間隔1 kbyte的存儲(chǔ)空間設(shè)置1~3個(gè)軟件陷阱;
2) 對BM3803未使用的中斷向量一一設(shè)置陷阱,引導(dǎo)被觸發(fā)的未使用中斷;
3) 每次通信后詳細(xì)檢查B61580的塊狀態(tài)字和狀態(tài)字。
按照某衛(wèi)星星上軟件高層通信協(xié)議設(shè)置8個(gè)用戶任務(wù)如表2所示,分別考察BM3803+μC/OS-II和Windows+1553B_PCI板卡這兩種方案的完成情況。
表2 用戶任務(wù)
用戶任務(wù)說明:
1)表中“NULL”表示此任務(wù)為非周期任務(wù)。
2) 若任務(wù)4返回的數(shù)據(jù)字為0x0002,則觸發(fā)任務(wù)6。
3)將對時(shí)間要求最嚴(yán)格的任務(wù)1的優(yōu)先級(jí)設(shè)置為這些任務(wù)中最高的,當(dāng)有多項(xiàng)任務(wù)同時(shí)就緒的時(shí)候,優(yōu)先級(jí)高的優(yōu)先執(zhí)行。
4)通過任務(wù)8長抱環(huán)測試可以檢測系統(tǒng)工作是否正常:BC在“長抱環(huán)測試”任務(wù)中以廣播的形式發(fā)給RT一個(gè)數(shù)據(jù)字,RT將其按位取反。之后BC再在“長抱環(huán)校驗(yàn)”任務(wù)中獲取被RT處理后的數(shù)據(jù)字,經(jīng)過比較后若正好按位相反,則代表此次測試成功。
5) 每次執(zhí)行任務(wù)1后都要切換一次1553B通信通道,可在每次通信的塊狀態(tài)字中檢查出。
6) 本文中未加進(jìn)制標(biāo)注的數(shù)值均默認(rèn)為十進(jìn)制。
此方案結(jié)構(gòu)如圖6所示。BM3803搭載μC/OS-II作為BC,同時(shí)通過一路串口在工控機(jī)上的“串口助手”打印通信記錄,再通過另一路串口由工控機(jī)向BM3803發(fā)送任務(wù)2、3。
圖6 BM3803+μC/OS-II方案結(jié)構(gòu)Fig.6 Structure of the BM3803+μC/OS-II solution
打印的通信記錄如圖7所示。圖中“XXXXXX”表示當(dāng)前任務(wù)不包含此項(xiàng)。每隔500 ms串口工具會(huì)給出時(shí)間戳顯示絕對時(shí)間。各個(gè)任務(wù)之間的相對時(shí)間可以由“時(shí)間標(biāo)簽”計(jì)算得出,時(shí)間標(biāo)簽的時(shí)間分辨率設(shè)定為16 μs,即時(shí)間標(biāo)簽最大值代表的時(shí)間為:
0xffff×16=1 048 560 μs
首先根據(jù)上述“用戶任務(wù)說明”以及“1553B通信協(xié)議”查看圖7中數(shù)據(jù)的含義,得知所有用戶任務(wù)的執(zhí)行情況均正常。
圖7是在每個(gè)任務(wù)完成之后由BM3803通過串口打印到工控機(jī)串口助手而來的,在實(shí)際的通信中并不需要這個(gè)打印的動(dòng)作,故在計(jì)算周期任務(wù)的周期偏差的時(shí)候需要把串口打印的時(shí)間去掉以還原實(shí)際情況。每個(gè)任務(wù)打印一行,各個(gè)任務(wù)的打印長度均一致:24個(gè)中文字符(Unicode碼)和48個(gè)英文字符(ASCII碼)。
圖7 BM3803+μC/OS-II方案的通信記錄Fig.7 Communication record of BM3803+μC/OS-II solution
串口通信模式設(shè)置為8個(gè)數(shù)據(jù)位,沒有校驗(yàn)位,1個(gè)停止位和1個(gè)起始位,故每個(gè)任務(wù)打印的位數(shù)為:
(24×2+48)×10=960
串口通信使用的波特率為115 200 bit/s,所以每行打印耗時(shí)為:
1) 以時(shí)間戳為21:51:21:027和21:51:21:527的兩次任務(wù)1為例。兩次任務(wù)1的時(shí)間差為:
(0xEA5C+0xFFFF-0xF636)×16=
1 000 016 μs
查表2可知:這兩次任務(wù)1的時(shí)間差與規(guī)定的周期相差16 μs,在此任務(wù)所允許的周期偏差范圍100 μs內(nèi)。
2) 以時(shí)間戳為21:51:20:027和21:51:20:527的兩次任務(wù)6為例。兩次任務(wù)6的時(shí)間差為:
(0xFD1F-0x7E66)×16=519 056 μs
而21:51:20:027中的任務(wù)6之前有1次打印動(dòng)作,21:51:20:527中的任務(wù)6之前有3次打印動(dòng)作,故將時(shí)間差減去2次打印的耗時(shí):
519 056-(8 333×2)=502 390 μs
查表2可知:這兩次任務(wù)6的時(shí)間差與規(guī)定的周期0.5 s相差2 390 μs,在此任務(wù)所允許的周期偏差范圍10 000 μs內(nèi)。
3)以時(shí)間戳為21:51:18:527和21:51:19:027的兩次任務(wù)4為例。兩次任務(wù)4的時(shí)間差為:
(0x87F9-0x104E)×16=490 160μs
而21:51:18:527中的任務(wù)4之前有1次打印動(dòng)作,21:51:19:027中的任務(wù)4之前無打印動(dòng)作,故將時(shí)間差加上1次打印的耗時(shí):
490 160+(8 333×1)=498 493μs
查表2可知:這兩次任務(wù)4的時(shí)間差與規(guī)定的周期0.5 s相差1 507 μs,在此任務(wù)所允許的周期偏差范圍10 000 μs內(nèi)。
以相同的計(jì)算方式可計(jì)算出各個(gè)任務(wù)的周期偏差情況,均在所允許的偏差范圍內(nèi)。
此方案結(jié)構(gòu)如圖8所示,以地面檢測平臺(tái)的“1553B_PCI板卡軟件”為控制和顯示的工具,軟件界面如圖9所示。其中按鈕“start”啟動(dòng)定時(shí)器功能,開始執(zhí)行各個(gè)周期任務(wù)。使用按鍵 “inject”和“instruction”執(zhí)行任務(wù)2和任務(wù)3。
圖8 Windows+1553B_PCI板卡方案結(jié)構(gòu)Fig.8 Structure of windows+1553B_PCI board solution
首先根據(jù)上述“用戶任務(wù)說明”以及“1553B通信協(xié)議”查看圖9中數(shù)據(jù)的含義,得知所有用戶任務(wù)的執(zhí)行情況均正常。
本次試驗(yàn)所用工控機(jī)的處理器為4核i5-4570,其工作頻率為3.2 GHz,故打印的時(shí)間可以忽略不計(jì)。1553B_PCI板卡的時(shí)間標(biāo)簽的時(shí)間分辨率為固定的1 μs,其采用雙字存儲(chǔ),故可表示的最大時(shí)間為:
圖9 Windows+1553B_PCI板卡方案的任務(wù)測試Fig.9 Communication record of Windows+1553B_PCI solution
0xffffffff×1 μs=4 294 967 295 μs
以時(shí)間戳為14:4:8:844和14:4:9:858的兩次任務(wù)1為例,兩次任務(wù)1的時(shí)間差為:
(0x00b85230-0x00a8d91d)×1 μs=1 014 035 μs
查表2可知:這兩次任務(wù)1的時(shí)間差與規(guī)定的周期相差14 035 μs,超出該任務(wù)所允許的周期偏差范圍100 μs。
以時(shí)間戳為14:4:10:779和14:4:12:791的兩次任務(wù)7為例,兩次任務(wù)7的時(shí)間差為:
(0x00e513c4-0x00c6602a)×1 μs=2 012 058 μs
查表2可知:這兩次任務(wù)7的時(shí)間差與規(guī)定的周期相差12 058 μs,超出該任務(wù)所允許的周期偏差范圍10 000 μs。
按照如上的試驗(yàn)方法和計(jì)算方式,統(tǒng)計(jì)計(jì)算多次的平均結(jié)果如表3所示。由于除任務(wù)1之外的其他周期任務(wù)的偏差上限都相同,故統(tǒng)一計(jì)算。
表3 周期偏差結(jié)果
由圖7、圖9和表3中的數(shù)據(jù)可知,BM3803+μC/OS-II的方案可以嚴(yán)格按照衛(wèi)星星上高層通信協(xié)議中的時(shí)間要求完成任務(wù),保證各個(gè)任務(wù)的周期偏差小于規(guī)定的偏差,并且實(shí)時(shí)性優(yōu)于Windows+1553B_PCI板卡方案。尤其是對于任務(wù)1廣播時(shí)間碼這項(xiàng)對實(shí)時(shí)性要求最高的任務(wù),Windows方案的平均偏差在14 ms左右,嚴(yán)重超過規(guī)定范圍,而BM3803方案可以保證平均偏差只在10 μs左右,大大提升了實(shí)時(shí)性能。
本文基于BM3803的1553B通信軟件的設(shè)計(jì),改善了工控機(jī)搭載1553B_PCI板卡的方式出現(xiàn)的定時(shí)不準(zhǔn)問題,可良好穩(wěn)定地完成任務(wù)。將μC/OS-II應(yīng)用在BM3803上也使得時(shí)間管理、任務(wù)調(diào)度等功能更加可靠,使得任務(wù)的維護(hù)和擴(kuò)展更加靈活方便。本設(shè)計(jì)為后續(xù)應(yīng)用程序的開發(fā)和擴(kuò)充打下了良好基礎(chǔ),并為未來B3803的設(shè)計(jì)提供了參考。
相比于傳統(tǒng)的1553B_PCI板卡方案,本文所構(gòu)建的實(shí)時(shí)性更強(qiáng)的衛(wèi)星數(shù)據(jù)仿真平臺(tái),接近真實(shí)地模擬了星上BC的動(dòng)作,在地面檢測平臺(tái)上對衛(wèi)星中的RT進(jìn)行了一系列檢測,并將所有通信任務(wù)的信息反饋到工控機(jī)上進(jìn)行顯示、記錄和分析,保證了地面檢測平臺(tái)的有效性。