两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

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

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

專利名稱::一種嵌入式系統(tǒng)的錯誤偵測和修復(fù)方法
技術(shù)領(lǐng)域
:本發(fā)明屬于計算機
技術(shù)領(lǐng)域
,特別涉及了一種嵌入式系統(tǒng)的錯誤偵測和修復(fù)方法。
背景技術(shù)
:由于嵌入式系統(tǒng)的快速發(fā)展,目前嵌入式系統(tǒng)發(fā)展趨勢為系統(tǒng)晶片、低耗電的通訊模塊和低電源的系統(tǒng)架構(gòu)。正朝著更小而且更省電的嵌入式系統(tǒng)設(shè)計邁進(jìn),而無線傳感器正是在這種趨勢下衍生出來的嵌入式系統(tǒng)。無線傳感器節(jié)點擁有偵測與計算的能力,通過無線的方式通信,每一個傳感器節(jié)點的硬件由嵌入式微處理器、存儲器、傳感器、無線通信模塊及電池組成。無線傳感器節(jié)點是資源受限的嵌入式系統(tǒng),在其上的微處理器不具有存儲管理單元。在無線傳感網(wǎng)絡(luò)上如何避免存儲器錯誤而導(dǎo)致系統(tǒng)出錯,勢必成為一個重要問題。尤其在動態(tài)載入模塊到存儲空間時,更易產(chǎn)生錯誤。每個可動態(tài)載入的應(yīng)用模塊都有自己可存取的存儲空間范圍,當(dāng)其試圖存取合法范圍以外的地方,則視為錯誤。在實際應(yīng)用中,大部分的無線傳感器節(jié)點散布在人為難以到達(dá)的地方,代替人類在難以到達(dá)的地方搜集需要的信息。因為這個特性,無線傳感網(wǎng)絡(luò)硬件設(shè)備架設(shè)完成后,使用者便不容易以人為方式到達(dá)這些被散布在外的節(jié)點上做錯誤修復(fù)的動作。當(dāng)某些節(jié)點上面的系統(tǒng)出現(xiàn)錯誤而失去它的功用,這個系統(tǒng)的使用者無法馬上得知這些錯誤,只能等使用者主動散步偵測信息或等到回傳的資料出現(xiàn)錯誤才能發(fā)現(xiàn)。這些回傳資料出現(xiàn)錯誤也會影響到搜集信息的正確性。目前無線傳感器節(jié)點上的微處理器大部分都不具有存儲管理單元,因此在無線傳感器節(jié)點上的系統(tǒng)無法避免應(yīng)用程序?qū)ο到y(tǒng)核心的存儲空間做存取的動作,此危險動作會影響到該節(jié)點的正常運行,可能會讓系統(tǒng)產(chǎn)生不可預(yù)期的錯誤。
發(fā)明內(nèi)容本發(fā)明的目的就是提供一種嵌入式系統(tǒng)的錯誤偵測和修復(fù)方法,避免應(yīng)用程序侵占操作系統(tǒng)所屬的存儲空間,或侵占其它應(yīng)用程序所屬的存儲空間。本發(fā)明中偵測嵌入式系統(tǒng)錯誤的方法包括靜態(tài)檢查和動態(tài)檢査。靜態(tài)檢査的具體方法是檢査所有靜態(tài)給定存儲空間位址的存儲器存儲指令,所述的存儲器存儲指令包括直接調(diào)用指令和相對跳躍指令;同一模塊內(nèi)的函數(shù)調(diào)用采用相對跳躍指令,不同模塊內(nèi)的函數(shù)調(diào)用采用直接調(diào)用指令;直接調(diào)用指令和相對跳躍指令格式如下InstructionOperationCallkPC=kJmp.+kPC=PC+kJmp.-kPC=PC-k如果直接調(diào)用后面給定位址中的任何一個位址不是系統(tǒng)調(diào)用跳躍表里面的其中一個合法值,則該模塊為不合法,不能上傳到傳感器節(jié)點上;如果全部直接調(diào)用都是跳躍表里的合法值,則該模塊為合法。動態(tài)檢查的具體方法是步驟(l).改寫模塊內(nèi)容、增加指令,就是把存儲空間位址作為參數(shù)傳進(jìn)動態(tài)檢査系統(tǒng)內(nèi)以備調(diào)用;在編譯時,如果目的位址無法在給定的指令前插入檢査指令,則將欲存取的的存儲空間位址設(shè)為參數(shù),用來檢査該位址的合法性;這些指令包括三形式,分別為間接調(diào)用、載入和存儲,指令格式如下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當(dāng)一段連續(xù)載入或存儲指令出現(xiàn)時,并且其目的位址連續(xù)、中間未被修改,則在這一段連續(xù)存取指令的第一個存取指令前加上兩個位址的檢査,分別是這個連續(xù)存取存儲空間位址的開頭和結(jié)尾,如果確定兩個位址的檢査均5合法,則該段連續(xù)的存取都合法。步驟(2).檢査調(diào)用存儲空間位址和檢查存儲器載入存儲過程,當(dāng)一個調(diào)用的位址被傳入時,這個函數(shù)首先取得該模塊的編號,使用系統(tǒng)內(nèi)原本提供的系統(tǒng)函數(shù);然后依序檢査該位址是否是系統(tǒng)調(diào)用的進(jìn)入點、向系統(tǒng)預(yù)約的其它模塊函數(shù)進(jìn)入點或模塊本身內(nèi)部的跳躍點,如果是系統(tǒng)調(diào)用的進(jìn)入點、向系統(tǒng)預(yù)約的其它模塊函數(shù)進(jìn)入點或模塊本身內(nèi)部的跳躍點中的任何一個,則存取合法,進(jìn)行回傳;如果不是系統(tǒng)調(diào)用的進(jìn)入點、向系統(tǒng)預(yù)約的其它模塊函數(shù)進(jìn)入點或模塊本身內(nèi)部的跳躍點中的任何一個,則為發(fā)生錯誤。本發(fā)明中修復(fù)嵌入式系統(tǒng)錯誤的方法具體是.步驟(l).如果偵測出有錯,則有錯的模塊立即停止工作;步驟(2).向服務(wù)器發(fā)送替換出錯模塊的請求,服務(wù)器收到請求后,檢査是否有其它版本,如果有,則將另一版本加載到傳感器節(jié)點上,用來取代原來模塊的工作;如果沒有,則傳遞原來版本再試一次,若再次出錯,且沒有發(fā)現(xiàn)其它版本,則修復(fù)無效,服務(wù)器留下記錄告知使用者。本發(fā)明在S0S系統(tǒng)上以最小的修改系統(tǒng)架構(gòu)方式,提出了一種可偵測存儲器存取錯誤,并能使用模塊替換的方式加以修復(fù)的方法。能夠有效地增加無線傳感網(wǎng)絡(luò)的可用性,使存儲器存取錯誤產(chǎn)生機會減少,搜集的信息也能更加有效益,在維護(hù)系統(tǒng)上更是輕而易舉,不必?fù)?dān)心何時該偵測網(wǎng)絡(luò)上的無線傳感器節(jié)點是否出錯,就算可能出錯的傳感器節(jié)點也會被偵測到并主動修復(fù),不需要有人隨時在服務(wù)器端守候。具體實施例方式本發(fā)明用在S0S操作系統(tǒng)上,所選用傳感器節(jié)點為Mica2Mote,其上的微處理器為Atmegal28L,使用的指令集為AVRInstructionSet。偵測嵌入式系統(tǒng)錯誤的方法包括靜態(tài)檢査和動態(tài)檢查。靜態(tài)檢査的具體方法是檢查所有靜態(tài)給定存儲空間位址的存儲器存儲指令,所述的存儲器存儲指令包括直接調(diào)用指令和相對跳躍指令;同一模塊內(nèi)的函數(shù)調(diào)用采用相對跳躍指令,不同模塊內(nèi)的函數(shù)調(diào)用采用直接調(diào)用指令;直接調(diào)用指令和相對跳躍指令格式如下InstructionOperationCallkPC=kJmp.+kPC=PC+kJmp.—kPOPC-k如果直接調(diào)用后面給定位址中的任何一個位址不是系統(tǒng)調(diào)用跳躍表里面的其中一個合法值,則該模塊為不合法,不能上傳到傳感器節(jié)點上;如果全部直接調(diào)用都是跳躍表里的合法值,則該模塊為合法。具體方法是將跳躍表的開頭位址加上在跳躍表內(nèi)的順序乘以2,被檢査的位址其值減掉跳躍表的開頭位址后,將該值再除以2,若為整數(shù),即為合法地址;否則不合法。動態(tài)檢査的具體方法是步驟(l).改寫模塊內(nèi)容、增加指令,就是把存儲空間位址作為參數(shù)傳進(jìn)動態(tài)檢査系統(tǒng)內(nèi)以備調(diào)用;在編譯時,如果目的位址無法在給定的指令前插入檢查指令,則將欲存取的的存儲空間位址設(shè)為參數(shù),用來檢査該位址的合法性;這些指令包括三形式,分別為間接調(diào)用、載入和存儲,指令格式如下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當(dāng)一段連續(xù)載入或存儲指令出現(xiàn)時,并且其目的位址連續(xù)、中間未被修改,則在這一段連續(xù)存取指令的第一個存取指令前加上兩個位址的檢查,分別是這個連續(xù)存取存儲空間位址的開頭和結(jié)尾,如果確定兩個位址的檢查均合法,則該段連續(xù)的存取都合法。步驟(2).檢查調(diào)用存儲空間位址和檢査存儲器載入存儲過程,當(dāng)一個調(diào)用的位址被傳入時,這個函數(shù)首先取得該模塊的編號,使用系統(tǒng)內(nèi)原本提供的系統(tǒng)函數(shù);然后依序檢査該位址是否是系統(tǒng)調(diào)用的進(jìn)入點、向系統(tǒng)預(yù)約的其它模塊函數(shù)進(jìn)入點或模塊本身內(nèi)部的跳躍點,如果是系統(tǒng)調(diào)用的進(jìn)入點、7向系統(tǒng)預(yù)約的其它模塊函數(shù)進(jìn)入點或模塊本身內(nèi)部的跳躍點中的任何一個,則存取合法,進(jìn)行回傳;如果不是系統(tǒng)調(diào)用的進(jìn)入點、向系統(tǒng)預(yù)約的其它模塊函數(shù)進(jìn)入點或模塊本身內(nèi)部的跳躍點中的任何一個,則為發(fā)生錯誤。具體方法是首先檢查系統(tǒng)調(diào)用進(jìn)入點,先用最后一個進(jìn)入點的值和傳入的位址比較,比較值大的直接跳到下一個比較區(qū)域。如果傳入位址比跳躍表開頭還小,則為錯誤。其次檢査向系統(tǒng)預(yù)約的其它模塊函數(shù),先修改節(jié)點上的加載器,載入模塊時,從模塊的檔案中獲得該模塊向系統(tǒng)預(yù)約了哪些函數(shù),將信息記錄下來,執(zhí)行檢查時,如果是記錄過的函數(shù)調(diào)用,則合法;否則,不合法。然后檢查模塊的程序區(qū),從加載器上獲得模塊的程序區(qū)儲存在系統(tǒng)的哪一個區(qū)段,獲得該模塊的開始位址和程序區(qū)大小,用這些信息確定該調(diào)用的位址是否落在該模塊本身的程序區(qū)內(nèi),如果落在該程序區(qū)內(nèi),則合法;否則,不合法。修復(fù)嵌入式系統(tǒng)錯誤的方法具體是步驟(l).如果偵測出有錯,則有錯的模塊立即停止工作;步驟(2).向服務(wù)器發(fā)送替換出錯模塊的請求,并把流程跳到排程上,避免執(zhí)行接下來錯誤的指令。服務(wù)器把收到的包含模塊號、版本號及節(jié)點號的信息,打包傳給操作平臺。當(dāng)操作平臺收到服務(wù)器信息,判斷是否有可對應(yīng)使用的其它版本,如果沒有先傳一次原版,并記一次重復(fù)記號。如果系統(tǒng)中有另一版本,服務(wù)器發(fā)送命令到傳感器節(jié)點,卸載錯誤的模塊。服務(wù)器完成卸載原來的模塊后,接著上傳另一個相同功能但版本不同的模塊到該傳感器節(jié)點上。如果重復(fù)要求第二次且還是只有一個版本,那就記錄下該傳感器節(jié)點號及模塊號,告知使用者。權(quán)利要求1、一種嵌入式系統(tǒng)的錯誤偵測和修復(fù)方法,包括偵測嵌入式系統(tǒng)錯誤和修復(fù)嵌入式系統(tǒng)錯誤,其特征在于偵測嵌入式系統(tǒng)錯誤的方法包括靜態(tài)檢查和動態(tài)檢查;所述的靜態(tài)檢查的具體方法是檢查所有靜態(tài)給定存儲空間位址的存儲器存儲指令,所述的存儲器存儲指令包括直接調(diào)用指令和相對跳躍指令;同一模塊內(nèi)的函數(shù)調(diào)用采用相對跳躍指令,不同模塊內(nèi)的函數(shù)調(diào)用采用直接調(diào)用指令;直接調(diào)用指令和相對跳躍指令格式如下<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>如果直接調(diào)用后面給定位址中的任何一個位址不是系統(tǒng)調(diào)用跳躍表里面的其中一個合法值,則該模塊為不合法,不能上傳到傳感器節(jié)點上;如果全部直接調(diào)用都是跳躍表里的合法值,則該模塊為合法;所述的動態(tài)檢查的具體方法是步驟(1).改寫模塊內(nèi)容、增加指令,就是把存儲空間位址作為參數(shù)傳進(jìn)動態(tài)檢查系統(tǒng)內(nèi)以備調(diào)用;在編譯時,如果目的位址無法在給定的指令前插入檢查指令,則將欲存取的的存儲空間位址設(shè)為參數(shù),用來檢查該位址的合法性;這些指令包括三形式,分別為間接調(diào)用、載入和存儲,指令格式如下<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>當(dāng)一段連續(xù)載入或存儲指令出現(xiàn)時,并且其目的位址連續(xù)、中間未被修改,則在這一段連續(xù)存取指令的第一個存取指令前加上兩個位址的檢查,分別是這個連續(xù)存取存儲空間位址的開頭和結(jié)尾,如果確定兩個位址的檢查均合法,則該段連續(xù)的存取都合法;步驟(2).檢查調(diào)用存儲空間位址和檢查存儲器載入存儲過程,當(dāng)一個調(diào)用的位址被傳入時,這個函數(shù)首先取得該模塊的編號,使用系統(tǒng)內(nèi)原本提供的系統(tǒng)函數(shù);然后依序檢查該位址是否是系統(tǒng)調(diào)用的進(jìn)入點、向系統(tǒng)預(yù)約的其它模塊函數(shù)進(jìn)入點或模塊本身內(nèi)部的跳躍點,如果是系統(tǒng)調(diào)用的進(jìn)入點、向系統(tǒng)預(yù)約的其它模塊函數(shù)進(jìn)入點或模塊本身內(nèi)部的跳躍點中的任何一個,則存取合法,進(jìn)行回傳;如果不是系統(tǒng)調(diào)用的進(jìn)入點、向系統(tǒng)預(yù)約的其它模塊函數(shù)進(jìn)入點或模塊本身內(nèi)部的跳躍點中的任何一個,則檢查出發(fā)生錯誤;修復(fù)嵌入式系統(tǒng)錯誤的方法具體是步驟(a).如果偵測出有錯,則有錯的模塊立即停止工作;步驟(b).向服務(wù)器發(fā)送替換出錯模塊的請求,服務(wù)器收到請求后,檢查是否有其它版本,如果有,則將另一版本加載到傳感器節(jié)點上,用來取代原來模塊的工作;如果沒有,則傳遞原來版本再試一次,若再次出錯,且沒有發(fā)現(xiàn)其它版本,則修復(fù)無效,服務(wù)器留下記錄告知使用者。全文摘要本發(fā)明涉及一種嵌入式系統(tǒng)的錯誤偵測和修復(fù)方法。目前無線傳感器節(jié)點的系統(tǒng)無法避免應(yīng)用程序?qū)ο到y(tǒng)核心的存儲空間做存取的動作,可能會讓系統(tǒng)產(chǎn)生不可預(yù)期的錯誤。本發(fā)明在SOS系統(tǒng)上以最小的修改系統(tǒng)架構(gòu)方式,提出了一種可偵測存儲器存取錯誤,并能使用模塊替換的方式加以修復(fù)的方法,使存儲器存取錯誤產(chǎn)生機會減少,搜集的信息也能更加有效益,在維護(hù)系統(tǒng)上更是輕而易舉。利用本發(fā)明方法不必?fù)?dān)心何時該偵測網(wǎng)絡(luò)上的無線傳感器節(jié)點是否出錯,可能出錯的傳感器節(jié)點會被偵測到并主動修復(fù),不需要有人隨時在服務(wù)器端守候。文檔編號G06F11/36GK101604289SQ20091010061公開日2009年12月16日申請日期2009年7月10日優(yōu)先權(quán)日2009年7月10日發(fā)明者吳國華,禎張,方美娥,鄭秋華申請人:杭州電子科技大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
北票市| 西乡县| 涪陵区| 嘉义县| 彭水| 板桥市| 琼中| 博野县| 昌江| 新邵县| 商河县| 土默特左旗| 封丘县| 且末县| 旅游| 伽师县| 安塞县| 旬阳县| 定远县| 汾西县| 三都| 遂昌县| 五原县| 桓仁| 太仓市| 广宗县| 井陉县| 西藏| 炉霍县| 周宁县| 阳原县| 攀枝花市| 乐昌市| 延吉市| 天水市| 安阳县| 辛集市| 新田县| 新乐市| 高碑店市| 雷州市|