欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種嵌入式系統(tǒng)及其實時內(nèi)存監(jiān)控處理方法

文檔序號:6532827閱讀:302來源:國知局
專利名稱:一種嵌入式系統(tǒng)及其實時內(nèi)存監(jiān)控處理方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種實時監(jiān)控內(nèi)存的嵌入式系統(tǒng)及其實時內(nèi)存監(jiān)控、捕捉內(nèi)存越界錯誤的處理方法,尤其涉及一種嵌入式系統(tǒng)工程版本中的實時內(nèi)存監(jiān)控方法。
背景技術(shù)
嵌入式系統(tǒng),即一種嵌入到對象體系中的專用計算機系統(tǒng),在如今已經(jīng)被廣泛使用和開發(fā),“嵌入性”、“專用性”與“計算機系統(tǒng)”是嵌入式系統(tǒng)的三個基本要素。嵌入式軟件通常在嵌入式操作系統(tǒng)中運行,而嵌入式系統(tǒng)的硬件平臺通常采用專用的處理芯片。因此,嵌入式系統(tǒng)的開發(fā)、調(diào)試都需要有使用專用的硬件或者軟件工具支持,而且需要編譯器生成專門的調(diào)試版本。而在開發(fā)完成后的用戶所使用的軟件的工程版本中,則無法使用這些硬件或者軟件的開發(fā)、調(diào)試工具。
嵌入式系統(tǒng)需要能夠長時間可靠地工作,但是其中的軟件中的錯誤是不可避免的,尤其是軟件中由于程序需要占用一定的內(nèi)存空間而引起的內(nèi)存操作的錯誤,例如,全局變量的越界訪問、非法越界讀寫內(nèi)存等。這些錯誤輕則導致程序運行的流程出錯,嚴重的甚至導致系統(tǒng)癱瘓。在調(diào)試時如果不能發(fā)現(xiàn)所有的問題,在工程版本的運行過程中就有可能發(fā)生故障。而在這些內(nèi)存非法操作所導致的故障發(fā)生后,又不能及時進行相應(yīng)的分析和調(diào)試,則很難捕捉到故障類型及其定位,給嵌入式系統(tǒng)的穩(wěn)定性提高帶來了困難。
如今,在一些嵌入式操作系統(tǒng)中,利用調(diào)試寄存器提供了硬件斷點的功能,能夠在指定內(nèi)存被修改時中斷系統(tǒng)的運行(掛起),等待用戶分析。但這種功能有一定局限性,例如,正常情況下某全局變量的值會在一定范圍內(nèi)變化,一旦被改寫成非法值系統(tǒng)就會出錯,而使用硬件斷點無法捕捉到這種錯誤。另外,在工程版本中也不允許中斷任何任務(wù),只能通過捕獲現(xiàn)場信息、然后進行事后分析的方法解決問題,這種情況下使用硬件斷點也不能適用。

發(fā)明內(nèi)容
針對上述問題,本發(fā)明要解決的技術(shù)問題就是為了克服現(xiàn)有的嵌入式系統(tǒng)上程版本中無法進行實時監(jiān)控指定內(nèi)存、捕捉并分析非法越界讀寫內(nèi)存的軟件錯誤的缺點。
本發(fā)明提供了一種實時內(nèi)存監(jiān)控處理的嵌入式系統(tǒng),包括一具有多個調(diào)試寄存器的嵌入式系統(tǒng)處理器;一處理器中斷控制模塊,用于控制所述處理器,實現(xiàn)對所監(jiān)控的內(nèi)存進行讀寫與指令的執(zhí)行,其特征在于通過所述處理器中斷控制模塊在所述處理器的調(diào)試寄存器中設(shè)置線性地址及相關(guān)的控制位,使得所述處理器能夠在滿足一觸發(fā)條件時自動觸發(fā)調(diào)試異常中斷;及所述處理器中斷控制模塊在滿足一設(shè)置條件時對所述調(diào)試寄存器中的信息進行分析并記錄現(xiàn)場信息。
本發(fā)明進一步提供了一種嵌入式系統(tǒng)實時內(nèi)存監(jiān)控處理方法,包括步驟步驟1,利用嵌入式系統(tǒng)處理器提供的調(diào)試寄存器及其中斷控制程序模塊對所監(jiān)控的內(nèi)存進行讀寫與指令的執(zhí)行;步驟2,利用在所述調(diào)試寄存器中設(shè)置線性地址和相關(guān)的控制位,使所述處理器在滿足一觸發(fā)條件時自動觸發(fā)調(diào)試異常;步驟3,所述中斷控制程序模塊在滿足一設(shè)置條件時接管處理器的調(diào)試異常并記錄現(xiàn)場信息。
本發(fā)明利用嵌入式系統(tǒng)處理器提供的調(diào)試寄存器及其相應(yīng)機制實現(xiàn)監(jiān)控內(nèi)存的讀寫與指令的執(zhí)行。通過利用在處理其的調(diào)試寄存器中設(shè)置線性地址(內(nèi)存管理模式為分頁式管理時映射出的地址)并設(shè)置調(diào)試控制寄存器中相關(guān)的控制位,處理器會在觸發(fā)條件滿足時自動觸發(fā)調(diào)試異常處理,實現(xiàn)了對現(xiàn)場的分析、信息記錄。
采用本發(fā)明所述方法,與現(xiàn)有技術(shù)相比,由于采取了在嵌入式系統(tǒng)中實時監(jiān)控內(nèi)存,記錄現(xiàn)場信息,供事后分析的技術(shù)措施,可以有效的檢測、記錄嵌入式軟件運行中的故障信息。同時本發(fā)明豐富了處理器提供的硬件斷點功能,通過定制回調(diào)函數(shù)可以實時監(jiān)控指定內(nèi)存的內(nèi)存值是否在一個正常的取值范圍內(nèi)變化、監(jiān)控修改內(nèi)存的操作發(fā)生在非指定的任務(wù)中等各種情況。
利用本發(fā)明中指令執(zhí)行監(jiān)控的方法,可以在工程版本中實時監(jiān)控程序中指定指令的運行,例如為了分析嵌入式系統(tǒng)內(nèi)存泄漏的問題,可以通過定制回調(diào)函數(shù),在程序運行過程中對操作系統(tǒng)的接口malloc進行監(jiān)控,記錄malloc接口被調(diào)用時申請內(nèi)存塊的大小、函數(shù)調(diào)用關(guān)系等,確定產(chǎn)生內(nèi)存泄漏的錯誤程序,同時可以獲得嵌入式系統(tǒng)完整的內(nèi)存分布圖,包括內(nèi)存塊大小、申請內(nèi)存的任務(wù)、申請時間、申請內(nèi)存在源程序中的具體位置等信息。
在嵌入式系統(tǒng)中故障發(fā)生后,故障現(xiàn)場的記錄信息給故障的分析定位提供了有力的支持。本發(fā)明提供的方法,并不局限于某一產(chǎn)品,是一個通用的嵌入式系統(tǒng)實時內(nèi)存監(jiān)控的方法,可以大大的提高嵌入式系統(tǒng),尤其是嵌入式系統(tǒng)工程版本的可調(diào)試性,改善程序的質(zhì)量。


圖1所示為本發(fā)明嵌入式系統(tǒng)內(nèi)存監(jiān)控處理功能模塊圖;圖2所示為Intel80×86調(diào)試寄存器說明;圖3所示為本發(fā)明實時內(nèi)存監(jiān)控代理任務(wù)設(shè)置內(nèi)存監(jiān)控點處理流程;圖4所示為通用Intel80×86中斷INT1硬件斷點處理流程圖;圖5所示為以Intel80×86為例的本發(fā)明實時內(nèi)存監(jiān)控中斷處理子流程;圖6所示為以Intel80×86為例的本發(fā)明運行棧內(nèi)存分布。
具體實施例方式
下面結(jié)合附圖,以CPU類型為Intel80×86的嵌入式處理芯片為例,按照附圖的順序?qū)夹g(shù)方案的實施作進一步的詳細描述,其它CPU類型的處理方法類似。
圖1是本發(fā)明嵌入式系統(tǒng)3的內(nèi)存監(jiān)控處理功能模塊圖,其主要包括嵌入式系統(tǒng)處理器1和處理器中斷控制模塊2,并且處理器中斷控制模塊2還主要包含三個模塊,以下分別說明。
前臺調(diào)試異常中斷處理模塊11在獲得中斷現(xiàn)場信息后(步驟S501),分析中斷現(xiàn)場,并將分析信息記錄到緩存區(qū)(步驟S502)。
后臺處理模塊13在調(diào)試機上啟動后臺程序(步驟S507),維護前后臺的連接(步驟S508);接收后臺用戶命令并傳送給前臺內(nèi)存監(jiān)控代理任務(wù)模塊11(步驟S509),以及接收前臺內(nèi)存監(jiān)控代理任務(wù)模塊11返回的現(xiàn)場分析信息,然后將其顯示或保存(步驟S510)。后臺處理模塊13可以隨時啟動或關(guān)閉。
前臺實時內(nèi)存監(jiān)控代理任務(wù)模塊12內(nèi)存監(jiān)控初始化工作(步驟S503);維護與調(diào)試機的連接(步驟S504);然后根據(jù)后臺處理模塊13發(fā)來的用戶命令設(shè)置內(nèi)存監(jiān)控點(步驟S505);定時掃描緩存區(qū),在前后臺通訊暢通的情況下將緩存區(qū)中記錄的中斷現(xiàn)場信息發(fā)送給后臺,然后清空緩存區(qū)(步驟S506)。初始化工作包括初始化用于調(diào)試中斷觸發(fā)后記錄現(xiàn)場信息的緩存區(qū),初始化前后臺通訊,初始化調(diào)試異常處理程序、替換操作系統(tǒng)默認的調(diào)試異常處理程序等。
前臺調(diào)試異常中斷處理模塊11是本發(fā)明的重點部分,下面以CPU類型為Intel 80×86的嵌入式處理芯片為例,重點描述前臺調(diào)試異常中斷處理模塊。
圖2介紹了CPU類型為80×86的處理器的調(diào)試寄存器DRn及各標志位的含義。
Intel 80×86中有關(guān)調(diào)試的中斷有兩個,中斷向量號為1和3,其中中斷INT1用于處理單步調(diào)試和硬件中斷,中斷INT3用于處理軟件中斷。使用INT1和INT3是實現(xiàn)調(diào)試器的最根本技術(shù),調(diào)試器使用中斷INT1和INT3實現(xiàn)調(diào)試的方法簡述如下INT1硬件斷點利用處理器本身的調(diào)試支持,DR0-DR3四個調(diào)試寄存器保存四個斷點的線性地址,DR7寄存器保存的是每個斷點的條件。設(shè)置硬件斷點時,在調(diào)試寄存器位DR0-DR3中設(shè)置觸發(fā)指令的線形地址并設(shè)置調(diào)試控制寄存器(DR7)中相關(guān)的控制位,當以下四個條件中的任意一個成立之后,處理器會產(chǎn)生INT1調(diào)試異常,并且將控制權(quán)轉(zhuǎn)交給調(diào)試器,包括指令執(zhí)行、指定內(nèi)存的內(nèi)容被修改、指定的內(nèi)存被讀/寫、I/O端口上有操作。
INT3軟件斷點調(diào)試器用一個單字節(jié)的斷點指令(0xcc,即INT3H)替換掉希望觸發(fā)中斷的指令的首字節(jié),當程序執(zhí)行至斷點指令處,處理器將產(chǎn)生INT3軟件中斷異常,默認的調(diào)試異常處理程序?qū)⒈徽{(diào)用,此時保存在棧中的段/偏移地址就是斷點指令后一字節(jié)的地址。
Intel 80×86提供了8個調(diào)試寄存器DR0-DR7用于控制處理器的調(diào)試操作,這些寄存器可以通過MOV指令進行讀寫。Intel 80×86提供的調(diào)試寄存器可以用于實現(xiàn)1-4個硬件斷點,8個調(diào)試寄存器中DR4和DR5目前保留未使用。對于調(diào)試寄存器DR0-DR3、DR6、DR7的描述如下DR0-DR3是調(diào)試斷點寄存器,每個調(diào)試斷點寄存器可以保存一個32位的斷點線性地址;DR6是調(diào)試狀態(tài)寄存器,用于記錄中斷INT1產(chǎn)生時的調(diào)試狀態(tài),DR6的32位含義如圖2所示。這里主要關(guān)心的是B0一B3第B0-B3位分別與調(diào)試寄存器DR0-DR3對應(yīng),標識當中斷INT1產(chǎn)生時,命中了哪個調(diào)試寄存器(與DR7的LENn、R/Wn位配合使用)。
DR7是調(diào)試控制寄存器,用于使能斷點并設(shè)置斷點的條件,DR7的32位含義如圖1所示,其中R/WO-R/W3定義斷點的條件;00執(zhí)行指令時中斷;01寫內(nèi)存時中斷;10I/O操作時中斷(控制寄存器CR4的DE標志位設(shè)置為1時無效);11讀/寫內(nèi)存時產(chǎn)生中斷;LEN0-LEN3定義與斷點寄存器相關(guān)的需要監(jiān)控的內(nèi)存尺寸;001字節(jié);012字節(jié);10未定義;114字節(jié);GDGD位為1時標識調(diào)試寄存器受保護;L0-L3為1時表示對應(yīng)的調(diào)試寄存器DR0-DR3為任務(wù)級斷點;G0-G3為1時表示對應(yīng)的調(diào)試寄存器DR0-DR3為系統(tǒng)級斷點。
圖3是本發(fā)明實時內(nèi)存監(jiān)控代理任務(wù)模塊設(shè)置內(nèi)存監(jiān)控點處理流程圖。
首先,實時內(nèi)存監(jiān)控代理任務(wù)模塊12接收后臺的命令,并判斷設(shè)置的條件是否合法(步驟101);如果合法,則判斷是否有空閑的調(diào)試寄存器可用(步驟102);如果有,則進行關(guān)中斷及禁止任務(wù)搶占(步驟103);然后根據(jù)設(shè)置條件中被監(jiān)控內(nèi)存地址、觸發(fā)條件對DR0-DR3、DR7調(diào)試寄存器進行修改(步驟104);接著,記錄設(shè)置內(nèi)存控制的地址信息、累計觸發(fā)記錄次數(shù)信息及回調(diào)函數(shù)等信息(步驟105);再進行允許任務(wù)搶占及開中斷的操作(步驟106)。
其中所述的可用設(shè)置條件包括
1、內(nèi)存地址取值可以是任意32位地址。嵌入式系統(tǒng)中如果使用MMU映像虛擬內(nèi)存,4G內(nèi)的內(nèi)存地址都可能有效,并不限于單板的物理內(nèi)存大小,所以對這個參數(shù)不加限制。
2、觸發(fā)條件取值為(沒有I/O操作,是否應(yīng)補入?)(1)0監(jiān)控指令執(zhí)行;(2)1監(jiān)控改寫內(nèi)存;(3)2監(jiān)控讀/寫內(nèi)存;(4)3監(jiān)控I/O操作。
3、累計次數(shù)累計多少次滿足觸發(fā)條件后產(chǎn)生監(jiān)控記錄,即進入圖4所示的處理流程。
4、回調(diào)函數(shù)用戶提供的回調(diào)函數(shù),取值可以為空??梢杂捎脩纛A置回調(diào)函數(shù),在回調(diào)函數(shù)中判斷是否需要產(chǎn)生監(jiān)控記錄。當回調(diào)函數(shù)返回成功時產(chǎn)生監(jiān)控記錄,否則不做任何處理。
設(shè)置內(nèi)存監(jiān)控點時,在修改處理器的調(diào)試寄存器后,同時產(chǎn)生索引信息,用于標識已經(jīng)設(shè)置的內(nèi)存監(jiān)控點的設(shè)置條件。由于處理器最多支持4個內(nèi)存監(jiān)控點,最多可以有4個索引信息,主要記錄了使用標記和以上4個監(jiān)控設(shè)置條件。
圖4是Intel80×86通用中斷INT1硬件斷點處理流程圖。
圖4的處理流程主要用于當硬件中斷INT1觸發(fā)后,保存中斷現(xiàn)場,掛起當前任務(wù),等待用戶分析。由于中斷INT1用于處理單步調(diào)試中斷和硬件中斷,本發(fā)明主要關(guān)心的是硬件中斷的處理,省略了單步調(diào)試中斷的處理。中斷INT1的處理流程描述如下首先,清除EFLAGS中的陷阱標志位TraceFlag(步驟201);然后,進行寄存器壓棧,包括8個16位寄存器和6個調(diào)試寄存器(步驟202);接著,對上述6個調(diào)試寄存器DR*清零(步驟203);然后,根據(jù)狀態(tài)寄存器DR6判斷是否單步調(diào)試異常(步驟204);如果是,則轉(zhuǎn)入單步調(diào)試異常處理(步驟212),如果不是,則保存寄存器cs、pc、esp(步驟205),接著掛起當前的任務(wù)、等待用戶現(xiàn)場分析(206)禁止任務(wù)搶占、開中斷并取得斷點當前的詳細信息(步驟207),然后通知調(diào)試機做相應(yīng)的處理(步驟208),再根據(jù)斷點信息決定是否掛起當前任務(wù)(步驟209),隨后允許任務(wù)搶占(步驟210),恢復上下文、函數(shù)返回(步驟211);最后,進行函數(shù)調(diào)用返回、恢復棧幀及6個調(diào)試寄存器(步驟213)。
圖5是本發(fā)明的實時內(nèi)存監(jiān)控中斷處理子流程,是圖4的一個子流程圖。
在嵌入式系統(tǒng),尤其是在工程版本中不允許中斷任何任務(wù)的執(zhí)行,只能通過軟件自動記錄現(xiàn)場信息、事后分析的方法。本發(fā)明改進了通用嵌入式操作系統(tǒng)中斷INT1的處理,用圖5的處理流程替換了圖4虛框中的處理首先根據(jù)DR6和DR7確定監(jiān)控的內(nèi)存地址addr和斷點觸發(fā)條件flag(步驟301);根據(jù)內(nèi)存地址addr的32位值在監(jiān)控條件中搜索,尋找斷點設(shè)置記錄(步驟302);判斷是否找到設(shè)置記錄(步驟303),如果是,則進一步判斷是否滿足觸發(fā)次數(shù)條件(步驟304),如果滿足,則調(diào)用用戶提供的回調(diào)函數(shù)并記錄信息(步驟305),然后判斷回調(diào)函數(shù)是否返回的是OK(步驟306),如果是,則找到下一個可用的中斷現(xiàn)場記錄區(qū)(步驟307),接著判斷監(jiān)控觸發(fā)條件flag是否為寫內(nèi)存時觸發(fā)(步驟308),如果是,則記錄被監(jiān)控內(nèi)存值(4字節(jié))(步驟309),然后記錄當前任務(wù)ID、任務(wù)名、tick值、寄存器、調(diào)試寄存器等信息(步驟310);記錄當前棧ESP之后的若干字節(jié)的內(nèi)容(步驟311),接著分析棧并記錄函數(shù)調(diào)用關(guān)系和參數(shù)(步驟312)。
所述現(xiàn)場信息主要包括以下內(nèi)容(1)被監(jiān)控的內(nèi)存值;(2)當前任務(wù)的ID、任務(wù)名(系統(tǒng)運行過程中可能會啟動一些臨時任務(wù)完成特定的功能,記錄任務(wù)ID的同時記錄任務(wù)名稱,可以保證事后分析問題時可以定位到正確的任務(wù));(3)當前系統(tǒng)的時間;(4)當前通用寄存器、調(diào)試寄存器值;(5)當前棧中的內(nèi)存值;(6)通過分析堆棧獲得的當前函數(shù)調(diào)用關(guān)系列表和函數(shù)參數(shù)。
圖6是80×86運行棧內(nèi)存分布。
編譯器產(chǎn)生的代碼中對堆棧的結(jié)構(gòu)和使用存在一個約定,其中一個重要的概念是堆棧幀(stack frame)。一個堆棧幀就是運行棧中的一個存儲塊,它按照一定的規(guī)則描述了當前函數(shù)的調(diào)用信息,一個堆棧幀對應(yīng)一次函數(shù)調(diào)用。
由圖6可見,p_ebp為中斷產(chǎn)生時現(xiàn)場EBP(Extend Base Pointer)寄存器值,ebp[n]表示第n層函數(shù)調(diào)用時壓棧的EBP寄存器值,ret[n]表示第n層函數(shù)的返回地址。所有的ebp[n]形成了一個鏈表,頭指針為p_ebp。分析過程中如果發(fā)現(xiàn)ebp[n]或ret[n]為零,表明已經(jīng)到達頂層父函數(shù),停止分析。通過對當前棧的分析可以獲得若干層函數(shù)的返回地址。根據(jù)函數(shù)的返回地址信息可以在符號表中獲得對應(yīng)的函數(shù)名稱。通過對運行棧的回溯可以獲得現(xiàn)場的函數(shù)調(diào)用關(guān)系列表,為故障的分析提供有力的依據(jù)。
當然,本發(fā)明還可有其它多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護范圍。
權(quán)利要求
1.一種實時監(jiān)控內(nèi)存的嵌入式系統(tǒng),包括,一具有調(diào)試寄存器的嵌入式系統(tǒng)處理器;一處理器中斷控制模塊,用于控制所述處理器,實現(xiàn)對所監(jiān)控的內(nèi)存進行讀寫與指令的執(zhí)行,其特征在于通過所述處理器中斷控制模塊在所述處理器的調(diào)試寄存器中設(shè)置線性地址及相關(guān)的控制位,使得所述處理器能夠在滿足一觸發(fā)條件時自動觸發(fā)調(diào)試異常中斷;及所述處理器中斷控制模塊在滿足一設(shè)置條件時對所述調(diào)試寄存器中的信息進行分析并記錄現(xiàn)場信息。
2.如權(quán)利要求1所述的嵌入式系統(tǒng),其特征在于,所述處理器中斷控制模塊還包括一后臺處理模塊,用于接收后臺用戶命令并將其傳送給前臺;一前臺實時內(nèi)存監(jiān)控代理任務(wù)模塊,連接至所述后臺處理模塊,用于接收從所述后臺處理模塊傳送來的命令,并根據(jù)所述命令設(shè)置內(nèi)存監(jiān)控點;及一前臺調(diào)試異常中斷處理模塊,連接至所述前臺實時內(nèi)存監(jiān)控代理任務(wù)模塊,用于在滿足所述觸發(fā)條件時分析所述內(nèi)存監(jiān)控點的中斷現(xiàn)場并記錄現(xiàn)場信息到一緩存區(qū)中;所述前臺實時內(nèi)存監(jiān)控代理任務(wù)模塊定時掃描所述緩存區(qū),并將所述緩存區(qū)中記錄的現(xiàn)場信息發(fā)送給后臺,然后清空所述緩存區(qū)。
3.如權(quán)利要求2所述的嵌入式系統(tǒng),其特征在于所述前臺實時內(nèi)存監(jiān)控代理任務(wù)模塊還用于初始化緩存區(qū)、初始化前后臺之間的通訊、初始化調(diào)試異常處理程序及替換所述系統(tǒng)默認的調(diào)試異常處理程序。
4.如權(quán)利要求1所述的嵌入式系統(tǒng),其特征在于,所述多個調(diào)試寄存器還包括調(diào)試斷點寄存器,用于保存所述中斷的各斷點的線性地址;調(diào)試控制寄存器,用于保存所述觸發(fā)條件;調(diào)試狀態(tài)寄存器,用于記錄中斷產(chǎn)生時的調(diào)試狀態(tài)。所述調(diào)試斷點寄存器中還設(shè)置所述調(diào)試控制寄存器中相關(guān)的控制位;及所述觸發(fā)條件包括指令執(zhí)行時中斷、制定內(nèi)存的內(nèi)容被修改時中斷、讀/寫內(nèi)存時中斷和I/O操作時中斷其中之一;所述前臺實時內(nèi)存監(jiān)控代理任務(wù)模塊還根據(jù)所述設(shè)置條件修改所述調(diào)試寄存器及調(diào)試控制寄存器中相應(yīng)的控制位
5.如權(quán)利要求2所述的嵌入式系統(tǒng),其特征在于所述前臺調(diào)試異常中斷處理模塊在滿足所述觸發(fā)條件后,首先保存當前系統(tǒng)運行的上、下文,然后根據(jù)所述調(diào)試狀態(tài)寄存器判斷本次處理是否為硬件寄存器觸發(fā)的中斷;如果不是,則進行單步調(diào)試異常處理;如果是,則繼續(xù)執(zhí)行所述硬件寄存器觸發(fā)的中斷。
6.如權(quán)利要求5所述的嵌入式系統(tǒng),其特征在于所述前臺調(diào)試異常中斷處理模塊根據(jù)所述調(diào)試寄存器中的所述設(shè)置條件信息進行分析,并進行現(xiàn)場信息記錄;所述現(xiàn)場信息包括被監(jiān)控的內(nèi)存值;當前任務(wù)的識別信息、任務(wù)名;當前系統(tǒng)的時間;當前通用寄存器、調(diào)試寄存器值;當前棧中的內(nèi)存值;通過分析堆棧獲得的當前函數(shù)調(diào)用關(guān)系列表和函數(shù)參數(shù)。
7.一種嵌入式系統(tǒng)實時內(nèi)存監(jiān)控處理方法,所述嵌入式系統(tǒng)包括具有調(diào)試寄存器的處理器,其特征在于,包括如下步驟步驟1,利用嵌入式系統(tǒng)處理器的調(diào)試寄存器及其中斷控制程序模塊對所監(jiān)控的內(nèi)存進行讀寫與指令的執(zhí)行;步驟2,利用在所述調(diào)試寄存器中設(shè)置線性地址和相關(guān)的控制位,使所述處理器在滿足一觸發(fā)條件時自動觸發(fā)調(diào)試異常;步驟3,所述中斷控制程序模塊在滿足一設(shè)置條件時接管所述處理器的調(diào)試異常并記錄現(xiàn)場信息。
8.如權(quán)利要求7所述的方法,其特征在于,所述步驟1進一步包括步驟步驟11,進行一系列的內(nèi)存監(jiān)控初始化;步驟12,等候后臺用戶命令,如果收到后臺用戶命令,則根據(jù)具體條件設(shè)置內(nèi)存監(jiān)控點;及步驟13,如果沒有接收到后臺用戶命令,則掃描緩存區(qū),并將其中的中斷現(xiàn)場信息發(fā)送給后臺。
9.如權(quán)利要求8所述的方法,其特征在于所述一系列的內(nèi)存監(jiān)控初始化步驟還包括初始化緩存區(qū)、初始化前后臺的通訊、初始化前臺調(diào)試異常處理程序以及替換默認的調(diào)試異常處理程序的步驟。
10.如權(quán)利要求7所述的方法,其特征在于,所述觸發(fā)條件包括指令執(zhí)行、指定內(nèi)存的內(nèi)容被修改、指定內(nèi)存被讀/寫及I/O端口上有操作其中之一。
11.如權(quán)利要求1所述的方法,其特征在于,所述步驟3進一步包括步驟31,保存當前系統(tǒng)運行的上、下文;步驟321,根據(jù)所述調(diào)試寄存器中的信息確定被監(jiān)控內(nèi)存的地址和觸發(fā)條件;步驟322,根據(jù)所述內(nèi)存地址尋找設(shè)置內(nèi)存監(jiān)控點的相關(guān)觸發(fā)條件,如果滿足所述相關(guān)觸發(fā)條件,則調(diào)用用戶提供的回調(diào)函數(shù)記錄現(xiàn)場信息;步驟323,根據(jù)所述回調(diào)函數(shù)返回值尋找一可用記錄區(qū)記錄現(xiàn)場信息。
12.如權(quán)利要求11所述的方法,其特征在于,所述現(xiàn)場信息包括被監(jiān)控的內(nèi)存值;當前任務(wù)的識別信息、任務(wù)名;當前系統(tǒng)的時間;當前通用寄存器、調(diào)試寄存器值;當前棧中的內(nèi)存值;通過分析堆棧獲得的當前函數(shù)調(diào)用關(guān)系列表和函數(shù)參數(shù)。
全文摘要
本發(fā)明提供一種實時監(jiān)控內(nèi)存的嵌入式系統(tǒng)及其實時內(nèi)存監(jiān)控、捕捉內(nèi)存越界錯誤的處理方法,其中,該實時內(nèi)存監(jiān)控的方法,包括步驟啟動一實時內(nèi)存監(jiān)控代理任務(wù)模塊,并進行一系列的內(nèi)存監(jiān)控初始化;接收后臺用戶指令,根據(jù)具體條件設(shè)置內(nèi)存監(jiān)控點,并將所述用戶命令傳送給所述實時內(nèi)存監(jiān)控代理任務(wù)模塊;以及在滿足觸發(fā)條件時,進行調(diào)試異常中斷處理。
文檔編號G06F11/36GK1885275SQ20051004077
公開日2006年12月27日 申請日期2005年6月20日 優(yōu)先權(quán)日2005年6月20日
發(fā)明者吳濤 申請人:中興通訊股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
江川县| 高要市| 贵溪市| 满洲里市| 景东| 老河口市| 斗六市| 依安县| 饶平县| 商水县| 泸州市| 北海市| 鄂尔多斯市| 信阳市| 宁波市| 呼图壁县| 库尔勒市| 尚志市| 西乡县| 桂平市| 那曲县| 枣强县| 九江县| 普定县| 阿坝县| 布拖县| 剑阁县| 儋州市| 广南县| 固原市| 锡林郭勒盟| 洞头县| 措勤县| 南江县| 华容县| 卢龙县| 叙永县| 开平市| 武定县| 茂名市| 浦江县|