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