專利名稱:實(shí)時多任務(wù)下死循環(huán)的處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信調(diào)試方法,特別涉及實(shí)時多任務(wù)下死循環(huán)的處理方法。
現(xiàn)在的實(shí)時多任務(wù)系統(tǒng)(如VxWorks和PSOS)的調(diào)試方法一般如
圖1所示。調(diào)試主機(jī)通過目標(biāo)系統(tǒng)服務(wù)模塊和目標(biāo)系統(tǒng)的代理通訊,達(dá)到控制目標(biāo)系統(tǒng)運(yùn)行的目的。這種方式所適用的通訊通道可以是以太網(wǎng)口或串口。圖中所示的“代理”實(shí)際上也是實(shí)時操作系統(tǒng)的一個任務(wù)形式,所述“代理”必須及時響應(yīng)目標(biāo)系統(tǒng)服務(wù)模塊的請求。所以,在系統(tǒng)設(shè)計時,常常要禁止任務(wù)的切換,任何其他任務(wù)包括代理都不能運(yùn)行,但這時應(yīng)用程序任務(wù)發(fā)生超時運(yùn)行或陷入死循環(huán),目標(biāo)系統(tǒng)服務(wù)模塊和目標(biāo)系統(tǒng)就失去聯(lián)系,而調(diào)式人員并不知道運(yùn)行的目標(biāo)系統(tǒng)在哪段程序發(fā)生了問題。即使在非調(diào)試版本運(yùn)行時發(fā)生了死循環(huán),調(diào)式人員也必須知道程序運(yùn)行到了什么地方,但這時應(yīng)用程序的控制臺任務(wù)已經(jīng)得不到運(yùn)行了,因此,調(diào)試員不再能獲得所需的信息。因而,按照現(xiàn)有技術(shù)的這種調(diào)試方法,實(shí)際只能靠猜測或不斷縮小范圍來定位和判定死循環(huán)發(fā)生的位置,既費(fèi)時費(fèi)力,判斷和處理問題的效率極為低下。
本發(fā)明的目的是提供一種在實(shí)時多任務(wù)下死循環(huán)的處理方法,能夠快速、準(zhǔn)確地判定死循環(huán)或超時運(yùn)行發(fā)生及發(fā)生位置。
為實(shí)現(xiàn)上述目的,本發(fā)明提供的實(shí)時多任務(wù)下死循環(huán)的處理方法包括以下步驟a)使用系統(tǒng)提供的時鐘中斷監(jiān)視一個任務(wù)是否陷入死循環(huán)或超常時間運(yùn)行;b)當(dāng)發(fā)現(xiàn)某個任務(wù)陷入死循環(huán)或超常時間運(yùn)行時,把發(fā)生超時的任務(wù)掛起;b)對掛起的超時任務(wù)進(jìn)行調(diào)試。
使用本發(fā)明實(shí)時多任務(wù)下死循環(huán)的處理方法可快速、準(zhǔn)確地判定死循環(huán)或超時運(yùn)行發(fā)生及發(fā)生位置,有效地解決了程序陷入死循環(huán)的及時處理問題。由于程序員能立即知道死循環(huán)或超時運(yùn)行發(fā)生的位置,為保證信道的暢通提供了必須的條件,在實(shí)際的應(yīng)用中發(fā)揮了重要的作用。不管是調(diào)試還是正式版本,都經(jīng)常檢測到程序超時運(yùn)行的情況。本發(fā)明同時提供超時運(yùn)行的時間,可以作為程序員去優(yōu)化設(shè)計和編碼的依據(jù)。
圖1是現(xiàn)有技術(shù)實(shí)時調(diào)試系統(tǒng)示意圖。
圖2是超時檢測和強(qiáng)制掛起原理圖。
下面結(jié)合附圖詳述本發(fā)明。如圖2所示,假設(shè)系統(tǒng)中有兩個不同優(yōu)先級的任務(wù)T1和T2在運(yùn)行,設(shè)T1的優(yōu)先級高,且T1、T2都處于非搶占模式,即如果T2不主動讓出CPU的話,T1是永遠(yuǎn)得不到執(zhí)行的,反之亦然。上圖即顯示了T2在發(fā)生超時的情況下,本方法如何探測、強(qiáng)制掛起T2。時鐘中斷定時、均勻地產(chǎn)生于時刻t0,t1,t2,t3,t4,t5,...,tn,...,并調(diào)用本方法安裝的時鐘中斷服務(wù)程序ISR。在時刻tn,設(shè)監(jiān)視到的信息(當(dāng)前任務(wù),起始時刻,當(dāng)前時刻,運(yùn)行時間)=(T2,t4,tn,tn-t4)。T2為當(dāng)前正執(zhí)行的任務(wù),t4為T2開始執(zhí)行時的時刻,T2和t4在任務(wù)切換入T2時記錄(任務(wù)切換時系統(tǒng)要調(diào)用本方法安裝的任務(wù)切換鉤函數(shù)hook,并傳入被切換的任務(wù)標(biāo)識,要切換去的任務(wù)標(biāo)識)。在tn時刻的時鐘中斷里,判斷tn-t4已大于等于設(shè)定的極限值TMAX,所以T2已超時運(yùn)行了,調(diào)用實(shí)時操作系統(tǒng)提供的任務(wù)掛起函數(shù)把T2掛起,并輸出提示信息。其他任務(wù)如T1就可以執(zhí)行了。這時啟動調(diào)試器就可以看到T2超時運(yùn)行發(fā)生在哪個地方,立即就定位到這樣的程序錯誤。
用SystemTime表示系統(tǒng)的時鐘,它是不斷更新的。當(dāng)某一任務(wù)被調(diào)度到開始運(yùn)行時,這時的系統(tǒng)時間是該任務(wù)本次運(yùn)行的起始時刻,用BeginTime記住,任務(wù)的標(biāo)識用Tid記住。每個時鐘中斷到來時,任務(wù)Tid連續(xù)一次運(yùn)行的時間t就是SystemTime-BeginTime。當(dāng)t超過預(yù)定的最大時間TMAX時,就斷定任務(wù)Tid運(yùn)行超時了,然后把任務(wù)Tid強(qiáng)制掛起。如果發(fā)生了任務(wù)切換,則Tid和BeginTime都要被更新,它們始終記住的是當(dāng)前任務(wù)的值。
下面對實(shí)現(xiàn)時的三個關(guān)鍵點(diǎn)加以詳細(xì)闡述。
(1)安裝時鐘中斷服務(wù)程序ISR和任務(wù)切換鉤函數(shù)hook讓自己的ISR在時鐘中斷到來時能被運(yùn)行。例如,在VxWorks和PSOS實(shí)時操作系統(tǒng)中,在BSP(板支持系統(tǒng)程序包)里可以作到。如何知道實(shí)時系統(tǒng)發(fā)生了任務(wù)切換以及從哪個任務(wù)切換到哪個任務(wù)?例如,在VxWorks實(shí)時操作系統(tǒng)中,可調(diào)用函數(shù)taskSwitchHookAdd()做到。例如,在PSOS實(shí)時操作系統(tǒng)中,在config.h文件里可以連接自己的任務(wù)切換鉤函數(shù)。到任務(wù)發(fā)生切換時,系統(tǒng)都會調(diào)用已連接的的鉤函數(shù),并帶入新舊任務(wù)的標(biāo)識。
(2)任務(wù)切換鉤函數(shù)hook監(jiān)視任務(wù)的切換如前所述,此時要更新需要監(jiān)視的任務(wù)的標(biāo)識Tid,和該任務(wù)本次運(yùn)行的起始時刻BeginTime。需要注意的是,對最低優(yōu)先級任務(wù)(如空閑任務(wù))不要監(jiān)控,因?yàn)樽畹蛢?yōu)先級任務(wù)運(yùn)行時間長一般是正常的。在這個函數(shù)中,還可以統(tǒng)計各任務(wù)運(yùn)行的實(shí)際時間狀況。
(3)時鐘中斷服務(wù)程序做超時檢測和掛起處理如前所述,當(dāng)前任務(wù)連續(xù)一次運(yùn)行的時間t=SystemTime-BeginTime。如果t>TMAX,就表示該任務(wù)超長時間運(yùn)行,掛起當(dāng)前任務(wù)Tid,實(shí)時操作系統(tǒng)就可以調(diào)度其他任務(wù)運(yùn)行,調(diào)試就可以繼續(xù)了。掛起調(diào)用在中斷里是可以使用的。掛起調(diào)用一般是多任務(wù)操作系統(tǒng)提供的一個系統(tǒng)調(diào)用。掛起時要輸出提示信息,包含Tid和任務(wù)名稱,方便調(diào)試。
權(quán)利要求
1.一種實(shí)時多任務(wù)下死循環(huán)的處理方法,包括步驟a)使用系統(tǒng)提供的時鐘中斷監(jiān)視一個任務(wù)是否陷入死循環(huán)或超常時間運(yùn)行;b)當(dāng)發(fā)現(xiàn)某個任務(wù)陷入死循環(huán)或超常時間運(yùn)行時,把發(fā)生超時的任務(wù)掛起;c)對掛起的超時任務(wù)進(jìn)行調(diào)試。
2.按權(quán)利要求1所述的方法,其特征在于每個時鐘中斷到來時,任務(wù)Tid連續(xù)一次運(yùn)行的時間t=SystemTime-Begin Time,當(dāng)t超過預(yù)定的最大時間TMAX時,斷定任務(wù)Tid運(yùn)行超時。
3.按權(quán)利要求1所述的方法,其特征在于在系統(tǒng)中安裝時鐘終端服務(wù)程序ISR和任務(wù)切換鉤函數(shù)HOOK。
4.按權(quán)利要求1所述的方法,其特征在于掛起調(diào)用是多任務(wù)操作系統(tǒng)提供的一個系統(tǒng)調(diào)用。
5.按權(quán)利要求1所述的方法,其特征在于掛起調(diào)用可以在中斷里使用。
6.按權(quán)利要求3所述的方法,其特征在于當(dāng)任務(wù)發(fā)生切換時,系統(tǒng)調(diào)用已連接的鉤函數(shù)。
7.按權(quán)利要求3所述的方法,其特征在于任務(wù)切換鉤函數(shù)不監(jiān)視最低優(yōu)先級任務(wù)。
8.按權(quán)利要求1或4所述的方法,其特征在于掛起時輸出提示信息、任務(wù)標(biāo)識、任務(wù)名稱。
全文摘要
一種實(shí)時多任務(wù)下死循環(huán)的處理方法,適用于通信系統(tǒng)運(yùn)行中在多任務(wù)環(huán)境下的程序調(diào)試,包括下述步驟:使用通信調(diào)試系統(tǒng)提供的時鐘監(jiān)視一個任務(wù)是否陷入死循環(huán)或超常時間運(yùn)行;當(dāng)發(fā)現(xiàn)某個任務(wù)陷入死循環(huán)或超常時間運(yùn)行時,把發(fā)生超時的任務(wù)掛起;對掛起的超時任務(wù)進(jìn)行調(diào)試。本發(fā)明有效地解決了程序陷入死循環(huán)的問題,可使程序員能快速判斷通信信道中死循環(huán)或超時運(yùn)行的發(fā)生及發(fā)生位置。
文檔編號G06F9/40GK1377148SQ0111252
公開日2002年10月30日 申請日期2001年3月27日 優(yōu)先權(quán)日2001年3月27日
發(fā)明者毛雪峰 申請人:華為技術(shù)有限公司