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

一種嵌入式系統(tǒng)的錯誤偵測和修復方法

文檔序號:6363875閱讀:218來源:國知局

專利名稱::一種嵌入式系統(tǒng)的錯誤偵測和修復方法
技術領域
:本發(fā)明屬于計算機
技術領域
,特別涉及了一種嵌入式系統(tǒng)的錯誤偵測和修復方法。
背景技術
:由于嵌入式系統(tǒng)的快速發(fā)展,目前嵌入式系統(tǒng)發(fā)展趨勢為系統(tǒng)晶片、低耗電的通訊模塊和低電源的系統(tǒng)架構。正朝著更小而且更省電的嵌入式系統(tǒng)設計邁進,而無線傳感器正是在這種趨勢下衍生出來的嵌入式系統(tǒng)。無線傳感器節(jié)點擁有偵測與計算的能力,通過無線的方式通信,每一個傳感器節(jié)點的硬件由嵌入式微處理器、存儲器、傳感器、無線通信模塊及電池組成。無線傳感器節(jié)點是資源受限的嵌入式系統(tǒng),在其上的微處理器不具有存儲管理單元。在無線傳感網(wǎng)絡上如何避免存儲器錯誤而導致系統(tǒng)出錯,勢必成為一個重要問題。尤其在動態(tài)載入模塊到存儲空間時,更易產生錯誤。每個可動態(tài)載入的應用模塊都有自己可存取的存儲空間范圍,當其試圖存取合法范圍以外的地方,則視為錯誤。在實際應用中,大部分的無線傳感器節(jié)點散布在人為難以到達的地方,代替人類在難以到達的地方搜集需要的信息。因為這個特性,無線傳感網(wǎng)絡硬件設備架設完成后,使用者便不容易以人為方式到達這些被散布在外的節(jié)點上做錯誤修復的動作。當某些節(jié)點上面的系統(tǒng)出現(xiàn)錯誤而失去它的功用,這個系統(tǒng)的使用者無法馬上得知這些錯誤,只能等使用者主動散步偵測信息或等到回傳的資料出現(xiàn)錯誤才能發(fā)現(xiàn)。這些回傳資料出現(xiàn)錯誤也會影響到搜集信息的正確性。目前無線傳感器節(jié)點上的微處理器大部分都不具有存儲管理單元,因此在無線傳感器節(jié)點上的系統(tǒng)無法避免應用程序對系統(tǒng)核心的存儲空間做存取的動作,此危險動作會影響到該節(jié)點的正常運行,可能會讓系統(tǒng)產生不可預期的錯誤。
發(fā)明內容本發(fā)明的目的就是提供一種嵌入式系統(tǒng)的錯誤偵測和修復方法,避免應用程序侵占操作系統(tǒng)所屬的存儲空間,或侵占其它應用程序所屬的存儲空間。本發(fā)明中偵測嵌入式系統(tǒng)錯誤的方法包括靜態(tài)檢查和動態(tài)檢査。靜態(tài)檢査的具體方法是檢査所有靜態(tài)給定存儲空間位址的存儲器存儲指令,所述的存儲器存儲指令包括直接調用指令和相對跳躍指令;同一模塊內的函數(shù)調用采用相對跳躍指令,不同模塊內的函數(shù)調用采用直接調用指令;直接調用指令和相對跳躍指令格式如下InstructionOperationCallkPC=kJmp.+kPC=PC+kJmp.-kPC=PC-k如果直接調用后面給定位址中的任何一個位址不是系統(tǒng)調用跳躍表里面的其中一個合法值,則該模塊為不合法,不能上傳到傳感器節(jié)點上;如果全部直接調用都是跳躍表里的合法值,則該模塊為合法。動態(tài)檢查的具體方法是步驟(l).改寫模塊內容、增加指令,就是把存儲空間位址作為參數(shù)傳進動態(tài)檢査系統(tǒng)內以備調用;在編譯時,如果目的位址無法在給定的指令前插入檢査指令,則將欲存取的的存儲空間位址設為參數(shù),用來檢査該位址的合法性;這些指令包括三形式,分別為間接調用、載入和存儲,指令格式如下InstructionOperationicallPC=Z(R31:R30)IdRd,XRd=[X(R27:R26)]IdRd,YRd:[Y(R29駕)]IdRd,ZRd=[Z(R31:R30)]stX,Rr[X(R27:R26)]=RrstY,Rr[Y(R29:R28)]:RrstZ,Rr[Z(R31:R30)]=Rr當一段連續(xù)載入或存儲指令出現(xiàn)時,并且其目的位址連續(xù)、中間未被修改,則在這一段連續(xù)存取指令的第一個存取指令前加上兩個位址的檢査,分別是這個連續(xù)存取存儲空間位址的開頭和結尾,如果確定兩個位址的檢査均5合法,則該段連續(xù)的存取都合法。步驟(2).檢査調用存儲空間位址和檢查存儲器載入存儲過程,當一個調用的位址被傳入時,這個函數(shù)首先取得該模塊的編號,使用系統(tǒng)內原本提供的系統(tǒng)函數(shù);然后依序檢査該位址是否是系統(tǒng)調用的進入點、向系統(tǒng)預約的其它模塊函數(shù)進入點或模塊本身內部的跳躍點,如果是系統(tǒng)調用的進入點、向系統(tǒng)預約的其它模塊函數(shù)進入點或模塊本身內部的跳躍點中的任何一個,則存取合法,進行回傳;如果不是系統(tǒng)調用的進入點、向系統(tǒng)預約的其它模塊函數(shù)進入點或模塊本身內部的跳躍點中的任何一個,則為發(fā)生錯誤。本發(fā)明中修復嵌入式系統(tǒng)錯誤的方法具體是.步驟(l).如果偵測出有錯,則有錯的模塊立即停止工作;步驟(2).向服務器發(fā)送替換出錯模塊的請求,服務器收到請求后,檢査是否有其它版本,如果有,則將另一版本加載到傳感器節(jié)點上,用來取代原來模塊的工作;如果沒有,則傳遞原來版本再試一次,若再次出錯,且沒有發(fā)現(xiàn)其它版本,則修復無效,服務器留下記錄告知使用者。本發(fā)明在S0S系統(tǒng)上以最小的修改系統(tǒng)架構方式,提出了一種可偵測存儲器存取錯誤,并能使用模塊替換的方式加以修復的方法。能夠有效地增加無線傳感網(wǎng)絡的可用性,使存儲器存取錯誤產生機會減少,搜集的信息也能更加有效益,在維護系統(tǒng)上更是輕而易舉,不必擔心何時該偵測網(wǎng)絡上的無線傳感器節(jié)點是否出錯,就算可能出錯的傳感器節(jié)點也會被偵測到并主動修復,不需要有人隨時在服務器端守候。具體實施例方式本發(fā)明用在S0S操作系統(tǒng)上,所選用傳感器節(jié)點為Mica2Mote,其上的微處理器為Atmegal28L,使用的指令集為AVRInstructionSet。偵測嵌入式系統(tǒng)錯誤的方法包括靜態(tài)檢査和動態(tài)檢查。靜態(tài)檢査的具體方法是檢查所有靜態(tài)給定存儲空間位址的存儲器存儲指令,所述的存儲器存儲指令包括直接調用指令和相對跳躍指令;同一模塊內的函數(shù)調用采用相對跳躍指令,不同模塊內的函數(shù)調用采用直接調用指令;直接調用指令和相對跳躍指令格式如下InstructionOperationCallkPC=kJmp.+kPC=PC+kJmp.—kPOPC-k如果直接調用后面給定位址中的任何一個位址不是系統(tǒng)調用跳躍表里面的其中一個合法值,則該模塊為不合法,不能上傳到傳感器節(jié)點上;如果全部直接調用都是跳躍表里的合法值,則該模塊為合法。具體方法是將跳躍表的開頭位址加上在跳躍表內的順序乘以2,被檢査的位址其值減掉跳躍表的開頭位址后,將該值再除以2,若為整數(shù),即為合法地址;否則不合法。動態(tài)檢査的具體方法是步驟(l).改寫模塊內容、增加指令,就是把存儲空間位址作為參數(shù)傳進動態(tài)檢査系統(tǒng)內以備調用;在編譯時,如果目的位址無法在給定的指令前插入檢查指令,則將欲存取的的存儲空間位址設為參數(shù),用來檢査該位址的合法性;這些指令包括三形式,分別為間接調用、載入和存儲,指令格式如下InstructionOperationicallPOZ(R31:R30)IdRd,XRd=[X(R27:R26)]IdRd,YRd=[Y(R29:R28)]IdRd,ZRd=[Z(R31:R30)]stX,Rr[X(R27:R26)]=RrstY,Rr[Y(R29:R28)]=RrstZ,Rr[Z(R31:R30)]=Rr當一段連續(xù)載入或存儲指令出現(xiàn)時,并且其目的位址連續(xù)、中間未被修改,則在這一段連續(xù)存取指令的第一個存取指令前加上兩個位址的檢查,分別是這個連續(xù)存取存儲空間位址的開頭和結尾,如果確定兩個位址的檢查均合法,則該段連續(xù)的存取都合法。步驟(2).檢查調用存儲空間位址和檢査存儲器載入存儲過程,當一個調用的位址被傳入時,這個函數(shù)首先取得該模塊的編號,使用系統(tǒng)內原本提供的系統(tǒng)函數(shù);然后依序檢査該位址是否是系統(tǒng)調用的進入點、向系統(tǒng)預約的其它模塊函數(shù)進入點或模塊本身內部的跳躍點,如果是系統(tǒng)調用的進入點、7向系統(tǒng)預約的其它模塊函數(shù)進入點或模塊本身內部的跳躍點中的任何一個,則存取合法,進行回傳;如果不是系統(tǒng)調用的進入點、向系統(tǒng)預約的其它模塊函數(shù)進入點或模塊本身內部的跳躍點中的任何一個,則為發(fā)生錯誤。具體方法是首先檢查系統(tǒng)調用進入點,先用最后一個進入點的值和傳入的位址比較,比較值大的直接跳到下一個比較區(qū)域。如果傳入位址比跳躍表開頭還小,則為錯誤。其次檢査向系統(tǒng)預約的其它模塊函數(shù),先修改節(jié)點上的加載器,載入模塊時,從模塊的檔案中獲得該模塊向系統(tǒng)預約了哪些函數(shù),將信息記錄下來,執(zhí)行檢查時,如果是記錄過的函數(shù)調用,則合法;否則,不合法。然后檢查模塊的程序區(qū),從加載器上獲得模塊的程序區(qū)儲存在系統(tǒng)的哪一個區(qū)段,獲得該模塊的開始位址和程序區(qū)大小,用這些信息確定該調用的位址是否落在該模塊本身的程序區(qū)內,如果落在該程序區(qū)內,則合法;否則,不合法。修復嵌入式系統(tǒng)錯誤的方法具體是步驟(l).如果偵測出有錯,則有錯的模塊立即停止工作;步驟(2).向服務器發(fā)送替換出錯模塊的請求,并把流程跳到排程上,避免執(zhí)行接下來錯誤的指令。服務器把收到的包含模塊號、版本號及節(jié)點號的信息,打包傳給操作平臺。當操作平臺收到服務器信息,判斷是否有可對應使用的其它版本,如果沒有先傳一次原版,并記一次重復記號。如果系統(tǒng)中有另一版本,服務器發(fā)送命令到傳感器節(jié)點,卸載錯誤的模塊。服務器完成卸載原來的模塊后,接著上傳另一個相同功能但版本不同的模塊到該傳感器節(jié)點上。如果重復要求第二次且還是只有一個版本,那就記錄下該傳感器節(jié)點號及模塊號,告知使用者。權利要求1、一種嵌入式系統(tǒng)的錯誤偵測和修復方法,包括偵測嵌入式系統(tǒng)錯誤和修復嵌入式系統(tǒng)錯誤,其特征在于偵測嵌入式系統(tǒng)錯誤的方法包括靜態(tài)檢查和動態(tài)檢查;所述的靜態(tài)檢查的具體方法是檢查所有靜態(tài)給定存儲空間位址的存儲器存儲指令,所述的存儲器存儲指令包括直接調用指令和相對跳躍指令;同一模塊內的函數(shù)調用采用相對跳躍指令,不同模塊內的函數(shù)調用采用直接調用指令;直接調用指令和相對跳躍指令格式如下<tablesid="tabl0001"num="0001"><table><tgroupcols="2"><colspeccolname="c001"colwidth="48%"/><colspeccolname="c002"colwidth="51%"/><thead></column></row><row><column><entrymorerows="1">Instruction</entry><entrymorerows="1">Operation</entry></column></row></thead><tbody></column></row><row><column><entrymorerows="1">Callk</entry><entrymorerows="1">PC=k</entry></column></row></column></row><row><column><entrymorerows="1">Jmp.+k</entry><entrymorerows="1">PC=PC+k</entry></column></row></column></row><row><column><entrymorerows="1">Jmp.-k</entry><entrymorerows="1">PC=PC-k</entry></column></row></tbody></tgroup></column></row><table></tables>如果直接調用后面給定位址中的任何一個位址不是系統(tǒng)調用跳躍表里面的其中一個合法值,則該模塊為不合法,不能上傳到傳感器節(jié)點上;如果全部直接調用都是跳躍表里的合法值,則該模塊為合法;所述的動態(tài)檢查的具體方法是步驟(1).改寫模塊內容、增加指令,就是把存儲空間位址作為參數(shù)傳進動態(tài)檢查系統(tǒng)內以備調用;在編譯時,如果目的位址無法在給定的指令前插入檢查指令,則將欲存取的的存儲空間位址設為參數(shù),用來檢查該位址的合法性;這些指令包括三形式,分別為間接調用、載入和存儲,指令格式如下<tablesid="tabl0002"num="0002"><table><tgroupcols="2"><colspeccolname="c001"colwidth="42%"/><colspeccolname="c002"colwidth="58%"/><thead></column></row><row><column><entrymorerows="1">Instruction</entry><entrymorerows="1">Operation</entry></column></row></thead><tbody></column></row><row><column><entrymorerows="1">icall</entry><entrymorerows="1">PC=Z(R31:R30)</entry></column></row></column></row><row><column><entrymorerows="1">ldRd,X</entry><entrymorerows="1">Rd=[X(R27:R26)]</entry></column></row></column></row><row><column><entrymorerows="1">ldRd,Y</entry><entrymorerows="1">Rd=[Y(R29:R28)]</entry></column></row></column></row><row><column><entrymorerows="1">ldRd,Z</entry><entrymorerows="1">Rd=[Z(R31:R30)]</entry></column></row></column></row><row><column><entrymorerows="1">stX,Rr</entry><entrymorerows="1">[X(R27:R26)]=Rr</entry></column></row></column></row><row><column><entrymorerows="1">stY,Rr</entry><entrymorerows="1">[Y(R29:R28)]=Rr</entry></column></row></column></row><row><column><entrymorerows="1">stZ,Rr</entry><entrymorerows="1">[Z(R31:R30)]=Rr</entry></column></row></tbody></tgroup></column></row><table></tables>當一段連續(xù)載入或存儲指令出現(xiàn)時,并且其目的位址連續(xù)、中間未被修改,則在這一段連續(xù)存取指令的第一個存取指令前加上兩個位址的檢查,分別是這個連續(xù)存取存儲空間位址的開頭和結尾,如果確定兩個位址的檢查均合法,則該段連續(xù)的存取都合法;步驟(2).檢查調用存儲空間位址和檢查存儲器載入存儲過程,當一個調用的位址被傳入時,這個函數(shù)首先取得該模塊的編號,使用系統(tǒng)內原本提供的系統(tǒng)函數(shù);然后依序檢查該位址是否是系統(tǒng)調用的進入點、向系統(tǒng)預約的其它模塊函數(shù)進入點或模塊本身內部的跳躍點,如果是系統(tǒng)調用的進入點、向系統(tǒng)預約的其它模塊函數(shù)進入點或模塊本身內部的跳躍點中的任何一個,則存取合法,進行回傳;如果不是系統(tǒng)調用的進入點、向系統(tǒng)預約的其它模塊函數(shù)進入點或模塊本身內部的跳躍點中的任何一個,則檢查出發(fā)生錯誤;修復嵌入式系統(tǒng)錯誤的方法具體是步驟(a).如果偵測出有錯,則有錯的模塊立即停止工作;步驟(b).向服務器發(fā)送替換出錯模塊的請求,服務器收到請求后,檢查是否有其它版本,如果有,則將另一版本加載到傳感器節(jié)點上,用來取代原來模塊的工作;如果沒有,則傳遞原來版本再試一次,若再次出錯,且沒有發(fā)現(xiàn)其它版本,則修復無效,服務器留下記錄告知使用者。全文摘要本發(fā)明涉及一種嵌入式系統(tǒng)的錯誤偵測和修復方法。目前無線傳感器節(jié)點的系統(tǒng)無法避免應用程序對系統(tǒng)核心的存儲空間做存取的動作,可能會讓系統(tǒng)產生不可預期的錯誤。本發(fā)明在SOS系統(tǒng)上以最小的修改系統(tǒng)架構方式,提出了一種可偵測存儲器存取錯誤,并能使用模塊替換的方式加以修復的方法,使存儲器存取錯誤產生機會減少,搜集的信息也能更加有效益,在維護系統(tǒng)上更是輕而易舉。利用本發(fā)明方法不必擔心何時該偵測網(wǎng)絡上的無線傳感器節(jié)點是否出錯,可能出錯的傳感器節(jié)點會被偵測到并主動修復,不需要有人隨時在服務器端守候。文檔編號G06F11/36GK101604289SQ20091010061公開日2009年12月16日申請日期2009年7月10日優(yōu)先權日2009年7月10日發(fā)明者吳國華,禎張,方美娥,鄭秋華申請人:杭州電子科技大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1