一種嵌入式程序執(zhí)行順序的監(jiān)控方法
【專利摘要】本發(fā)明公開了一種嵌入式程序執(zhí)行順序的監(jiān)控方法,該監(jiān)控方法通過對嵌入式程序設(shè)定各級函數(shù)對應(yīng)的局部順序標(biāo)志,在各級函數(shù)的每一條程序語句執(zhí)行結(jié)束后規(guī)律性地改變對應(yīng)的局部順序標(biāo)志的數(shù)值,每一層級的函數(shù)執(zhí)行結(jié)束后,根據(jù)對應(yīng)的局部順序標(biāo)志的數(shù)值判斷是否存在語句未被執(zhí)行的異常。采用本發(fā)明監(jiān)控方法,能有效增加程序監(jiān)控覆蓋度且能夠用于任意調(diào)用深度的程序執(zhí)行順序的監(jiān)控。
【專利說明】
一種嵌入式程序執(zhí)行順序的監(jiān)控方法
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于嵌入式軟件中程序執(zhí)行監(jiān)視技術(shù)領(lǐng)域,具體涉及一種嵌入式程序執(zhí)行順序的監(jiān)控方法。
【背景技術(shù)】
[0002]在嵌入式產(chǎn)品中,一份程序往往要不間斷的運(yùn)行很長時間,一旦產(chǎn)生錯誤就會不斷積累,直到下一次重啟系統(tǒng)時,錯誤才能消除,嚴(yán)重的故障長期積累,甚至?xí)?dǎo)致產(chǎn)品的損壞。因此對程序執(zhí)行的監(jiān)控就顯得非常重要,及時的發(fā)現(xiàn)錯誤,并采取有效的解決辦法,保護(hù)產(chǎn)品本身,延長使用壽命,也為用戶的使用提供了便利。
[0003]對程序執(zhí)行的監(jiān)控方法很多,有的通過硬件看門狗實(shí)現(xiàn)監(jiān)視,有的在軟件代碼的關(guān)鍵位置添加一些標(biāo)志位的判斷以檢測程序的執(zhí)行程度,還有的是對代碼進(jìn)行分塊,僅僅對模塊代碼間的執(zhí)行進(jìn)行順序監(jiān)控。這些方式往往存在較多的故障殘留,不能對每條指令語句進(jìn)行監(jiān)控,在函數(shù)調(diào)用層級較為復(fù)雜的嵌入式系統(tǒng)中,通過這些方法是無法檢測到的,更無法及時處理,排除隱患。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是為了解決現(xiàn)有技術(shù)中存在的缺陷,提供一種能夠有效增加程序監(jiān)控覆蓋度且能夠用于任意調(diào)用深度的程序執(zhí)行順序的監(jiān)控方法。
[0005]為了達(dá)到上述目的,本發(fā)明提供了一種嵌入式程序執(zhí)行順序的監(jiān)控方法,通過對嵌入式程序的各層級函數(shù)設(shè)定對應(yīng)的局部順序標(biāo)志,在各層級函數(shù)的每一條程序語句執(zhí)行結(jié)束后規(guī)律性地改變對應(yīng)的局部順序標(biāo)志的數(shù)值,每一層級的函數(shù)執(zhí)行結(jié)束后,根據(jù)對應(yīng)的局部順序標(biāo)志的數(shù)值判斷是否存在語句未被執(zhí)行的異常。
[0006]本發(fā)明監(jiān)控方法還可通過對嵌入式程序設(shè)定全局順序標(biāo)志和各級函數(shù)對應(yīng)的局部順序標(biāo)志,在各級函數(shù)的每一條程序語句執(zhí)行結(jié)束后規(guī)律性地改變對應(yīng)的局部順序標(biāo)志的數(shù)值,每一層級的函數(shù)執(zhí)行結(jié)束后,根據(jù)對應(yīng)的局部順序標(biāo)志的數(shù)值判斷是否存在語句未被執(zhí)行的異常;當(dāng)出現(xiàn)異常時,改變嵌入式程序的全局順序標(biāo)志,并在檢查全局順序標(biāo)志判斷時作為異常處理。
[0007]本發(fā)明嵌入式程序執(zhí)行順序的監(jiān)控方法,包括以下具體步驟:
(1)定義嵌入式程序的全局順序標(biāo)志,并賦預(yù)設(shè)值;
(2)在嵌入式程序中執(zhí)行每一層級的函數(shù)入口處,判斷全局順序標(biāo)志是否為預(yù)設(shè)值,若為預(yù)設(shè)值則當(dāng)前程序未發(fā)生執(zhí)行順序錯誤,繼續(xù)下一語句的執(zhí)行,若不為預(yù)設(shè)值則存在執(zhí)行順序的錯誤,需要進(jìn)入異常處理程序;
(3)檢查將執(zhí)行的函數(shù)是否需要新定義層級函數(shù):判斷函數(shù)是否為返回的上一級函數(shù)或嵌套調(diào)用已定義的下一級函數(shù);如否,則為需要新定義層級函數(shù),進(jìn)入下一步驟;如是,則進(jìn)入步驟(5);
(4)根據(jù)需要新定義層級函數(shù),定義該層級的局部順序標(biāo)志,并賦初值; (5)執(zhí)行當(dāng)前函數(shù)內(nèi)第一條非用于順序監(jiān)控的程序語句;判斷是否有函數(shù)嵌套調(diào)用,如果無,繼續(xù)下一語句的執(zhí)行,如果有,返回步驟(2),每返回一次即表示在當(dāng)前層級函數(shù)中嵌套了下一層級函數(shù);
(6)上一條程序語句執(zhí)行結(jié)束后,對該層級函數(shù)的局部順序標(biāo)志的數(shù)值改變;
(7)重復(fù)步驟4至6至當(dāng)前層級函數(shù)執(zhí)行完畢;
(8)當(dāng)前執(zhí)行完成的層級函數(shù)的尾端比對該層級函數(shù)的局部順序標(biāo)志是否正確:若局部順序標(biāo)志的數(shù)值出現(xiàn)錯誤,則表示存在應(yīng)該執(zhí)行的語句而未被執(zhí)行或者錯誤地重復(fù)執(zhí)行多次語句,對全局順序標(biāo)志的數(shù)值改變(使之不為預(yù)設(shè)值即可),直接返回步驟(2)檢查全局順序標(biāo)志,若不為預(yù)設(shè)值則進(jìn)入異常處理程序;若局部順序標(biāo)志的數(shù)值未出現(xiàn)錯誤,則表示所有應(yīng)該執(zhí)行的語句都已經(jīng)正確執(zhí)行,進(jìn)入下一步驟;
(9)檢查當(dāng)前執(zhí)行完函數(shù)的是否被嵌套在上一級函數(shù),如果是,則返回上一級函數(shù),SP返回步驟(3);如果否,則表示本次監(jiān)控結(jié)束。
[0008]由上述步驟可知,通過步驟(5)向步驟(2)返回,可以不斷增加下一層級函數(shù)嵌套,通過步驟(9)向步驟(2)返回,可以不斷返回上一級函數(shù),在步驟(2)和步驟(9)之間可以實(shí)現(xiàn)多次嵌套和多次向上一層級函數(shù)返回,直至最后到達(dá)最上一層級函數(shù)執(zhí)行完畢。因此,本監(jiān)控方法實(shí)現(xiàn)嵌入式程序中復(fù)雜的多層級函數(shù)順序監(jiān)控。
[0009]上述全局順序標(biāo)志,用于判斷整個系統(tǒng)中程序執(zhí)行順序是否出現(xiàn)異常,其預(yù)設(shè)值為任意十六進(jìn)制正整數(shù),如0x55U。
[0010]局部順序標(biāo)志,用于判斷當(dāng)前函數(shù)內(nèi)的執(zhí)行順序是否出現(xiàn)異常,其初值為任意正整數(shù)。通常,可以將局部順序標(biāo)志的初值一般賦為I。
[0011 ]局部順序標(biāo)志的數(shù)值采用規(guī)律性改變,如規(guī)律性遞增(加1、加2等)、或遞減(減1、減2等)、或進(jìn)行循環(huán)賦值。當(dāng)進(jìn)行循環(huán)賦值時,是指依據(jù)特定列表中的數(shù)值對順序標(biāo)志循環(huán)賦值,特定列表中的數(shù)值根據(jù)需要任意設(shè)定列表的長度,具體應(yīng)用中,特定的循環(huán)賦值列表可以定義為“1,2,3,4,5,6,7,8,9,10”。按照列表中的順序在執(zhí)行每條語句后對局部順序標(biāo)志改變,若列表中的數(shù)字用完,則回到列表的第一位繼續(xù)按照順序在執(zhí)行的每條語句后對局部順序標(biāo)志改變。
[0012]優(yōu)選方式為:在每次語句執(zhí)行結(jié)束后,對局部順序標(biāo)志的數(shù)值加I,這樣可以根據(jù)局部順序標(biāo)志的數(shù)值判斷出執(zhí)行語句數(shù)量。
[0013]步驟(8)中對嵌入式程序每一層級的函數(shù)的程序語句后作上述處理,是局部順序標(biāo)志的數(shù)值改變語句覆蓋到每一層級函數(shù)的每一條程序語句中。
[0014]步驟(2)中的異常處理為CPU復(fù)位,或進(jìn)入異常中斷服務(wù)程序,或產(chǎn)生診斷信息用于顯示或通知第三方器件和設(shè)備。
[0015]本發(fā)明相比現(xiàn)有技術(shù)具有以下優(yōu)點(diǎn):本發(fā)明能夠?qū)θ我鈱蛹壓瘮?shù)的執(zhí)行順序進(jìn)行監(jiān)控,對程序的監(jiān)控縮小至每條語句,通過在每一層級的函數(shù)內(nèi),對每條語句后進(jìn)行局部順序標(biāo)志的改變,實(shí)現(xiàn)能夠監(jiān)控任意復(fù)雜系統(tǒng)下每一層級每條語句的執(zhí)行順序情況,該方法極大的提高了對程序語句的覆蓋率,并且能夠靈活的應(yīng)用在復(fù)雜系統(tǒng)下,不受函數(shù)調(diào)用深度的限制。
【附圖說明】
[0016]圖1為本發(fā)明嵌入式程序執(zhí)行順序的監(jiān)控方法流程圖;
圖2為應(yīng)用本發(fā)明的一個嵌入式程序調(diào)用關(guān)系示意圖;
圖3為圖2所示嵌入式程序采用本發(fā)明進(jìn)行程序執(zhí)行順序監(jiān)控的邏輯關(guān)系圖。
【具體實(shí)施方式】
[0017]下面結(jié)合附圖對本發(fā)明進(jìn)行詳細(xì)說明。
[0018]如圖1所示,本發(fā)明嵌入式程序執(zhí)行順序的監(jiān)控方法具體步驟為:
在函數(shù)入口處進(jìn)行全局順序標(biāo)志的判斷,如錯誤(不為預(yù)設(shè)值)則進(jìn)行異常處理,正確通過后判斷是否本函數(shù)是由下一層級函數(shù)返回的,若不是則定義新局部順序標(biāo)志(作為第一次定義,則該層級對應(yīng)函數(shù)為最上層級函數(shù)),并對該新局部順序標(biāo)志賦初值,然后進(jìn)入下一步,若是由下一層級函數(shù)返回的,直接進(jìn)入下一步;
接著,執(zhí)行本層級函數(shù);若本層級函數(shù)中有嵌套調(diào)用子級函數(shù),則進(jìn)入下一層級函數(shù),仍然先判斷全局順序標(biāo)志,如錯誤(不為預(yù)設(shè)值)則進(jìn)行異常處理,正確再檢查將執(zhí)行的函數(shù)是需要新定義層級函數(shù),如果否就直接執(zhí)行本函數(shù),如果是則對該子級函數(shù)定義新的局部順序標(biāo)志且賦初值,然后執(zhí)行本層級函數(shù),且執(zhí)行本層級函數(shù)還有嵌套調(diào)用函數(shù),則繼續(xù)進(jìn)入下一層級函數(shù),循環(huán)上述嵌套調(diào)用函數(shù)步驟;若本層級函數(shù)未調(diào)用其他子級函數(shù),則繼續(xù)執(zhí)行,每一層級函數(shù)的每一條程序語句執(zhí)行結(jié)束后均對本級局部順序標(biāo)志改變,進(jìn)入下一步;
判斷是否本層級所有函數(shù)都已經(jīng)執(zhí)行完,若執(zhí)行完則檢查本層級局部順序標(biāo)志是否有錯誤,錯誤則改變?nèi)猪樞驑?biāo)志數(shù)值,并在檢查全局順序標(biāo)志判斷時作為異常處理,正確則檢查當(dāng)前執(zhí)行完函數(shù)的是否被嵌套在上一級函數(shù),如果是,返回上一級函數(shù),即返回到前面函數(shù)入口處重復(fù)上述全部步驟,如果否,則表示本次監(jiān)控結(jié)束,也表明所有層級的函數(shù)順序運(yùn)行正確。
[0019]如圖2所示,以3個層級為例,對嵌入式程序函數(shù)層級劃分和函數(shù)調(diào)用關(guān)系進(jìn)行示意,由圖可見,該方法能用于任意調(diào)用深度的程序系統(tǒng)中,定義3個層級,每個層級包含N個函數(shù)語句,每個層級都使用一個局部順序標(biāo)志,在一個層級內(nèi),通過對該層級內(nèi)的函數(shù)語句后加改變順序標(biāo)志語句,每執(zhí)行完一條函數(shù)語句就通過改變順序標(biāo)志語句對該級的局部順序標(biāo)志的數(shù)值改變一次,該層級所有語句執(zhí)行結(jié)束后,檢查該局部順序標(biāo)志的數(shù)值是否正確,若正確則繼續(xù)之后的任務(wù)函數(shù),若局部順序標(biāo)志的數(shù)值出現(xiàn)錯誤,則對全局順序標(biāo)志的數(shù)值改變,執(zhí)行順序的錯誤會在函數(shù)的入口處被檢測出來,并進(jìn)入異常處理程序,等待處理。
[0020]如圖3所示,為圖2中嵌入式程序采用本發(fā)明進(jìn)行執(zhí)行順序監(jiān)控的示例流程圖,首先在該函數(shù)入口處判斷全局順序標(biāo)志是否正確,若錯誤則進(jìn)入異常處理,若正確則執(zhí)行后續(xù)函數(shù)語句,定義層級I的局部順序標(biāo)志,對該局部順序標(biāo)志賦初值,初始值為一或任意正整數(shù),之后執(zhí)行該層級內(nèi)第一個函數(shù)語句1-1,因該處有函數(shù)嵌套,故調(diào)轉(zhuǎn)到層級2內(nèi),仍然先判斷全局順序標(biāo)志是否錯誤,順序監(jiān)控過程如前所述,定義層級2的局部順序標(biāo)志,對層級2的局部順序標(biāo)志賦初值,執(zhí)行函數(shù)語句2-1,因?yàn)榇颂幋嬖诤瘮?shù)嵌套,跳轉(zhuǎn)至層級3,先檢查全部順序標(biāo)志是否正確,正確后定義層級3的局部順序標(biāo)志,然后執(zhí)行函數(shù)語句3-1、3-2,并在執(zhí)行每一條語句過后改變本層級的局部順序標(biāo)志的數(shù)值,若局部順序標(biāo)志出現(xiàn)錯誤則改變?nèi)猪樞驑?biāo)志值,并跳轉(zhuǎn)至該函數(shù)入口處,將被檢測出全局順序標(biāo)志異常,并進(jìn)入異常處理,若正確,需返回前一層級2相應(yīng)的位置,繼續(xù)所在層級的函數(shù)語句執(zhí)行,改變返回后所在層級2中的局部順序標(biāo)志數(shù)值(如圖流程框250),執(zhí)行函數(shù)語句2-2,改變局部順序標(biāo)志,按此順序執(zhí)行到函數(shù)2-N處,當(dāng)執(zhí)行到函數(shù)語句2-N時,因此處又出現(xiàn)了函數(shù)嵌套,故跳轉(zhuǎn)至層級3,繼續(xù)執(zhí)行函數(shù)語句3-3至3-N,每條語句執(zhí)行后對該層級的局部順序標(biāo)志的數(shù)值改變,若局部順序標(biāo)志出現(xiàn)錯誤,則改變?nèi)猪樞驑?biāo)志,并跳轉(zhuǎn)至該函數(shù)入口處,將被檢測出全局順序標(biāo)志異常,并進(jìn)入異常處理。若層級3所有語句執(zhí)行后對該層級的局部順序標(biāo)志檢查正確后,返回前一層級2的相應(yīng)位置,繼續(xù)所在層級的函數(shù)語句執(zhí)行,改變返回后所在層級2中的局部順序標(biāo)志數(shù)值(如圖流程框290),判斷層級所有函數(shù)語句執(zhí)行完畢,檢查層級2的局部順序標(biāo)志,正確則返回層級I,改變層級I的局部順序標(biāo)志數(shù)值(如圖流程框150),執(zhí)行函數(shù)1-2至1-N,在每條函數(shù)語句執(zhí)行后改變層級I的局部順序標(biāo)志的數(shù)值,并在該層級的所有函數(shù)語句執(zhí)行完畢后檢測局部順序標(biāo)志數(shù)值,錯誤則改變?nèi)殖绦蝽樞驑?biāo)志,跳轉(zhuǎn)至該函數(shù)入口處,將被檢測出全局順序標(biāo)志異常,并進(jìn)入異常處理,正確則本次監(jiān)控結(jié)束。
[0021]從上述描述可以看出,本方法適用于任意復(fù)雜系統(tǒng)中,不受函數(shù)調(diào)用深度限制,能夠?qū)γ恳粭l語句進(jìn)行監(jiān)控,達(dá)到了極高的覆蓋率,確保每一條語句執(zhí)行順序的正確性;同時,針對上述每一次可能出現(xiàn)局部順序標(biāo)志錯誤,系統(tǒng)根據(jù)出現(xiàn)異常時的出錯記錄也能夠定位出發(fā)生順序標(biāo)志錯誤的函數(shù),方便異常原因的查詢、處理與糾正。
[0022]除非特殊注明,本文中所描述方法的特征可以彼此相結(jié)合。
[0023]本文雖然列舉了部分的實(shí)施示例,但是本領(lǐng)域的技術(shù)人員在不背離本發(fā)明的范圍下,交替結(jié)合或者任何等效的實(shí)現(xiàn)了本發(fā)明的方法可替代本文所描述的實(shí)施示例。本申請旨在包括文中所討論的具體原理方法,以及【具體實(shí)施方式】的任何變化或變更。因此,本發(fā)明僅僅受到權(quán)利要求及其等同的限制。
【主權(quán)項(xiàng)】
1.一種嵌入式程序執(zhí)行順序的監(jiān)控方法,其特征在于,所述監(jiān)控方法通過對嵌入式程序的各層級函數(shù)設(shè)定對應(yīng)的局部順序標(biāo)志,在各層級函數(shù)的每一條程序語句執(zhí)行結(jié)束后規(guī)律性地改變對應(yīng)的局部順序標(biāo)志的數(shù)值,每一層級的函數(shù)執(zhí)行結(jié)束后,根據(jù)對應(yīng)的局部順序標(biāo)志的數(shù)值判斷是否存在語句未被執(zhí)行的異常。2.一種嵌入式程序執(zhí)行順序的監(jiān)控方法,其特征在于:所述監(jiān)控方法通過對嵌入式程序設(shè)定全局順序標(biāo)志和各層級函數(shù)對應(yīng)的局部順序標(biāo)志,在各層級函數(shù)的每一條程序語句執(zhí)行結(jié)束后規(guī)律性地改變對應(yīng)的局部順序標(biāo)志的數(shù)值,每一層級的函數(shù)執(zhí)行結(jié)束后,根據(jù)對應(yīng)的局部順序標(biāo)志的數(shù)值判斷是否存在語句未被執(zhí)行的異常;當(dāng)出現(xiàn)異常時,改變嵌入式程序的全局順序標(biāo)志,并在檢查全局順序標(biāo)志判斷時作為異常處理。3.根據(jù)權(quán)利要求1或2所述的監(jiān)控方法,其特征在于,各級函數(shù)對應(yīng)的局部順序標(biāo)志的數(shù)值改變?yōu)閷植宽樞驑?biāo)志加I或進(jìn)行循環(huán)賦值。4.根據(jù)權(quán)利要求2所述的監(jiān)控方法,其特征在于,包括以下具體步驟: (1)定義嵌入式程序的全局順序標(biāo)志,并賦預(yù)設(shè)值; (2)在嵌入式程序中執(zhí)行每一層級的函數(shù)入口處,判斷全局順序標(biāo)志是否為預(yù)設(shè)值,若為預(yù)設(shè)值則當(dāng)前程序未發(fā)生執(zhí)行順序錯誤,繼續(xù)下一語句的執(zhí)行,若不為預(yù)設(shè)值則存在執(zhí)行順序的錯誤,需要進(jìn)入異常處理程序; (3)檢查將執(zhí)行的函數(shù)是否需要新定義層級函數(shù):判斷函數(shù)是否為返回的上一級函數(shù)或嵌套調(diào)用已定義的下一級函數(shù);如否,則為需要新定義層級函數(shù),進(jìn)入下一步驟;如是,則進(jìn)入步驟(5); (4)根據(jù)需要新定義層級函數(shù),定義該層級的局部順序標(biāo)志,并賦初值; (5)執(zhí)行當(dāng)前函數(shù)內(nèi)第一條非用于順序監(jiān)控的程序語句;判斷是否有函數(shù)嵌套調(diào)用,如果無,繼續(xù)下一語句的執(zhí)行,如果有,返回步驟(2),每返回一次即表示在當(dāng)前層級函數(shù)中嵌套了下一層級函數(shù); (6)上一條程序語句執(zhí)行結(jié)束后,對該層級函數(shù)的局部順序標(biāo)志的數(shù)值改變; (7)重復(fù)步驟4至6至當(dāng)前層級函數(shù)執(zhí)行完畢; (8)當(dāng)前執(zhí)行完成的層級函數(shù)的尾端比對該層級函數(shù)的局部順序標(biāo)志是否正確:若局部順序標(biāo)志的數(shù)值出現(xiàn)錯誤,則表示存在應(yīng)該執(zhí)行的語句而未被執(zhí)行或者錯誤地重復(fù)執(zhí)行多次語句,對全局順序標(biāo)志的數(shù)值改變,直接返回步驟(2)檢查全局順序標(biāo)志,若不為預(yù)設(shè)值則進(jìn)入異常處理程序;若局部順序標(biāo)志的數(shù)值未出現(xiàn)錯誤,則表示所有應(yīng)該執(zhí)行的語句都已經(jīng)正確執(zhí)行,進(jìn)入下一步驟; (9)檢查當(dāng)前執(zhí)行完函數(shù)的是否被嵌套在上一級函數(shù),如果是,則返回上一級函數(shù),SP返回步驟(3);如果否,則表示本次監(jiān)控結(jié)束。5.根據(jù)權(quán)利要求4所述的監(jiān)控方法,其特征在于,所述全局順序標(biāo)志的預(yù)設(shè)值為十六進(jìn)制數(shù);所述局部順序標(biāo)志的初值為正整數(shù)。6.根據(jù)權(quán)利要求4所述的監(jiān)控方法,其特征在于:所述步驟(2)中的異常處理為CTU復(fù)位,或進(jìn)入異常中斷服務(wù)程序,或產(chǎn)生診斷信息用于顯示或通知第三方器件和設(shè)備。
【文檔編號】G06F11/30GK105912447SQ201610335224
【公開日】2016年8月31日
【申請日】2016年5月19日
【發(fā)明人】劉國耀, 曹雨, 趙劍峰, 査汀, 杭哲
【申請人】南京科遠(yuǎn)自動化集團(tuán)股份有限公司