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