具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
图1为本发明实施例中用于记录设备重启原因的装置的优选示例性结构示意图。参见图1,该装置包括:CPU 10、逻辑芯片11、存储阵列12、第一看门狗13以及第二看门狗14。
其中,第一看门狗13用于在设备上电启动之后,输出第一复位信号以触发设备全局复位。
第二看门狗14用于在设备上电启动之后,输出第二复位信号以触发记录设备重启原因是掉电重启。
逻辑芯片11,用于根据第一复位信号生成CPU复位信号,将该CPU复位信号输出至CPU 10,根据第二复位信号将存储阵列12中记录的重启原因初始值修改为表示掉电重启的数值。
CPU 10,用于根据逻辑芯片11输出的CPU复位信号进行重启,并在启动完成后读取存储阵列12中记录的表示掉电重启的数值,根据读取的数值识别设备重启原因是掉电重启,然后将存储阵列12所记录的表示掉电重启的数值重设为该重启原因初始值。
具体的,所述的存储阵列12可以是固化在逻辑芯片11内部的存储阵列。本文所述的“固化的存储阵列”,是指逻辑芯片11依据逻辑程序在其内部构建形成的存储阵列、或称之为具存储功能的逻辑电路,其可以是具有锁存功能的寄存器或其他任一种存储逻辑。由于该逻辑芯片11中的逻辑程序不会由于掉电而丢失,因而该存储阵列中的数据就不会由于掉电而丢失。
此外,所述的存储阵列12还可以是逻辑芯片11的片外存储阵列。
在实际应用中,所述的逻辑芯片11可以为复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device),或者其他类型的逻辑芯片。
下面以CPLD作为逻辑芯片为例对本发明的用于记录设备重启原因的装置进行详细说明。
图2为本发明实施例中用于记录设备重启原因的装置的一种具体逻辑结构示意图。参见图2,本实施例中用于记录设备重启原因的装置包括:CPU20、CPLD 21、第一看门狗22以及第二看门狗23。
其中,CPLD 21内部包括第一喂狗模块211、复位触发模块212、存储阵列213以及修改模块214。
在设备上电启动后,第一看门狗22检测到设备已经启动,则向CPLD 21的复位触发模块212输出第一复位信号RST1,以触发整个设备的全局复位。
复位触发模块212,用于接收第一看门狗22输出的第一复位信号RST1,生成CPU复位信号并将CPU复位信号输出至所述CPU,以控制CPU 20执行重新启动。
CPU 20完成启动后,输出喂狗信号WDI 1至CPLD 21的第一喂狗模块211,以使第一喂狗模块211输出喂狗信号WDI 2至第一看门狗22,从而实现对第一看门狗22的喂狗操作。
也就是说,CPLD 21在CPU 20的控制下向第一看门狗22输出喂狗信号WDI 2。即,CPU 20定期向CPLD 21的第一喂狗模块211输出喂狗信号WDI 1,将第一喂狗模块211中的计数器清零。第一喂狗模块211在其计数器不溢出的情况下定期向第一看门狗22输出喂狗信号WDI 2,将第一看门狗22中的计数器清零,使第一看门狗22中的计数器不会溢出。
在设备上电启动后,第二看门狗23检测到设备已经启动,则向CPLD 21输出第二复位信号RST2,触发CPLD 21的修改模块214将存储阵列213中记录的重启原因初始值修改为表示掉电重启的数值。因此,设备的重启原因被记录为掉电重启。
由于设备上电后,CPLD 21需要对存储阵列213中的重启原因初始值进行修改,因此需要有足够长的时间确保CPLD 21本身上电稳定后可以在正常工作的状态下记录该数值。譬如:第一看门狗22和第二看门狗23可以在系统电源稳定后输出大约200ms的低脉冲。这样,CPLD 21有足够的时间进行记录。
基于上内容,第一看门狗22检测到设备上电后输出第一复位信号RST1以触发设备的全局复位。第二看门狗23监测到设备上电后输出第二复位信号RST2以触发CPLD将重启原因初始值修改成表示掉电重启的数值。在每次启动后,CPU20读取存储阵列213中的重启原因初始值。由于该初始值已经被CPLD21修改成表示掉电重启的数值,所以CPU20在读取存储阵列213该初始值时,从存储阵列213中读取到的是表示掉电重启的数值;CPU20根据读取到的表示掉电重启的数值将设备重启原因识别为掉电重启。之后,CPU20将存储阵列213中记录的该表示掉电重启的数值修改成该初始值。这样,可以继续通过将该初始值修改成其他表示掉电重启原因的数值的方式,记录设备的其他重启原因,进一步通过读取到的其他表示掉电重启原因的数值,识别其他的设备重启原因。由于第二看门狗23通过电平检测的方式输出第二复位信号RST2,因此不需要对第二看门狗23进行喂狗操作。
本实施方式中,第一看门狗22输出的第一复位信号RST1与第二看门狗23输出的第二复位信号RST2同步;或者,第一看门狗22输出的第一复位信号RST1晚于第二看门狗的23输出第二复位信号RST2。
本发明除了能够记录掉电重启事件之外,还可以进一步记录并识别CPU异常重启、和/或软件重启等其他重启原因。
图3为本发明实施例中用于记录设备重启原因的装置的另一具体逻辑结构示意图。参见图3,本实施例的用于记录设备重启原因的装置包括:CPU30、CPLD 31、第一看门狗32、以及第二看门狗33。
其中,CPLD 31包括:第一喂狗模块311、复位触发模块312、存储阵列313以及修改模块314。
当CPU 30处于正常状态时,CPU 30定期向CPLD 31的第一喂狗模块311输出喂狗信号WDI 1,将第一喂狗模块311中的计数器进行清零。第一喂狗模块311收到来自CPU 30的喂狗信号WDI 1,因此第一喂狗模块311中的计数器被定期清零。当CPU 30处于异常状态(如CPU上执行的软件发生死循环)时,CPU 30停止向第一喂狗模块311输出喂狗信号WDI 1。进一步,当第一喂狗模块311的计数器的计数值到达第一阈值时,触发修改模块314将存储阵列313中记录的重启原因初始值修改为表示CPU处于异常状态的数值。修改模块314将存储阵列313中的该初始值修改成表示CPU处于异常状态的数值。由此,设备的重启原因被记录为CPU异常重启。当第一喂狗模块311的计数器的计数值到达第二阈值而溢出时,第一喂狗模块311停止向第一看门狗32输出喂狗信号WDI 2。
由上述描述可知,触发修改存储阵列313中初始值的第一阈值小于并且接近CPLD 31中计数器溢出所需的第二阈值。这样,在第一喂狗模块311在停止向第一看门狗32输出喂狗信号WDI 2之前,先触发修改模块314在存储阵列313中记录表示CPU异常重启的数值。
譬如:第一阈值可以为28秒,第二阈值可以为30秒。第一喂狗模块311中的计数器每秒钟加1,当该计数器的计数值到达28时,第一喂狗模块311触发修改模块314对存储阵列313中表示设备重启原因的初始值进行修改;当该计数器的计数值到达30时,计数器溢出,即溢出时间为30秒。因此,第一喂狗模块311在未收到来自CPU 30的喂狗信号WDI 1的时间到达28秒时,触发修改模块314修改存储阵列313中记录的重启原因的初始值。当第一喂狗模块311未收到喂狗信号WDI 1的时间到达30秒时,则第一喂狗模块311停止向第一看门狗32输出喂狗信号WDI 2。
设备上电之后,第一看门狗32输出第一复位信号至所述复位触发模块312以触发设备的全局复位并且接收来自所述第一喂狗模块311的喂狗信号WDI 2。当第一看门狗32在溢出时间内没有收到喂狗信号WDI 2时,第一看门狗32向CPLD 31的复位触发模块312输出第一复位信号RST1,第一看门狗32溢出并且输出第一复位信号RST1至所述复位触发模块312。
复位触发模块312接收第一看门狗32输出的第一复位信号RST1,生成并输出CPU复位信号至CPU 30,以控制CPU 30的重新启动。
CPU 30每次完成启动后,读取存储阵列313中记录的表示设备重启原因的数值。由于该初始值已经被修改为表示CPU异常重启(CPU处于异常状态)的数值,CPU 30完成启动之后从存储阵列313读取到的将是表示CPU异常重启的数值,CPU 30根据读取的数值识别设备的重启原因是CPU异常重启。之后,CPU 30将存储阵列313中记录的表示CPU异常重启的数值设置为初始值。
图3所示的其他部件或模块的其他功能与图2中对应的部件或模块相同,在此不再赘述。
另外,图3所示的装置可以进一步识别设备的重启原因是软件重启。此时,CPU 30上所承载的软件能够主动重启。这些软件的重启会导致CPU 30也进行重启。由于CPU重启的时间短,并且修改存储阵列中存储的该初始值的时间接近第一喂狗模块311的溢出时间,因此CPU重启时间小于上述第一阈值。CPU 30重启之后,CPU 30会在该初始值被修改之前,继续输出上述喂狗信号WDI 1至第一喂狗模块311(第一喂狗模块31不会触发该修改模块314修改存储阵列314中的初始值)。CPU 30从存储阵列314中读取该初始值,并根据读取的初始值识别设备的重启原因是软件重启。
这样,除了记录并识别设备的掉电重启之外,本发明实施例还可进一步记录并识别CPU异常重启、和/或软件重启等其他重启原因。从而能够准确地区分这几类的设备重启原因,以便准确定位设备故障的准确定位。
对于需要记录多种重启原因的情况,本发明实施例如图2和图3中所示出的CPLD内的存储阵列可以包括可锁存至少2比特数据的寄存器。
以位宽为2比特的寄存器为例,假设该寄存器的2比特的初始值为“11”,则:
当设备上电重启后,第二看门狗触发CPLD中的修改模块将存储阵列中寄存器锁存的表示设备重启原因的初始值“11”修改为数值为“00”,用于表示设备重启原因为掉电重启。
当设备中CPU工作异常而停止向CPLD中的第一喂狗模块输出喂狗信号的时间到达第一阈值时,CPLD中的修改模块将存储阵列中寄存器锁存的表示设备重启原因的初始值“11”修改数值“10”,用于表示设备重启原因为CPU异常重启。
当软件异常时,存储阵列中寄存器存储的表示设备重启原因的初始值“11”未被改变,用于CPU在重启后根据从寄存器中读取的初始值识别设备重启原因为软件重启。
对应本发明实施例所提供的装置,本发明实施例进一步提供了一种记录设备重启原因的方法。
图4为本发明实施例中一种记录设备重启原因的方法的流程图。如图4所示,该方法包括以下步骤。
步骤401,设备上电启动后,第一看门狗和第二看门狗分别输出第一复位信号和第二复位信号至CPLD。
步骤402,CPLD接收该第一和第二复位信号,根据第一复位信号生成并输出CPU复位信号至CPU,根据第二复位信号将存储阵列中记录的重启原因初始值修改为表示掉电重启的数值。
步骤403,CPU接收CPU复位信号,根据接收的CPU复位信号进行重启后,读取存储阵列中记录的表示掉电重启的数值,根据读取的数值识别设备的重启原因是掉电重启,之后将该数值重设为该初始值。
在每次启动后,CPU读取存储阵列中的重启原因初始值。由于该初始值已经被修改成表示掉电重启的数值,所以从存储阵列中读取到的是表示掉电重启的数值;CPU根据读取到的表示掉电重启的数值将设备重启原因识别为掉电重启。之后,CPU将存储阵列中记录的该表示掉电重启的数值修改成该初始值。
本发明实施例中记录设备重启原因的方法除了能够记录掉电重启事件之外,还可以进一步记录并识别CPU异常重启事件。
图5为本发明实施例中另一种记录设备重启原因的方法的流程图。如图5所示,该方法包括以下步骤:
步骤501,CPU定期输出喂狗信号WDI 1至CPLD。当CPU上运行的软件发生死循环时,CPU停止向CPLD输出的第一喂狗信号。
步骤502,CPLD接收CPU输出的喂狗信号WDI 1,以在CPU的控制下输出喂狗信号至第一看门狗,从而对第一看门狗执行喂狗操作。当CPLD未收到喂狗信号WDI 1的时间到达第一阈值时,CPLD将存储阵列中记录的重启原因的初始值修改为表示CPU异常重启的数值,并且CPLD在未收到喂狗信号WDI 1的时间到达第二阈值时,停止向第一看门狗输出喂狗信号WDI 2。
步骤503,第一看门狗在未收到喂狗信号WDI 2的时间到达第三阈值时,向CPLD输出第一复位信号以触发设备全局复位。
步骤504,CPLD接收该第一复位信号,根据接收的第一复位信号生成并输出CPU复位信号至CPU;CPU根据接收的CPU复位信号进行重启后,读取存储阵列中记录的表示设备重启原因的数值,并以读取的数值识别的设备的重启原因是CPU异常重启,之后CPU再将该数值设置为初始值。
CPU每次完成启动后,读取存储阵列中记录的表示设备重启原因的数值。由于该初始值已经被修改为表示CPU异常重启(CPU处于异常状态)的数值,CPU完成启动之后从存储阵列读取到的将是表示CPU异常重启的数值,CPU根据读取的数值识别设备的重启原因是CPU异常重启。之后,CPU将存储阵列中记录的表示CPU异常重启的数值设置为重启原因初始值。
步骤505,CPU上软件的主动重启导致CPU重启,CPU在重启完成之后从存储阵列中取到用于重启原因初始值时,根据读取的该初始值将设备的重启原因识别为软件重启。
由于CPU上承载的软件能够主动重启,并且这种主动导致了CPU的重启,通过上述步骤505,本发明实施例的方法可以进一步记录并识别设备的软件重启事件。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。
基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。