亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種??臻g余量實時檢測方法

文檔序號:8361340閱讀:223來源:國知局
一種??臻g余量實時檢測方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明用于發(fā)動機(jī)控制軟件運行過程中或者控制軟件測試過程中??臻g余量實時檢測。
【背景技術(shù)】
[0002]在現(xiàn)有國內(nèi)大多數(shù)發(fā)動機(jī)控制軟件中,整個軟件只有一個??臻g,所有任務(wù)或者中斷處理操作都是共享這個??臻g的,并且??臻g和其它數(shù)據(jù)區(qū)是共享內(nèi)存的,這樣任何一個函數(shù)過程導(dǎo)致的棧溢出甚至?xí)茐恼麄€系統(tǒng)的資源,從而導(dǎo)致整個系統(tǒng)的崩潰。而且,棧溢出具有滯后效應(yīng)和廣泛的牽連性,一個過程棧溢出不會馬上引起系統(tǒng)故障,但它破壞了其它數(shù)據(jù)區(qū)的數(shù)據(jù),運行到相關(guān)數(shù)據(jù)的過程時才會引起系統(tǒng)故障,或者系統(tǒng)崩潰。這對故障的定位也制造了難度。
[0003]國外發(fā)動機(jī)控制軟件大多采用ARINC653標(biāo)準(zhǔn)的分時分區(qū)操作系統(tǒng),每個分區(qū)物理隔離,不容易導(dǎo)致系統(tǒng)崩潰的嚴(yán)重后果,在有限的技術(shù)資料中也未找到棧檢測方法。目前國內(nèi)發(fā)動機(jī)控制軟件,為了避免棧溢出,一般會先憑經(jīng)驗預(yù)估??臻g大小,然后根據(jù)測試反饋結(jié)果去修正,但測試的覆蓋率均不可能到達(dá)100%,即存在未測試到的分支,則存在產(chǎn)品階段出現(xiàn)棧溢出的可能性。因此,采用對棧空間余量的實時檢測,有利于對出現(xiàn)故障的診斷和定位。
[0004]目前大部分國內(nèi)發(fā)動機(jī)控制軟件未進(jìn)行??臻g余量實時檢測;本方法在國內(nèi)尚屬首次應(yīng)用。

【發(fā)明內(nèi)容】

[0005]本發(fā)明要解決的一個技術(shù)問題是提供一種??臻g余量實時檢測方法,通過該方法可以檢測出??臻g的使用情況和棧是否溢出,并實時將棧的使用情況報告給應(yīng)用軟件,當(dāng)應(yīng)用軟件發(fā)現(xiàn)棧的使用超過既定的限制時,可及時采取相應(yīng)措施,于是提高了軟件的健壯性。
[0006]本發(fā)明提供了一種棧空間余量實時檢測方法,該方法包括以下步驟:
[0007]配置??臻g并將分配好的??臻g區(qū)域的全部內(nèi)容初始化為一個非零的值;
[0008]把棧空間分配在內(nèi)存里的不相鄰獨立區(qū)域;
[0009]注冊處理器提供的地址訪問異常處理函數(shù);
[0010]創(chuàng)建監(jiān)測任務(wù)調(diào)用棧余量檢測函數(shù);
[0011]通過實時監(jiān)控上位機(jī)監(jiān)測棧余量和地址訪問異常,判斷是否即將或者已經(jīng)發(fā)出棧溢出。
[0012]本棧空間余量實時檢測方法的一些實施方式中,在把??臻g分配在內(nèi)存里的不相鄰獨立區(qū)域的步驟中,使用處理器提供的內(nèi)存管理模塊的頁地址轉(zhuǎn)換模式或塊地址轉(zhuǎn)換模式將上一步步驟中分配好的??臻g映射在一段與其它內(nèi)存空間不相鄰的地址空間。
[0013]本??臻g余量實時檢測方法的一些實施方式中,在注冊處理器提供的地址訪問異常處理函數(shù)的步驟中,并在該異常處理函數(shù)中將棧的地址訪問異常產(chǎn)生后的處理器自動保存于寄存器的機(jī)器狀態(tài)等相關(guān)信息通過串口發(fā)送到PC的實施監(jiān)控上位機(jī)。
[0014]本??臻g余量實時檢測方法的一些實施方式中,在所述創(chuàng)建監(jiān)測任務(wù)調(diào)用棧余量檢測函數(shù)步驟中,創(chuàng)建所述監(jiān)測任務(wù)中掛接鉤子函數(shù),所述鉤子函數(shù)定時獲取??臻g余量大小,獲取到的??臻g余量值通過串口發(fā)送給PC機(jī)的實時監(jiān)控上位機(jī)。
[0015]在采用掛接鉤子函數(shù)的??臻g余量實時檢測方法的實施方式中,棧空間余量計算的公式通過所述鉤子函數(shù)中的check_Stack函數(shù)實現(xiàn),所述check_Stack函數(shù)包括:
[0016]第一次獲取??臻g余量值,將棧底設(shè)置為查找的開始位置,棧頂設(shè)置為查找的結(jié)束位置,折半查找的中間元素值與istackValue比較,如果相等且進(jìn)行前后兩個值確認(rèn)仍然相等,則繼續(xù)向棧頂方向搜索,否則向棧底方向搜索;
[0017]查找結(jié)束后,搜索結(jié)束位置posGetted減去棧底位置的值即為??臻g空閑量,??臻g空閑量除以??臻g總量得到??臻g余量。
[0018]通過本發(fā)明提供的棧余量實時監(jiān)測方法,在??臻g寫入特定值,有對特定值進(jìn)行修改的情況即會被記錄下來,能隨時監(jiān)測出當(dāng)前軟件最大的??臻g使用量,所以棧溢出或者棧余量太小能被及時發(fā)現(xiàn),避免棧溢出造成的破環(huán),而且在棧溢出時產(chǎn)生地址訪問異常,可以根據(jù)異常產(chǎn)生后保存的寄存器信息:包括機(jī)器狀態(tài)寄存器、棧指針寄存器、數(shù)據(jù)訪問寄存器、地址信息寄存器等分析和定位問題。本發(fā)明已經(jīng)用于型號,為控制軟件試驗過程中監(jiān)測棧空間使用情況提供了確實可行的方法,同時為進(jìn)行軟件測試過程中棧檢測提供了診斷方法。
【附圖說明】
:
[0019]圖1示出了??臻g余量計算方法
[0020]圖2示出了棧空間余量檢測步驟
[0021]圖3示出了棧余量檢測函數(shù)check_Stack算法
【具體實施方式】
[0022]本方法應(yīng)用于發(fā)動機(jī)控制軟件,該軟件運行的平臺是pOWerpc8270處理器,以下舉例說明本方法的具體實施過程:
[0023]I)在控制軟件的鏈接文件里為棧分配空間為32K字節(jié),棧頂位置為0x08208000,棧底位置為0x08200000,初始化棧指針為棧頂位置,棧指針存取操作為4字節(jié)操作,根據(jù)步驟SI,從棧頂?shù)綏5讓?臻g進(jìn)行初始化為OxOEOEOEOE。
[0024]2)根據(jù)步驟S2,配置內(nèi)存管理方式為塊轉(zhuǎn)換模式(即BAT,通過BAT寄存器設(shè)置實現(xiàn)BAT,一共有8個數(shù)據(jù)BAT寄存器,可以設(shè)置8個數(shù)據(jù)塊,每塊的大小為128K-256M字節(jié)),、初始化DBAT2寄存器,即初始化一個塊(這個塊的大小為128K,把分配好的32K??臻g映射前面32K),這個塊的起始地址為0x08200000,與其它BAT寄存器設(shè)置的塊地址不相鄰。當(dāng)?shù)刂沸∮?x08200000時,觸發(fā)數(shù)據(jù)地址轉(zhuǎn)換丟失異常(Data TLB Miss on Load/Store Except1n)。
[0025]3)根據(jù)步驟S3,掛接數(shù)據(jù)地址轉(zhuǎn)換丟失異常處理函數(shù),異常處理函數(shù)實現(xiàn)對數(shù)據(jù)地址轉(zhuǎn)換丟失異常保存的寄存器信息通過串口發(fā)送給PC機(jī)的實時監(jiān)控上位機(jī),這些寄存器包括SRRO (引起異常的程序位置的下一條指令的有效地址)、SRRl (機(jī)器狀態(tài)保持寄存器)、MSR (機(jī)器狀態(tài)寄存器)、SP (棧指針)。
[0026]4)根據(jù)步驟S4,在5ms任務(wù)的鉤子函數(shù)中調(diào)用??臻g余量檢測函數(shù)check_Stack。每5ms調(diào)用check_Stack返回的??臻g余量值通過串口返回給PC機(jī)的實時監(jiān)控上位機(jī)。
[0027]5)根據(jù)步驟S5,實時監(jiān)控上位機(jī)在??臻g余量小于20%時設(shè)置報警信號燈,并且設(shè)置數(shù)據(jù)地址轉(zhuǎn)換丟失異常信號燈,設(shè)計人員或測試人員等可以通過實時監(jiān)控上位機(jī)顯示的數(shù)據(jù)和信號燈對??臻g余量或者棧溢出進(jìn)行實時監(jiān)控和及時分析。
[0028]按上述過程,可實現(xiàn)實時監(jiān)測發(fā)動機(jī)控制軟件的??臻g余量情況,防止棧溢出對整個軟件進(jìn)行破壞,且實現(xiàn)對棧溢出的實時監(jiān)測,出現(xiàn)棧溢出時,觸發(fā)數(shù)據(jù)地址轉(zhuǎn)換丟失異常,通過產(chǎn)生數(shù)據(jù)地址轉(zhuǎn)換丟失異常后保存的信息定位和分析故障原因。
【主權(quán)項】
1.一種棧空間余量實時檢測方法,其特征在于,包括: 配置??臻g并將分配好的棧空間區(qū)域的全部內(nèi)容初始化為一個非零的值; 把棧空間分配在內(nèi)存里的不相鄰獨立區(qū)域; 注冊處理器提供的地址訪問異常處理函數(shù); 創(chuàng)建監(jiān)測任務(wù)調(diào)用棧余量檢測函數(shù); 通過實時監(jiān)控上位機(jī)監(jiān)測棧余量和地址訪問異常,判斷是否即將或者已經(jīng)發(fā)出棧溢出。
2.如權(quán)利要求1所述的??臻g余量實時檢測方法,其特征在于: 在所述把??臻g分配在內(nèi)存里的不相鄰獨立區(qū)域的步驟中,使用處理器提供的內(nèi)存管理模塊的頁地址轉(zhuǎn)換模式或塊地址轉(zhuǎn)換模式將上一步步驟中分配好的??臻g映射在一段與其它內(nèi)存空間不相鄰的地址空間。
3.如權(quán)利要求1所述的一種棧空間余量實時檢測方法,其特征在于: 在所述注冊處理器提供的地址訪問異常處理函數(shù)的步驟中,并在該異常處理函數(shù)中將棧的地址訪問異常產(chǎn)生后的處理器自動保存于寄存器的機(jī)器狀態(tài)等相關(guān)信息通過串口發(fā)送到PC的實施監(jiān)控上位機(jī)。
4.如權(quán)利要求1-3所述的一種棧空間余量實時檢測方法,其特征在于: 在所述創(chuàng)建監(jiān)測任務(wù)調(diào)用棧余量檢測函數(shù)步驟中,創(chuàng)建所述監(jiān)測任務(wù)中掛接鉤子函數(shù),所述鉤子函數(shù)定時獲取??臻g余量大小,獲取到的??臻g余量值通過串口發(fā)送給PC機(jī)的實時監(jiān)控上位機(jī)。
5.如權(quán)利要求5所述的一種??臻g余量實時檢測方法,其特征在于,棧空間余量計算的公式通過所述鉤子函數(shù)中的check_Stack函數(shù)實現(xiàn),所述check_Stack函數(shù)包括: 第一次獲取??臻g余量值,將棧底設(shè)置為查找的開始位置,棧頂設(shè)置為查找的結(jié)束位置,折半查找的中間元素值與istackValue比較,如果相等且進(jìn)行前后兩個值確認(rèn)仍然相等,則繼續(xù)向棧頂方向搜索,否則向棧底方向搜索; 查找結(jié)束后,搜索結(jié)束位置PosGetted減去棧底位置的值即為??臻g空閑量,??臻g空閑量除以??臻g總量得到??臻g余量。
【專利摘要】在現(xiàn)有國內(nèi)大多數(shù)發(fā)動機(jī)控制軟件中,整個軟件只有一個??臻g,所有任務(wù)或者中斷處理操作都是共享這個棧空間的,并且??臻g和其它數(shù)據(jù)區(qū)是共享內(nèi)存的,這樣任何一個函數(shù)過程導(dǎo)致的棧溢出甚至?xí)茐恼麄€系統(tǒng)的資源,從而導(dǎo)致整個系統(tǒng)的崩潰。本發(fā)明要解決的一個技術(shù)問題是提供一種??臻g余量實時檢測方法,通過該方法可以檢測出??臻g的使用情況和棧是否溢出,并實時將棧的使用情況報告給應(yīng)用軟件,當(dāng)應(yīng)用軟件發(fā)現(xiàn)棧的使用超過既定的限制時,可及時采取相應(yīng)措施,于是提高了軟件的健壯性。
【IPC分類】G06F11-36
【公開號】CN104679645
【申請?zhí)枴緾N201310625924
【發(fā)明人】謝娟, 胡豪東, 黃浩, 陳挺, 楊佳
【申請人】中國航空工業(yè)集團(tuán)公司航空動力控制系統(tǒng)研究所
【公開日】2015年6月3日
【申請日】2013年11月28日
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1