本發明涉及嵌入式系統技術領域,尤其涉及一種基于多核系統的硬件看門狗控制方法及系統。
背景技術:
在嵌入式應用領域,為了防止系統死機,或者保證系統實時性防止某任務超長運行,采用硬件看門狗機制很普遍。硬件看門狗由硬件電路或相關芯片實現,在特定時間內(一般1.6秒鐘)沒有對其清狗(reset),看門狗會自動拉低CPU的#RESET信號,讓CPU硬復位。這樣看來,既要看門狗能發揮作用,又不能讓其錯誤的復位系統。一般的做法是應用程序定時的去清狗,方法包括:在tick中斷清狗、在任務切換的鉤子函數中清狗、專門創建清狗任務。
對于單核系統,以上的三種方法都能很好的實現看門狗功能。但是在多核AMP系統下,其中AMP 為Asymmetric Multi-Processing的縮寫,其中AMP系統為非對稱多處理系統。是因為整個系統的初始化流程是不可逆的,那么系統內的其它核必須復位才行。現有技術中使用硬件內核提供的WATCHDOG_TIMER,它只能復位其所在的核,不能復位CPU芯片內所有的核。因此現有技術中多核在正常運行時,一旦核間通訊中斷或者一個或以上的核死機異常等發生,不能復位整個系統。
因此,現有技術還有待于改進和發展。
技術實現要素:
鑒于現有技術的不足,本發明目的在于提供一種基于多核系統的硬件看門狗控制方法及系統,旨在解決現有技術中使用硬件內核提供的WATCHDOG_TIMER,它只能復位其所在的核,不能復位CPU芯片內所有的核。因此多核在正常運行時,一旦核間通訊中斷或者一個或以上的核死機異常等發生,不能復位整個系統的技術問題。
本發明的技術方案如下:
一種基于多核系統的硬件看門狗控制方法,其中,方法包括:
A、主核處理器內核啟動后,啟動多任務模式,主核處理器每隔第一預定時間向從核處理器發送主核處理器心跳消息;
B、從核處理器接收主核處理器發送的主核處理器心跳消息,并在接收到主核處理器心跳消息后向主核處理器發送從核處理器心跳信息;
C、當檢測主核處理器收到從核處理器發送的從核處理器心跳信息,且主核處理器切換任務時,清理看門狗。
所述的基于多核系統的硬件看門狗控制方法,其中,所述A之前還包括:
S、預先在主核處理器中定義一個心跳次數統計變量,當收到從核處理器心跳信息時,心跳次數統計變量加1。
所述的基于多核系統的硬件看門狗控制方法,其中,所述C具體包括:
C1、當檢測主核處理器收到從核處理器發送的從核處理器心跳信息后,控制心跳次數統計變量加1;
C2、主核處理器切換任務時,調用任務切換函數,任務切換函數判斷心跳次數統計變量是否大于0;
C3、若心跳次數統計變量大于0,則主核處理器調用看門狗清理函數對看門狗進行清理后,控制心跳次數統計變量設置為0。
所述的基于多核系統的硬件看門狗控制方法,其中,所述C還包括:
C11、當檢測到主核處理器在第二預定時間內未收到從核處理器心跳信息,則控制看門狗重啟系統。
所述的基于多核系統的硬件看門狗控制方法,其中,所述C11之前包括:
C0、若檢測到主核處理器在第三預定時間內未收到從核處理器心跳信息,則主核處理器在系統中發送從核處理器故障告警信息。
一種基于多核系統的硬件看門狗控制系統,其中,系統包括:
主核處理器心跳發送模塊,用于主核處理器內核啟動后,啟動多任務模式,主核處理器每隔第一預定時間向從核處理器發送主核處理器心跳消息;
心跳信息接收模塊,用于從核處理器接收主核處理器發送的主核處理器心跳消息,并在接收到主核處理器心跳消息后向主核處理器發送從核處理器心跳信息;
看門狗控制模塊,用于當檢測主核處理器收到從核處理器發送的從核處理器心跳信息,且主核處理器切換任務時,清理看門狗。
所述的基于多核系統的硬件看門狗控制系統,其中,所述系統還包括:
預先定義模塊,用于預先在主核處理器中定義一個心跳次數統計變量,當收到從核處理器心跳信息時,心跳次數統計變量加1。
所述的基于多核系統的硬件看門狗控制系統,其中,所述看門狗控制模塊具體包括:
第一控制單元,用于當檢測主核處理器收到從核處理器發送的從核處理器心跳信息后,控制心跳次數統計變量加1;
判斷單元,用于主核處理器切換任務時,調用任務切換函數,任務切換函數判斷心跳次數統計變量是否大于0;
清理單元,用于若心跳次數統計變量大于0,則主核處理器調用看門狗清理函數對看門狗進行清理后,控制心跳次數統計變量設置為0。
所述的基于多核系統的硬件看門狗控制系統,其中,所述看門狗控制模塊還包括:
第二控制單元,用于當檢測到主核處理器在第二預定時間內未收到從核處理器心跳信息,則控制看門狗重啟系統。
所述的基于多核系統的硬件看門狗控制系統,其中,所述看門狗控制模塊還包括:
告警信息發送單元,用于若檢測到主核處理器在第三預定時間內未收到從核處理器心跳信息,則主核處理器在系統中發送從核處理器故障告警信息。
本發明提供了一種基于多核系統的硬件看門狗控制方法及系統,本發明中主核處理器負責清狗,同時主從之間建立心跳機制,主核處理器只有檢查到從核處理器的心跳,并且本身有任務切換時,才進行清狗操作,從而使多核在正常運行時,不會被看門狗復位,一旦核間通訊中斷或者一個或以上的核死機異常等發生,能復位整個系統。
附圖說明
圖1為本發明的一種基于多核系統的硬件看門狗控制方法的較佳實施例的流程圖。
圖2為圖1中步驟S300的細化步驟流程圖。
圖3為本發明的一種基于多核系統的硬件看門狗控制方法的的具體實施例的流程圖。
圖4為本發明的一種基于多核系統的硬件看門狗控制系統的較佳實施例的功能原理框圖。
圖5為本發明的一種基于多核系統的硬件看門狗控制系統的具體應用實施例的看門狗控制模塊的功能原理框圖。
具體實施方式
為使本發明的目的、技術方案及效果更加清楚、明確,以下對本發明進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。
本發明提供了一種基于多核系統的硬件看門狗控制方法的較佳實施例的流程圖,如圖1所示,其中,方法包括:
步驟S100、主核處理器內核啟動后,啟動多任務模式,主核處理器每隔第一預定時間向從核處理器發送主核處理器心跳消息。
具體實施時,LINUX SMP系統一般采用守護進程負責清狗。主核處理器操作系統內核啟動后,多任務模式啟動,必然啟動任務調度,操作系統調度不同任務執行。同時主核處理器定時發送一個消息給對方證明自己還活著,第一預定時間可根據需要進行設置。
進一步的實施例中,步驟S100之前還包括:
步驟S1、預先在主核處理器中定義一個心跳次數統計變量,當收到從核處理器心跳信息時,心跳次數統計變量加1。
具體實施時,預先主核處理器定義一個心跳次數統計HeartBeatCount,每次心跳定時消息到達時,該計數增加一次,如此累加。
步驟S200、從核處理器接收主核處理器發送的主核處理器心跳消息,并在接收到主核處理器心跳消息后向主核處理器發送從核處理器心跳信息。
具體實施時,從核處理器啟動一個心跳任務,任務每隔0.5秒鐘調度一次。該任務就負責接收主核處理器發來的心跳,并將自己的心跳發送給主核處理器。
步驟S300、當檢測主核處理器收到從核處理器發送的從核處理器心跳信息,且主核處理器切換任務時,清理看門狗。
具體實施時,主核處理器從主從通信接口讀取從核處理器發過來的心跳消息,如果收到,將HartBeatCount加1,同時發送心跳給從核處理器。如果沒有收到心跳消息,只發送心跳包給從核處理器。在主核處理器的任務切換鉤子函數中,判斷心跳統計是否大于0,如果大于0,則對看門狗進行清理并且清零心跳統計,否則不清狗。其中看門狗就是定期的查看芯片內部的情況,一旦發生錯誤就向芯片發出重啟信號的電路。看門狗命令在程序的中斷中擁有最高的優先級。
如圖2所示,步驟S300具體包括:
步驟S301、當檢測主核處理器收到從核處理器發送的從核處理器心跳信息后,控制心跳次數統計變量加1;
步驟S302、主核處理器切換任務時,調用任務切換函數,任務切換函數判斷心跳次數統計變量是否大于0;
步驟S303、若心跳次數統計變量大于0,則主核處理器調用看門狗清理函數對看門狗進行清理后,控制心跳次數統計變量設置為0后,控制心跳次數統計變量設置為0。
具體實施時,在操作系統調度任務時,會觸發任務切換鉤子函數。在鉤子函數中,判斷HartBeatCount是否大于0。如果HartBeatCount大于0,則調用看門狗驅動函數清狗,同時設置HartBeatCount = 0。其中鉤子函數是Windows消息處理機制的一部分,通過設置“鉤子”,應用程序可以在系統級對所有消息、事件進行過濾,訪問在正常情況下無法訪問的消息。鉤子的本質是一段用以處理系統消息的程序,通過系統調用,把它掛入系統。
進一步地,步驟S300還包括:
步驟S311、當檢測到主核處理器在第二預定時間內未收到從核處理器心跳信息,則控制看門狗重啟系統。
具體實施時,如果主核處理器在第二預定時間內無觸發任務切換鉤子,那么看門狗自動復位整個系統,此時是主核處理器自己死機或者某任務超長運行了。主核處理器的發送心跳的第一預定時間為0.5s,第二預定時間優先為1.6s。
進一步的實施例中,步驟S311之前包括:
步驟S30、若檢測到主核處理器在第三預定時間內未收到從核處理器心跳信息,則主核處理器在系統中發送從核處理器故障告警信息。
具體實施時,當主核處理器在第三預定時間內檢測不到心跳,看門狗即將復位系統之前給出告警,提示主從核處理器心跳丟失,從核處理器已經死機。如果沒有告警也被看門狗復位了,必然是主核處理器自己死機了。
例如,第三預定時間為3次心跳,即主核處理器心跳任務連續3次收不到從核處理器心跳消息,那么主核處理器已經有1.5秒鐘未清狗,還剩余0.1秒鐘看門狗就要復位整個系統,主核處理器發送告警系統,提示從核處理器已經不在線可能已經死機。
本發明的實施例中,主核處理器要復位整個系統,只需殺死心跳任務并且設置HartBeatCount = 0。從核處理器要復位整個系統,只需殺死心跳任務,這樣主核處理器永遠都收不到從核處理器心跳,沒有地方可以清狗,看門狗復位整個系統。
以上說明舉例是以雙核為基礎,本專利同樣適應雙核(4核,8核等等)以上的AMP系統。
本發明還提供了一種基于多核系統的硬件看門狗控制方法的的具體實施例的流程圖,如圖3所示,具體包括以下流程:
在主核處理器執行的操作為:
步驟S10、多任務啟動;
步驟S11、任務切換;
步驟S12、判斷HeartBeatCount是否大于0,若大于 ,則執行步驟S13,若小于,則執行步驟S15;
步驟S13、清理硬件看門狗,并設置HeartBeatCount=0,;
步驟S14、重啟硬件看門狗;
步驟S15、主核處理器的心跳任務啟動;
步驟S16、判斷是否收到心跳,若是,則執行步驟S17,若否,則執行步驟S18;這里是指是否收到從核處理器發送的從核處理器心跳;
步驟S17、HeartBeatCount+1;
步驟S18、發送心跳;向從核處理器發送自己的主核處理器心跳;
步驟S19、不作處理;
在從核處理器執行的操作為:
步驟S21、從核處理器心跳任務啟動;
步驟S22、發送心跳;是向主核處理器發送從核處理器心跳;
步驟S23、接收心跳,接收主核處理器發送的從核處理器心跳。
由以上方法實施例可知,本發明提出一種基于多核系統的硬件看門狗控制方法:由主核處理器負責清狗,同時主從之間建立心跳機制,主核處理器只有檢查到從核的心跳,并且本身有任務切換時,才進行清狗操作。本發明可實現多核在正常運行時,不會被看門狗復位,一旦核間通訊中斷或者一個或以上的核死機異常等發生,能復位整個系統。
在示例性實施例中,裝置可以被一個或多個應用專用集成電路(ASIC)、數字信號處理器(DSP)、數字信號處理設備(DSPD)、可編程邏輯器件(PLD)、現場可編程門陣列(FPGA)、控制器、微控制器、微處理器或其他電子元件實現,用于執行上述方法。
在示例性實施例中,還提供了一種包括指令的非臨時計算機可讀存儲介質,例如包括指令的存儲器,上述指令可由裝置的處理器執行以完成上述方法。例如,所述非臨時性計算機可讀存儲介質可以是ROM、隨機存取存儲器(RAM)、CD-ROM、磁帶、軟盤和光數據存儲設備等。
本發明還提供了一種基于多核系統的硬件看門狗控制系統的較佳實施例的功能原理框圖,如圖4所示,系統包括:
主核處理器心跳發送模塊100,用于主核處理器內核啟動后,啟動多任務模式,主核處理器每隔第一預定時間向從核處理器發送主核處理器心跳消息;具體如方法實施例所示。
心跳信息接收模塊200,用于從核處理器接收主核處理器發送的主核處理器心跳消息,并在接收到主核處理器心跳消息后向主核處理器發送從核處理器心跳信息;具體如方法實施例所示。
看門狗控制模塊300,用于當檢測主核處理器收到從核處理器發送的從核處理器心跳信息,且主核處理器切換任務時,清理看門狗;具體如方法實施例所示。
所述的基于多核系統的硬件看門狗控制系統,其中,所述系統還包括:
預先定義模塊,用于預先在主核處理器中定義一個心跳次數統計變量,當收到從核處理器心跳信息時,心跳次數統計變量加1;具體如方法實施例所示。
進一步的實施例中,如圖5所示,看門狗控制模塊300具體包括:
第一控制單元301,用于當檢測主核處理器收到從核處理器發送的從核處理器心跳信息后,控制心跳次數統計變量加1;具體如方法實施例所示。
判斷單元302,用于主核處理器切換任務時,調用任務切換函數,任務切換函數判斷心跳次數統計變量是否大于0;具體如方法實施例所示。
清理單元303,用于若心跳次數統計變量大于0,則主核處理器調用看門狗清理函數對看門狗進行清理后,控制心跳次數統計變量設置為0;具體如方法實施例所示。
所述的基于多核系統的硬件看門狗控制系統,其中,所述看門狗控制模塊還包括:
第二控制單元,用于當檢測到主核處理器在第二預定時間內未收到從核處理器心跳信息,則控制看門狗重啟系統;具體如方法實施例所示。
所述的基于多核系統的硬件看門狗控制系統,其中,所述看門狗控制模塊還包括:
告警信息發送單元,用于若檢測到主核處理器在第三預定時間內未收到從核處理器心跳信息,則主核處理器在系統中發送從核處理器故障告警信息;具體如方法實施例所示。
綜上所述,本發明提供了一種基于多核系統的硬件看門狗控制方法及系統,方法包括:主核處理器內核啟動后,啟動多任務模式,主核處理器每隔第一預定時間向從核處理器發送主核處理器心跳消息;從核處理器接收主核處理器發送的主核處理器心跳消息,并在接收到主核處理器心跳消息后向主核處理器發送從核處理器心跳信息;當檢測主核處理器收到從核處理器發送的從核處理器心跳信息,且主核處理器切換任務時,清理看門狗。本發明中主核處理器負責清狗,同時主從之間建立心跳機制,主核處理器只有檢查到從核處理器的心跳,并且本身有任務切換時,才進行清狗操作,從而使多核在正常運行時,不會被看門狗復位,一旦核間通訊中斷或者一個或以上的核死機異常等發生,能復位整個系統。
應當理解的是,本發明的應用不限于上述的舉例,對本領域普通技術人員來說,可以根據上述說明加以改進或變換,所有這些改進和變換都應屬于本發明所附權利要求的保護范圍。