一種cpu檢測方法
【技術領域】
[0001]本發(fā)明涉及一種方法,尤其是一種CPU檢測方法,屬于嵌入式系統(tǒng)BIT (Build InTest)檢測的技術領域。
【背景技術】
[0002]在數字電子控制系統(tǒng)中,對每一個硬件都應進行檢測,其中,包括對CPU的檢測。通常CPU檢測方法是進行一系列數學運算,檢查運算結果是否符合期望。實際上CPU正常工作涉及到很多模塊,包括CPU通用數據寄存器、CPU通用地址寄存器、ALU單元、乘法器等,僅通過數學運算的檢測方法無法充分地檢測CPU。
【發(fā)明內容】
[0003]本發(fā)明的目的是克服現(xiàn)有技術中存在的不足,提供一種CPU檢測方法,其操作方便,實現(xiàn)對CPU的有效檢測,能使得CPU檢測更加充分完整,適應性好,安全可靠。
[0004]按照本發(fā)明提供的技術方案,所述CPU檢測方法,在關閉CPU的中斷使能后,執(zhí)行對CPU指令的運行檢測;在執(zhí)行CPU指令運行檢測時,確定需要在CPU上運行的檢測指令輸入以及與每個檢測指令輸入在運行后對應的檢測期望,若在CPU上運行檢測指令輸入的檢測輸出與對應的檢測期望不一致時,則報告CPU故障且退出對CPU的檢測,否則,確定CPU檢測正常。
[0005]若CPU內包含CPU通用地址寄存器時,則關閉CPU中斷使能后,在執(zhí)行CPU指令的運行檢測前或執(zhí)行CPU指令的運行檢測后,實施對CPU通用地址寄存器的檢測;所述CPU通用地址寄存器的檢測包括如下步驟:
步驟S1、將CPU內的一 CPU通用地址寄存器中的初始地址值保存到內存中;
步驟S2、在上述CPU通用地址寄存器中寫入所需的地址檢測值,所述地址檢測值長度為CPU通用地址寄存器的最大寄存空間;
步驟S3、讀取上述CPU通用地址寄存器中的值,以得到地址檢測結果,并將讀取的地址檢測結果存入內存變量中;
步驟S4、將步驟S3中讀取的地址檢測結果與步驟S2中寫入的地址檢測值進行比較,若讀取的地址檢測結果與寫入的地址檢測值不一致,則報告CPU故障,將初始地址值恢復到上述的CPU通用地址寄存器中并退出檢測,否則,跳轉至步驟S5 ;
步驟S5、將上述步驟S2中的地址檢測值取反,以得到取反地址檢測值;將所述取反地址檢測值寫入上述的CPU通用地址寄存器中;
步驟S6、讀取上述的CPU通用地址寄存器中的值,以得到取反地址檢測結果,并將讀取的取反地址檢測結果存入內存變量中;
步驟S7、將步驟S5中讀取的取反地址檢測結果與步驟S5中寫入的取反地址檢測值進行比較,若讀取的取反地址檢測結果與寫入的取反地址檢測值不一致,則報告CPU故障,將初始地址值恢復到上述的CPU通用地址寄存器中并退出檢測,否則,跳轉至步驟S8 ; 步驟S8、對CPU內其余的CPU通用地址寄存器重復上述步驟S2~步驟S8的檢測操作,直至CPU內所有的CPU通用地址寄存器均通過檢測。
[0006]若CPU內包含CPU通用數據寄存器時,則關閉CPU中斷使能后,在執(zhí)行CPU指令的運行檢測前或執(zhí)行CPU指令的運行檢測后,實施對CPU通用數據寄存器的檢測;所述CPU通用數據寄存器的檢測包括如下步驟:
步驟Tl、將CPU內的一 CPU通用數據寄存器中的初始數據值保存到內存中;
步驟T2、在上述CPU通用數據寄存器中寫入所需的數據檢測值,所述數據檢測值長度為CPU通用數據寄存器的最大寄存空間;
步驟T3、讀取上述CPU通用數據寄存器中的值,以得到數據檢測結果,并將讀取的數據檢測結果存入內存變量中;
步驟T4、將步驟T3中讀取的數據檢測結果與步驟T2中寫入的數據檢測值進行比較,若讀取的數據檢測結果與寫入的數據檢測值不一致,則報告CPU故障,將初始數據值恢復到上述的CPU通用數據寄存器中并退出檢測,否則,跳轉至步驟T5 ;
步驟T5、將上述步驟T2中的數據檢測值取反,以得到取反數據檢測值;將所述取反數據檢測值寫入上述的CPU通用數據寄存器中;
步驟T6、讀取上述CPU通用數據寄存器中的值,以得到取反數據檢測結果,并將讀取的取反數據檢測結果存入內存變量中;
步驟T7、將步驟T5中讀取的取反數據檢測結果與步驟T5中寫入的取反數據檢測值進行比較,若讀取的取反數據檢測結果與寫入的取反數據檢測值不一致,則報告CPU故障,將初始數據值恢復到上述的CPU通用數據寄存器中并退出檢測,否則,跳轉至步驟T8 ;
步驟T8、對CPU內其余的CPU通用數據寄存器重復上述步驟T2~步驟Τ8的檢測操作,直至CPU內所有的CPU通用數據寄存器均通過檢測。
[0007]執(zhí)行對CPU指令的運行檢測包括算術指令、邏輯指令、移位指令、比較指令、跳轉指令或芯片專用指令。
[0008]使用匯編指令“MOV”實現(xiàn)將地址檢測值以及取反地址檢測值寫入CPU通用地址寄存器內,且使用匯編指令“MOV”讀取CPU通用地址寄存器內的值,以分別得到地址檢測結果以及取反地址檢測結果。
[0009]使用匯編指令“MOV”實現(xiàn)將數據檢測值以及取反數據檢測值寫入CPU通用數據寄存器內,且使用匯編指令“MOV”讀取CPU通用數據寄存器內的值,以分別得到數據檢測結果以及取反數據檢測結果。
[0010]本發(fā)明的優(yōu)點:對CPU的檢測與CPU的實際工作情況相符合,使得對CPU的檢測更有效與充分,操作方便,適應性好,安全可靠。
【具體實施方式】
[0011]下面結合具體實施例對本發(fā)明作進一步說明。
[0012]為了實現(xiàn)對CPU的有效檢測,能使得CPU檢測更加充分完整,提高檢測的適應性,本發(fā)明在關閉CPU的中斷使能后,執(zhí)行對CPU指令的運行檢測;在執(zhí)行CPU指令運行檢測時,確定需要在CPU上運行的檢測指令輸入以及與每個檢測指令輸入在運行后對應的檢測期望,若在CPU上運行檢測指令輸入的檢測輸出與對應的檢測期望不一致時,則報告CPU故障且退出對CPU的檢測,否則,確定CPU檢測正常。
[0013]具體地,為了避免在實施CPU檢測過程中被中斷程序打斷,則需要在關閉CPU的中斷使能后,再實施對CPU的檢測操作。關閉CPU中斷使能的過程為本技術領域人員所熟知,具體不再贅述。在具體實施過程中,不同CPU的結構,但無論CPU是采用何種結構,CPU均有指令運行能力,即均需要對CPU指令進行運行檢測。
[0014]在對CPU指令進行運行檢測時,需要設計或確定檢測指令輸入以及每個檢測指令輸入對應的檢測期望,檢測指令輸入與檢測期望呈一一對應關系,設計或確定檢測指令輸入以及每個檢測指令輸入對應的檢測期望的過程為本技術領域人員所熟知,具體不再贅述。若所有的檢測指令輸入與對應的檢測期望均一致時,則能確定CPU指令的運行檢測正常,只要有一個檢測指令輸入與對應的檢測期望不能對應時,則即報告CPU故障,然后退出CPU的檢測。
[0015]具體實施時,對CPU指令進行運行檢測采用C語言和匯編語言混編方式實現(xiàn),對應檢測指令輸入的設置和檢測輸出的檢測可以采用C語言編程,操作比較方面。對于指令運行可以采用匯編語言,只運行指令相關的匯編,減少干擾。若需要中斷保護,則在檢測每條檢測指令輸入之前關中斷使能,檢測完成之后開中斷使能。
[0016]執(zhí)行對CPU指令的運行檢測包括算術指令、邏輯指令、移位指令、比較指令、跳轉指令或芯片專用指令。其中,算術指令包括加法、減法、自增、自減、乘法等指令;邏輯指令包括與、或、非、異或等指令;移位指令包括算術右移、邏輯左移、邏輯右移、循環(huán)左移、循環(huán)右移等指令;檢測比較指令包括大于、等于、小于等指令;跳轉指令包括無條件跳轉、各有條件跳轉、調用等指令;芯片的專用指令檢測,如讀取中斷標志等指令。