国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種航天器星上時(shí)間獲取方法

2021-09-03 07:41蘭天郭堅(jiān)張紅軍董振輝韋涌泉
關(guān)鍵詞:嵌套中斷時(shí)刻

蘭天,郭堅(jiān),張紅軍,董振輝,韋涌泉

北京空間飛行器總體設(shè)計(jì)部,北京 100094

1 引言

對(duì)星上時(shí)間進(jìn)行有效管理是保證航天器安全、可靠運(yùn)行的必要條件。星上時(shí)間管理通常包括時(shí)間恢復(fù)、時(shí)間校準(zhǔn)、時(shí)間維護(hù)、時(shí)間分發(fā)、時(shí)間獲取等幾個(gè)部分[1-6]。

時(shí)間恢復(fù)是在星載計(jì)算機(jī)異常切機(jī)、復(fù)位后,能夠讓星上時(shí)間延續(xù)切機(jī)、復(fù)位前的狀態(tài),并盡可能保證時(shí)間精度。時(shí)間校準(zhǔn)是通過(guò)直接授時(shí)、集中校時(shí)、均勻校時(shí)等手段,保證天地時(shí)統(tǒng)和航天器器間時(shí)統(tǒng),修正航天器守時(shí)誤差。時(shí)間維護(hù)是根據(jù)任務(wù)需要選擇高穩(wěn)晶振,控制航天器時(shí)鐘漂移,提升守時(shí)精度。時(shí)間分發(fā)是以秒脈沖、時(shí)間廣播等手段,為航天器中各時(shí)間用戶提供高精度時(shí)間。時(shí)間獲取是為星載計(jì)算機(jī)的程控、自主管理、自主健康等功能提供可靠、精確的判據(jù)。

航天軟件是具備強(qiáng)實(shí)時(shí)性特點(diǎn)的中斷驅(qū)動(dòng)型嵌入式軟件。在航天軟件中準(zhǔn)確獲取星上時(shí)間的主要挑戰(zhàn)是中斷搶占、中斷嵌套造成的數(shù)據(jù)競(jìng)爭(zhēng)。為保證星上時(shí)間獲取準(zhǔn)確性,首先要有效識(shí)別需要獲取星上時(shí)間的應(yīng)用場(chǎng)景,對(duì)相應(yīng)場(chǎng)景中不同優(yōu)先級(jí)的中斷間數(shù)據(jù)競(jìng)爭(zhēng)進(jìn)行有效的檢測(cè)和識(shí)別[7-13]。在此基礎(chǔ)上,合理設(shè)計(jì)中斷服務(wù)程序[14-15]和相應(yīng)的星上時(shí)間獲取方法[17-18],以預(yù)防因數(shù)據(jù)競(jìng)爭(zhēng)造成星上時(shí)間獲取異常。

航天器大多選擇82C54作為計(jì)時(shí)芯片,并將其配置為秒定時(shí)器使用[16]。在星載計(jì)算機(jī)軟件中維護(hù)一個(gè)含有秒部與毫秒部的星上時(shí)間,配合82C54一起完成航天器的時(shí)間維護(hù)。隨著航天器的功能、性能需求的演進(jìn),82C54定時(shí)器產(chǎn)生的秒中斷往往不再是航天器中優(yōu)先級(jí)最高的中斷。秒中斷與其他中斷間時(shí)序的不確定性可能導(dǎo)致出現(xiàn)中斷搶占和中斷嵌套,造成獲取到的星時(shí)與實(shí)際星時(shí)差1s的問(wèn)題。為了解決這一問(wèn)題,前人在硬件措施[17]和軟件措施[18]上均進(jìn)行了有益的探索。

本文首先對(duì)以往工程實(shí)踐中的4種軟件實(shí)現(xiàn)的星上時(shí)間獲取方法進(jìn)行了分析,明確其適用和不適用的數(shù)據(jù)競(jìng)爭(zhēng)場(chǎng)景。然后,針對(duì)工程應(yīng)用中遇到的處理器自動(dòng)清除中斷未決寄存器,導(dǎo)致現(xiàn)有星上時(shí)間獲取方法無(wú)法適用的問(wèn)題,提出了一種不依賴中斷狀態(tài)的星上時(shí)間獲取方法。

2 星上時(shí)間獲取方法比較研究

2.1 通過(guò)82C54維護(hù)星上時(shí)間的過(guò)程

航天器的星上時(shí)間通常由數(shù)據(jù)管理分系統(tǒng)或綜合電子分系統(tǒng)的星載計(jì)算機(jī)維護(hù)。在星載計(jì)算機(jī)軟件中維護(hù)一個(gè)有秒部和毫秒部的時(shí)間,同時(shí)采用82C54定時(shí)器芯片進(jìn)行秒計(jì)時(shí),即將82C54定時(shí)器產(chǎn)生中斷的周期定為1 s。

在初始化時(shí),對(duì)82C54進(jìn)行定時(shí)周期配置,82C54芯片自動(dòng)開(kāi)始倒數(shù)時(shí)間,當(dāng)?shù)褂?jì)時(shí)到1時(shí),82C54芯片輸出一個(gè)寬度為1個(gè)時(shí)鐘周期的中斷信號(hào),并重新加載計(jì)數(shù)值,開(kāi)始下一輪秒計(jì)時(shí),如圖1所示。星載計(jì)算機(jī)軟件響應(yīng)中斷進(jìn)入秒中斷服務(wù)程序后,對(duì)軟件維護(hù)的星上時(shí)間進(jìn)行加1 s的操作。在任意時(shí)刻,軟件可通過(guò)軟件維護(hù)的星上時(shí)間和82C54內(nèi)的毫秒計(jì)時(shí),計(jì)算得到準(zhǔn)確的星上時(shí)間。

在星載計(jì)算機(jī)軟件中,星上時(shí)間獲取問(wèn)題的關(guān)鍵在于:

1)82C54計(jì)時(shí)動(dòng)作與軟件維護(hù)秒值的動(dòng)作相互獨(dú)立,82C54在產(chǎn)生秒中斷后隨即開(kāi)始下一秒的計(jì)時(shí),不會(huì)等待軟件。

2)軟件獲取星上時(shí)間的動(dòng)作與軟件維護(hù)秒值的動(dòng)作之間存在對(duì)星上時(shí)間秒部的數(shù)據(jù)競(jìng)爭(zhēng)。在中斷搶占、中斷嵌套等工況下獲取星上時(shí)間,有可能出現(xiàn)秒中斷服務(wù)程序與星上時(shí)間獲取動(dòng)作兩者之間相互搶占的情況。此時(shí),會(huì)出現(xiàn)星上時(shí)間秒部的數(shù)據(jù)完整性問(wèn)題和星上時(shí)間秒部與毫秒部的數(shù)據(jù)匹配性問(wèn)題。

針對(duì)星上時(shí)間秒部的數(shù)據(jù)完整性問(wèn)題,可將軟件維護(hù)秒值的動(dòng)作、星上時(shí)間獲取函數(shù)中計(jì)算當(dāng)前星時(shí)的操作封裝為原子操作,通過(guò)關(guān)中斷保證數(shù)據(jù)完整性。

針對(duì)星上時(shí)間秒部與毫秒部的數(shù)據(jù)匹配性問(wèn)題,需綜合考慮比秒中斷優(yōu)先級(jí)更高的中斷數(shù)量、高優(yōu)先級(jí)中斷中獲取星上時(shí)間的時(shí)機(jī)、操作系統(tǒng)是否允許中斷嵌套等因素,合理設(shè)計(jì)星上時(shí)間獲取方法,準(zhǔn)確判斷秒中斷服務(wù)程序中是否維護(hù)過(guò)秒值,根據(jù)判斷結(jié)果決定是否對(duì)獲取到的時(shí)間進(jìn)行加1 s修正。

2.2 現(xiàn)有4種星上時(shí)間獲取方法適用性研究

在現(xiàn)有航天器中,獲取星上時(shí)間的常見(jiàn)方法有4種[18],針對(duì)這4種方法在不同中斷場(chǎng)景下的適用性進(jìn)行了分析。

2.2.1 方法1

不關(guān)中斷,取2次82C54計(jì)數(shù),根據(jù)計(jì)數(shù)值是否發(fā)生翻轉(zhuǎn)判斷是否存在數(shù)據(jù)競(jìng)爭(zhēng)。方法1的星上時(shí)間獲取函數(shù)具體步驟如下:

1)第1次從82C54取毫秒值。

2)取軟件中保存的星時(shí)。

3)第2次從82C54取毫秒值。

4)比較2次從82C54取的毫秒值。若第2次取的毫秒值小于第一次取到的值,則認(rèn)為在取時(shí)間過(guò)程中發(fā)生過(guò)82C54定時(shí)中斷。重新讀取軟件中保存的星時(shí),用新讀到的星時(shí)和第2次取到的82C54毫秒值一起計(jì)算出當(dāng)前星時(shí),此時(shí)該時(shí)間已經(jīng)是在秒中斷服務(wù)程序中維護(hù)過(guò)的時(shí)間。

方法1適用于在比秒中斷優(yōu)先級(jí)低的中斷、任務(wù)中獲取星上時(shí)間,但不適用于在比秒中斷高的中斷中獲取星上時(shí)間。

如圖2所示,在T1時(shí)刻中斷A發(fā)生,在中斷A的中斷服務(wù)程序執(zhí)行過(guò)程中,在T2時(shí)刻取星上時(shí)間時(shí),發(fā)生秒中斷。由于中斷A的優(yōu)先級(jí)高于秒中斷,秒中斷需要等到T3時(shí)刻才能維護(hù)軟件中的星時(shí)。在這種工況下,方法1中第2次取到的軟件星時(shí)是和實(shí)際星上時(shí)間之間有1 s誤差的時(shí)間。

圖2 單個(gè)高優(yōu)先級(jí)中斷搶占秒中斷Fig.2 The second interrupt preempted by a single high-priority interrupt

2.2.2 方法2

關(guān)中斷,取2次82C54計(jì)數(shù),根據(jù)計(jì)數(shù)值是否翻轉(zhuǎn)判斷是否存在數(shù)據(jù)競(jìng)爭(zhēng)。方法2的星上時(shí)間獲取函數(shù)具體步驟如下:

1)關(guān)中斷。

2)第1次從82C54取毫秒值。

3)取軟件中保存的星時(shí)。

4)第2次從82C54取毫秒值。

5)比較2次從82C54取的毫秒值。若第2次取的毫秒值小于第一次取到的值,則認(rèn)為在取時(shí)間過(guò)程中產(chǎn)生了82C54定時(shí)中斷,但由于處于關(guān)中斷狀態(tài),該中斷暫未被響應(yīng)。此時(shí),在取到的軟件星時(shí)基礎(chǔ)上加1 s,然后使用修正后軟件星時(shí)和第2次從82C54取到的毫秒值一起計(jì)算出當(dāng)前星時(shí)。

6)開(kāi)中斷。

方法2適用于在比秒中斷優(yōu)先級(jí)低的中斷、任務(wù)中獲取星上時(shí)間,也部分適用于在比秒中斷優(yōu)先級(jí)高的中斷中獲取星上時(shí)間。將方法2用于在比秒中斷優(yōu)先級(jí)高的中斷中獲取星上時(shí)間時(shí),只適用于單個(gè)高優(yōu)先級(jí)中斷嵌套秒中斷,且進(jìn)入高優(yōu)先級(jí)中斷后馬上取星上時(shí)間的場(chǎng)景。

如圖3所示,中斷A優(yōu)先級(jí)高于中斷B,中斷B優(yōu)先級(jí)高于秒中斷。在中斷A執(zhí)行過(guò)程中,秒中斷于T1時(shí)刻發(fā)生;由于中斷優(yōu)先級(jí),秒中斷需要等待到T3時(shí)刻才能維護(hù)軟件中的星上時(shí)間。若在中斷B中,于T2時(shí)刻需獲取星上時(shí)間,此時(shí)采用方法2,根據(jù)從82C54中2次取到的毫秒值大小無(wú)法檢測(cè)到秒中斷嵌套,軟件無(wú)法決定是否在取到的軟件星時(shí)基礎(chǔ)上進(jìn)行加1 s的操作。

圖3 多個(gè)高優(yōu)先級(jí)中斷搶占秒中斷Fig.3 The second interrupt preempted by multiple high-priority interrupts

2.2.3 方法3

關(guān)中斷,通過(guò)讀處理器中斷狀態(tài),判斷是否嵌套了秒中斷。方法3的星上時(shí)間獲取函數(shù)具體步驟如下:

1)關(guān)中斷。

2)第1次從82C54取毫秒值。

3)取軟件中保存的星時(shí)。

4)讀處理器中斷狀態(tài),判斷是否嵌套了秒中斷。若嵌套了秒中斷,則再次從82C54取毫秒值,依據(jù)該毫秒值和加1 s后的軟件星時(shí),計(jì)算得到當(dāng)前的星上時(shí)間。

5)開(kāi)中斷。

方法3通過(guò)判斷處理器中斷狀態(tài),檢測(cè)秒中斷是否被搶占或嵌套,克服了方法1、方法2中判斷82C54計(jì)數(shù)值翻轉(zhuǎn)在某些場(chǎng)景可能存在的漏判問(wèn)題。但是,該方法和方法1、方法2一樣,只適用于不允許中斷嵌套的場(chǎng)景。在允許中斷嵌套的場(chǎng)景,該方法無(wú)法判斷秒中斷被嵌套時(shí)是否維護(hù)過(guò)軟件星時(shí)。

如圖4所示,中斷A優(yōu)先級(jí)高于秒中斷,在秒中斷開(kāi)始執(zhí)行后,中斷A打斷秒中斷。中斷A在T2時(shí)刻需要獲取星時(shí),此時(shí)采用方法3,通過(guò)處理器中斷狀態(tài)寄存器檢測(cè)到秒中斷被嵌套時(shí),并不能確定秒中斷是否維護(hù)過(guò)時(shí)間。若秒中斷在T3時(shí)刻維護(hù)時(shí)間,則通過(guò)方法3可以獲得正確的星上時(shí)間;若秒中斷在T1時(shí)刻維護(hù)時(shí)間,則通過(guò)方法3獲得的星上時(shí)間比實(shí)際時(shí)間多1 s。

圖4 高優(yōu)先級(jí)中斷嵌套秒中斷Fig.4 A high-priority interrupt nested within a second interrupt

2.2.4 方法4

關(guān)中斷,通過(guò)讀處理器中斷狀態(tài)判斷是否嵌套了秒中斷,通過(guò)維護(hù)時(shí)間標(biāo)識(shí)判斷秒中斷內(nèi)是否已經(jīng)對(duì)星上時(shí)間進(jìn)行加1 s的操作。

在前期工程實(shí)踐中,針對(duì)方法1、方法2、方法3都不能在中斷嵌套場(chǎng)景下準(zhǔn)確獲取星上時(shí)間的問(wèn)題,項(xiàng)目組提出了一種高可靠的星載軟件時(shí)間管理方法[18]。

方法4涉及時(shí)間獲取函數(shù)、秒中斷服務(wù)程序、高優(yōu)先級(jí)任務(wù)等3個(gè)模塊。該方法通過(guò)一個(gè)“秒中斷維護(hù)星上時(shí)間”的全局標(biāo)識(shí)來(lái)識(shí)別秒中斷被嵌套時(shí)是否已維護(hù)過(guò)星上時(shí)間。

在秒中斷服務(wù)程序中,具體步驟如下:

1)設(shè)置“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)為“未維護(hù)”。

2)關(guān)中斷。

3)設(shè)置“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)為“已維護(hù)”。

4)維護(hù)軟件中保存的星上時(shí)間。

5)開(kāi)中斷。

在秒中斷之后的第1個(gè)高優(yōu)先級(jí)任務(wù)中,將“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)設(shè)置為“未維護(hù)”。

在時(shí)間獲取函數(shù)中,根據(jù)中斷狀態(tài)寄存器和“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)一起判斷是否在獲取時(shí)間時(shí)進(jìn)行加1s操作,具體步驟如下:

1)關(guān)中斷。

2)獲取軟件中的星時(shí)和82C54中的計(jì)數(shù)值,根據(jù)這2個(gè)值得到當(dāng)前的星上時(shí)間。

3)讀處理器的中斷狀態(tài)寄存器,檢查是否有秒中斷。若沒(méi)有秒中斷,則維持上一步計(jì)算得到的星上時(shí)間不變;若有秒中斷,則進(jìn)一步檢查“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)。若“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)為“已維護(hù)”,則維持之前計(jì)算的星上時(shí)間不變;若“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)為“未維護(hù)”,則在之前計(jì)算的星時(shí)基礎(chǔ)上加1 s,作為當(dāng)前的星上時(shí)間。

4)開(kāi)中斷。

通過(guò)上述操作,方法4克服了方法3無(wú)法適應(yīng)中斷嵌套場(chǎng)景的問(wèn)題。

針對(duì)4種方法的適用場(chǎng)景進(jìn)行比較,如表1所示。

表1 星上時(shí)間獲取方法適用性比較

從表1可見(jiàn),上述方法的適用場(chǎng)景如下:

1)方法1僅適用于在優(yōu)先級(jí)比秒中斷低的任務(wù)、中斷中使用;

2)方法2在方法1基礎(chǔ)上,增加了在禁止中斷嵌套的前提下,單個(gè)高優(yōu)先級(jí)中斷搶占秒中斷,且在進(jìn)入高優(yōu)先級(jí)中斷后馬上獲取星上時(shí)間的支持;

3)方法3在方法2的基礎(chǔ)上,增加了在禁止中斷嵌套的前提下,多個(gè)高優(yōu)先級(jí)中斷搶占秒中斷時(shí),在任意高優(yōu)先級(jí)中斷里獲取星上時(shí)間的支持;

4)方法4在方法3的基礎(chǔ)上,增加了允許中斷嵌套的場(chǎng)景下,在任意高優(yōu)先級(jí)中斷里獲取星上時(shí)間的支持。

可見(jiàn),方法4是現(xiàn)有方法中適用范圍最廣的一種星上時(shí)間獲取方法。某新型處理器進(jìn)入中斷后,處理器會(huì)自動(dòng)清除相應(yīng)的中斷狀態(tài),且該清除動(dòng)作無(wú)法通過(guò)軟件進(jìn)行配置。這使得采用方法4獲取星上時(shí)間時(shí),無(wú)法在高優(yōu)先級(jí)中斷中檢測(cè)出是否嵌套了秒中斷,進(jìn)而無(wú)法獲取準(zhǔn)確的星上時(shí)間。因此,針對(duì)現(xiàn)有星上時(shí)間獲取方法與處理器中斷狀態(tài)清除機(jī)制不匹配的問(wèn)題,提出了一種不依賴中斷狀態(tài)的星上時(shí)間獲取方法。

3 不依賴中斷狀態(tài)的星時(shí)獲取方法

現(xiàn)有星上時(shí)間獲取方法判斷是否應(yīng)進(jìn)行加1 s操作時(shí),進(jìn)行了兩方面判斷:一是是否發(fā)生了秒中斷嵌套,二是是否在被嵌套的秒中斷過(guò)程中維護(hù)過(guò)星上時(shí)間。

首先,通過(guò)82C54內(nèi)計(jì)數(shù)值判斷是否發(fā)生秒中斷嵌套。分析了“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)值的變化與82C54計(jì)數(shù)值之間的關(guān)系,如圖5所示。

從圖5中可見(jiàn),T1時(shí)刻為秒中斷發(fā)生時(shí)刻;T2時(shí)刻為秒中斷服務(wù)程序內(nèi)關(guān)中斷后將“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)的值從“未維護(hù)”變?yōu)椤耙丫S護(hù)”的時(shí)刻;T3為在高優(yōu)先級(jí)任務(wù)中將“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)的值設(shè)為“未維護(hù)”的時(shí)刻。

圖5 星上時(shí)間維護(hù)標(biāo)識(shí)值變化與82C54計(jì)數(shù)值之間的關(guān)系Fig.5 The relationship between the change of onboard-time modifying mark and the 82C54 counter

設(shè)在任意時(shí)刻都可能獲取星上時(shí)間,在從T1到T2的時(shí)間段內(nèi)獲取星上時(shí)間時(shí),需要在星上時(shí)間獲取函數(shù)中進(jìn)行加1 s的操作;在T2時(shí)刻之后,直到下一次秒中斷產(chǎn)生之前,獲取星上時(shí)間時(shí)不需進(jìn)行加1 s的操作。

T2時(shí)刻是一個(gè)不固定的值,其大小與在秒中斷發(fā)生后(T1時(shí)刻之后),所有比秒中斷優(yōu)先級(jí)更高的中斷服務(wù)程序的總執(zhí)行時(shí)間有關(guān)。因此,需要一個(gè)輔助判據(jù)來(lái)確定當(dāng)前處于T2時(shí)刻之前還是之后。

該輔助判據(jù)可通過(guò)“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)實(shí)現(xiàn)。在T1時(shí)刻到T3時(shí)刻之間,可通過(guò)“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)的值來(lái)判斷是處于T2時(shí)刻之前還是之后。

但是,T3時(shí)刻同樣是一個(gè)不固定的值。在上章所述的方法4中,T3時(shí)刻取決于秒中斷服務(wù)程序之后高優(yōu)先任務(wù)第1次開(kāi)始運(yùn)行的時(shí)間。

秒中斷信號(hào)在T1時(shí)刻產(chǎn)生,82C54計(jì)數(shù)值也在T1時(shí)刻發(fā)生翻轉(zhuǎn)。在T1時(shí)刻到T3時(shí)刻之間,82C54計(jì)數(shù)值呈單調(diào)遞減趨勢(shì),換算成的時(shí)間呈單調(diào)遞增趨勢(shì)??赏ㄟ^(guò)選取一個(gè)合適的時(shí)間閾值來(lái)判斷是否處于T3時(shí)刻之前,該時(shí)間閾值應(yīng)在T2時(shí)刻的理論最大值到T3時(shí)刻的理論最小值之間。

T2時(shí)刻的理論最小值是T1時(shí)刻,T2時(shí)刻的理論最大值可通過(guò)分析軟件中所有優(yōu)先級(jí)比秒中斷高的中斷服務(wù)程序的最高出現(xiàn)頻率和最大執(zhí)行時(shí)間得到。T3時(shí)刻的理論最小值是T2時(shí)刻,T3時(shí)刻的理論最大值應(yīng)在下次秒中斷來(lái)臨時(shí)刻之前。

通過(guò)調(diào)研現(xiàn)有星上軟件設(shè)計(jì)情況,使用82C54計(jì)時(shí)的相鄰兩次秒中斷的間隔有下述2類:

1)軟件不需要產(chǎn)生秒脈沖信號(hào)。軟件在授時(shí)、校時(shí)導(dǎo)致毫秒部變化時(shí),僅將變化累積在軟件維護(hù)的星上時(shí)間上,不調(diào)整82C54定時(shí)器的加載值。在該設(shè)計(jì)狀態(tài)下,相鄰兩次秒中斷間隔時(shí)間為1 s。

2)軟件需要產(chǎn)生秒脈沖信號(hào)。在發(fā)生授時(shí)、校時(shí)導(dǎo)致毫秒部變化時(shí),軟件需要重置一次82C54加載值,以保證下次秒中斷產(chǎn)生時(shí)刻與秒脈沖對(duì)齊。為避免相鄰兩次秒中斷間隔過(guò)短,軟件會(huì)調(diào)整加載進(jìn)82C54的毫秒值,將相鄰兩次秒中斷的間隔時(shí)間限制在500 ms~1.5 s之間。

可見(jiàn),應(yīng)保證在T2時(shí)刻出現(xiàn)理論最大值的情況下,T3時(shí)刻的理論最大值小于500 ms。

通過(guò)靜態(tài)分析和單元測(cè)試,獲得了比秒中斷優(yōu)先級(jí)高的中斷服務(wù)程序的最大執(zhí)行時(shí)間,在該時(shí)間基礎(chǔ)上考慮設(shè)計(jì)余量,將T2時(shí)刻的理論最大值計(jì)為100 ms。

在軟件中引入節(jié)拍計(jì)數(shù)Ctimes以控制T2時(shí)刻與T3時(shí)刻間的時(shí)間間隔,即在秒中斷服務(wù)程序中將Ctimes的值清零;在每次運(yùn)行高優(yōu)先任務(wù)時(shí)將Ctimes的計(jì)數(shù)加1,之后檢測(cè)到該計(jì)數(shù)≥閾值N且“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)的值為“已維護(hù)”時(shí),將“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)的值修改為“未維護(hù)”。設(shè)高優(yōu)先級(jí)任務(wù)的周期為Ttask,T3時(shí)刻的實(shí)際值滿足下式:

(T1+N×Ttask)≤T3≤

(T2max+(N+1)×Ttask)

(1)

在本項(xiàng)目中,Ttask為100 ms,N值為2,結(jié)合上述T2max為100 ms,可知T3時(shí)刻的范圍是(T1+200 ms)到(T1+400 ms),滿足T3時(shí)刻的理論最大值應(yīng)小于500 ms的約束條件。

在上述分析基礎(chǔ)上,選擇門限值150 ms,作為判斷軟件是否處于T2時(shí)刻到T3時(shí)刻之間的判據(jù),并根據(jù)上述分析的結(jié)論重新設(shè)計(jì)了秒中斷服務(wù)程序和星上時(shí)間獲取函數(shù)。

秒中斷服務(wù)程序流程如圖6所示。在秒中斷服務(wù)程序中維護(hù)星上時(shí)間秒值,將該過(guò)程封裝成原子操作,過(guò)程中關(guān)中斷。

圖6 秒中斷服務(wù)程序流程Fig.6 Flow of second interrupt service procedure

星上時(shí)間獲取函數(shù)流程如圖7所示。星上時(shí)間獲取步驟如下:

圖7 星上時(shí)間獲取函數(shù)流程Fig.7 Flow of onboard time acquisition procedure

1)關(guān)中斷。

2)獲取軟件中的星時(shí)和82C54中的計(jì)數(shù)值,根據(jù)這兩個(gè)值得到當(dāng)前的星上時(shí)間。

3)根據(jù)82C54計(jì)數(shù)值換算的毫秒值,判斷當(dāng)前是否存在因中斷搶占、中斷嵌套導(dǎo)致秒中斷產(chǎn)生后未維護(hù)星上時(shí)間的可能。

若82C54毫秒值大于150 ms,認(rèn)為不存在可能,維持之前計(jì)算的星上時(shí)間不變;若82C54毫秒值不大于150 ms,認(rèn)為存在可能,進(jìn)一步檢查“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)。

4)在82C54毫秒值不大于150 ms時(shí),若“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)為“已維護(hù)”,則維持之前計(jì)算的星上時(shí)間不變;若“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)為“未維護(hù)”,則在之前計(jì)算的星時(shí)基礎(chǔ)上加1 s,作為當(dāng)前的星上時(shí)間。

5)開(kāi)中斷。

從上述步驟可見(jiàn),和本文1.2節(jié)中提到的4種方法一樣,該方法的復(fù)雜度保持在O(1)級(jí)別,計(jì)算復(fù)雜度相當(dāng)。對(duì)5種方法的代碼實(shí)現(xiàn)進(jìn)行了比較,本節(jié)所提方法的代碼規(guī)模與方法4相近。

針對(duì)該方法在各種中斷嵌套場(chǎng)景下的工作情況進(jìn)行了分析:

1)高優(yōu)先級(jí)中斷發(fā)生在兩次秒中斷之間,高優(yōu)先級(jí)中任意時(shí)刻獲取星上時(shí)間。此時(shí)又可細(xì)分為2種情況,一是高優(yōu)先級(jí)中斷發(fā)生在T2時(shí)刻到150 ms之間,即上一次秒中斷剛結(jié)束;二是高優(yōu)先級(jí)中斷發(fā)生在150 ms到下次秒中斷來(lái)臨之間。

若高優(yōu)先級(jí)中斷發(fā)生在T2時(shí)刻到150 ms之間,此時(shí)“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)的狀態(tài)已在秒中斷里被改寫為“已維護(hù)”,因此不會(huì)進(jìn)行加1 s操作。

若高優(yōu)先級(jí)中斷發(fā)生在150 ms到下次秒中斷來(lái)臨之間,此時(shí)82C54毫秒值大于150 ms,因此不會(huì)進(jìn)行加1 s操作。在高優(yōu)先級(jí)中斷發(fā)生在兩次秒中斷之間時(shí),該方法能夠準(zhǔn)確獲得星上時(shí)間。

2)高優(yōu)先級(jí)中斷先發(fā)生,高優(yōu)先級(jí)中斷處理過(guò)程中,秒中斷發(fā)生,高優(yōu)先級(jí)中斷中任意時(shí)刻獲取星上時(shí)間。

此時(shí),82C54毫秒值在圖5中的T1時(shí)刻到T2時(shí)刻,滿足不大于150 ms的條件;同時(shí),“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)在上一個(gè)秒中斷后的T3時(shí)刻被設(shè)為“未維護(hù)”,此時(shí)星上時(shí)間獲取函數(shù)中會(huì)進(jìn)行加1 s操作。秒中斷在高優(yōu)先級(jí)中斷處理過(guò)程中發(fā)生的場(chǎng)景下,該方法能夠正確獲取星上時(shí)間。

3)秒中斷先發(fā)生,高優(yōu)先級(jí)中斷在秒中斷維護(hù)星上時(shí)間之前嵌套秒中斷,在高優(yōu)先級(jí)中斷中任意時(shí)刻獲取時(shí)間。

此時(shí),82C54毫秒值在圖5中的T1時(shí)刻到T2時(shí)刻,滿足不大于150 ms的條件;同時(shí),“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)在上一個(gè)秒中斷后的T3時(shí)刻被設(shè)為“未維護(hù)”,此時(shí)星上時(shí)間獲取函數(shù)中會(huì)進(jìn)行加1 s操作。該方法能夠正確獲取星上時(shí)間。

4)秒中斷先發(fā)生,高優(yōu)先級(jí)中斷在秒中斷維護(hù)星上時(shí)間之后嵌套秒中斷,在高優(yōu)先級(jí)中斷中任意時(shí)刻獲取時(shí)間。

此時(shí),“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)的狀態(tài)已在秒中斷里被改寫為“已維護(hù)”,因此不會(huì)進(jìn)行加1 s操作。該方法能夠正確獲取星上時(shí)間。

4 試驗(yàn)驗(yàn)證

為驗(yàn)證星上時(shí)間獲取方法功能正確性,通過(guò)修改秒中斷服務(wù)程序的方式,模擬高優(yōu)先級(jí)中斷嵌套秒中斷的工況,測(cè)試用秒中斷服務(wù)程序如圖8所示。

在試驗(yàn)中將前文分析的各種場(chǎng)景,歸結(jié)為在秒中斷服務(wù)程序中關(guān)中斷前發(fā)生中斷嵌套并取星上時(shí)間(測(cè)試點(diǎn)1)和在秒中斷服務(wù)程序中開(kāi)中斷后發(fā)生中斷嵌套并取星上時(shí)間(測(cè)試點(diǎn)2)2種情況。

在測(cè)試點(diǎn)1、2,直接調(diào)用本文提出的星上時(shí)間獲取方法,獲取星上時(shí)間并保存在特定RAM區(qū)內(nèi)。在軟件任務(wù)隊(duì)列中添加測(cè)試信息輸出任務(wù),該任務(wù)從RAM區(qū)讀出待輸出的測(cè)試數(shù)據(jù),將其組織成特定格式,通過(guò)1553B總線消息輸出測(cè)試數(shù)據(jù),并通過(guò)1553B總線監(jiān)視設(shè)備進(jìn)行監(jiān)視,如圖9、圖10所示。

圖10 星上時(shí)間獲取方法測(cè)試記錄Fig.10 Test record of onboard time acquisition method

從圖9中可見(jiàn),RT18是該航天器1553B總線網(wǎng)絡(luò)中的一個(gè)空閑RT地址,軟件將其用作測(cè)試,通過(guò)向該RT的不同子地址發(fā)送定制內(nèi)容的測(cè)試消息,實(shí)現(xiàn)對(duì)軟件內(nèi)部狀態(tài)的靈活監(jiān)視。

發(fā)往RT18子地址6的測(cè)試消息類型為BC-RT消息,消息含32個(gè)數(shù)據(jù)字。星上時(shí)間占用的6個(gè)字節(jié)中,第1~4字節(jié)為秒部,第5、6字節(jié)為毫秒部,高字節(jié)在前,低字節(jié)在后。在測(cè)試點(diǎn)1、2采集的星上時(shí)間被放置在測(cè)試消息中的固定位置,第1~6字節(jié)(從1開(kāi)始計(jì)數(shù))為圖8中測(cè)試點(diǎn)1獲取的星上時(shí)間,即模擬在秒中斷發(fā)生后,秒中斷服務(wù)程序還未維護(hù)星上時(shí)間時(shí)被高優(yōu)先級(jí)中斷嵌套,在高優(yōu)先級(jí)中斷中獲取的星上時(shí)間。在第17~22字節(jié)打印了圖8中測(cè)試點(diǎn)2獲取的星上時(shí)間,即模擬在秒中斷發(fā)生后,秒中斷服務(wù)程序完成對(duì)星上時(shí)間維護(hù)后被高優(yōu)先級(jí)中斷嵌套,在高優(yōu)先級(jí)中斷中獲取的星上時(shí)間。格式與測(cè)試點(diǎn)1一致。

圖8 測(cè)試用秒中斷服務(wù)程序Fig.8 Second interrupt service procedure for verification

從圖9中可見(jiàn),用本文提出的星上時(shí)間獲取方法在測(cè)試點(diǎn)1、2獲取的星上時(shí)間一致,沒(méi)有相差1 s的問(wèn)題,說(shuō)明該方法能夠正確識(shí)別出是否發(fā)生中斷嵌套及發(fā)生中斷嵌套時(shí)秒中斷服務(wù)程序是否維護(hù)過(guò)星上時(shí)間。

圖9 通過(guò)1553B消息監(jiān)視在2個(gè)測(cè)試點(diǎn)獲取的時(shí)間Fig.9 Monitoring the onboard time acquired at two test points by 1553B message

在秒中斷服務(wù)程序維護(hù)時(shí)間前獲取星上時(shí)間時(shí),該方法能夠正確對(duì)取到的時(shí)間進(jìn)行修正;在秒中斷服務(wù)程序維護(hù)時(shí)間后獲取星上時(shí)間時(shí),該方法不會(huì)進(jìn)行誤修正。

針對(duì)時(shí)間獲取功能的穩(wěn)定性進(jìn)行了長(zhǎng)時(shí)間拷機(jī)測(cè)試,通過(guò)總線監(jiān)視的過(guò)濾功能檢索出相關(guān)測(cè)試記錄,對(duì)星上時(shí)間獲取穩(wěn)定性進(jìn)行驗(yàn)證,如圖10所示。通過(guò)上述測(cè)試,驗(yàn)證了該星上時(shí)間獲取方法在秒中斷被嵌套時(shí),能夠穩(wěn)定、正確地獲取星上時(shí)間。

5 結(jié)論

針對(duì)現(xiàn)有適用于中斷嵌套場(chǎng)景的星上時(shí)間獲取方法,存在對(duì)處理器中斷狀態(tài)的依賴,導(dǎo)致無(wú)法在新項(xiàng)目中移植使用的問(wèn)題,提出了一種不依賴中斷狀態(tài)的航天器星上時(shí)間獲取方法。

該方法在現(xiàn)有星上時(shí)間獲取方法基礎(chǔ)上[18],調(diào)整了對(duì)秒中斷嵌套的判定方法。將依據(jù)處理器中斷狀態(tài)判斷是否存在秒中斷嵌套,變?yōu)橐罁?jù)82C54中毫秒計(jì)數(shù)值判斷是否存在秒中斷嵌套,進(jìn)而依據(jù)“秒中斷維護(hù)星上時(shí)間”標(biāo)識(shí)判斷是否需要對(duì)當(dāng)前星上時(shí)間進(jìn)行加1 s修正。

修改后的方法不依賴硬件處理器的中斷狀態(tài),具有良好的可移植性。該方法已在火星探測(cè)器的多臺(tái)星載計(jì)算機(jī)上得到成功應(yīng)用,可為后續(xù)航天器軟件設(shè)計(jì)提供參考。

猜你喜歡
嵌套中斷時(shí)刻
冬“傲”時(shí)刻
TMS320F28335外部中斷分析與研究
捕獵時(shí)刻
雪后林鳥
論電影嵌套式結(jié)構(gòu)的內(nèi)涵與類型
跟蹤導(dǎo)練(二)(5)
嵌套交易如何實(shí)現(xiàn)逆市盈利
巧用嵌套交易實(shí)現(xiàn)逆市盈利
表格在網(wǎng)頁(yè)中的靈活運(yùn)用
一天的時(shí)刻
来凤县| 封丘县| 平凉市| 吐鲁番市| 丹寨县| 桐庐县| 马尔康县| 泉州市| 梓潼县| 平顺县| 丹东市| 陈巴尔虎旗| 荣昌县| 兴海县| 额济纳旗| 泸溪县| 潍坊市| 逊克县| 吕梁市| 龙胜| 会泽县| 那坡县| 信丰县| 富平县| 晋江市| 岳普湖县| 灵山县| 乐东| 周口市| 丹东市| 济阳县| 龙陵县| 新平| 巩义市| 郴州市| 哈密市| 昌吉市| 吴忠市| 大竹县| 微山县| 金山区|