本申请涉及看门狗领域,具体涉及一种看门狗电路及喂狗方法、设备。
背景技术:
看门狗电路用于监控程序运行状态。当程序运行正常时,看门狗输出高低变化的电平信号,当程序运行异常时,输出信号电平维持不变。当电平不变超过最大喂狗时间间隔后,看门狗电路产生低电平,该信号通常接入系统的复位引脚,使系统复位,退出异常状态。
现在常用的看门狗电路分为芯片内置和独立外置,但是现有的看门狗电路仍存在一些问题:
对于芯片内置的类型,内置的看门狗与系统时钟同源,在系统时钟异常时,存在无法复位的风险。而对于独立外置的类型,专用的外置看门狗芯片通常价格较高,导致成本高,且最大喂狗时间不可配置。
技术实现要素:
为了解决上述问题,本申请提出了一种看门狗电路,包括耦合模块、三极管、施密特触发器;所述耦合模块,包括第一电容,所述耦合模块的输入端用于接收相应程序发送的喂狗信号,输出端与所述三极管的基极连接;所述三极管,集电极与所述施密特触发器的输入端连接,所述集电极还与第二电容连接后接地,发射极接地;所述施密特触发器,输入端与所述第二电容连接后接地,输出端用于输出复位信号,所述施密特触发器还并联有第一电阻。
在一个示例中,所述三极管,集电极连接第二电阻后与所述施密特触发器的输入端连接;所述施密特触发器,通过第三电阻后输出复位信号,并通过所述第三电阻、第四电阻后与电源连接。
在一个示例中,所述第二电阻的电阻值远小于所述第一电阻、所述第三电阻、所述第四电阻的电阻值,所述远小于表示电阻值不属于同一数量级。
在一个示例中,所述相应程序为u-boot。
另一方面,本申请还提出了一种看门狗电路的喂狗方法,应用在如上述任意一个示例所述的看门狗电路中,所述方法包括:对计数器进行初始化,将当前喂狗次数设置为最大喂狗次数;执行虚拟喂狗动作,并根据所述虚拟喂狗动作递减所述当前喂狗次数;在定时器经过延时并超时中断后,通过中断服务程序监测本次定时器周期中,所述当前喂狗次数是否为0或所述最大喂狗次数;若是,则不反转喂狗信号的电平,不执行实际喂狗动作;否则,反转所述喂狗信号的电平,执行实际喂狗动作。
在一个示例中,所述方法还包括:通过所述中断服务程序将所述计数器对应的当前喂狗次数重置为所述最大喂狗次数;将所述定时器重装,以便于重新执行所述虚拟喂狗动作。
在一个示例中,对计数器进行初始化之前,所述方法还包括:使能cpu中断,并对定时器周期、中断优先级和中断向量进行配置,所述cpu为所述看门狗电路进行复位的系统的cpu,所述定时器周期小于所述看门狗电路的最大喂狗时间的1/2。
在一个示例中,使能cpu中断,并对定时器周期、中断优先级和中断向量进行配置之前,所述方法还包括:初始化喂狗引脚为推挽输出。
在一个示例中,所述方法是基于u-boot执行的。
另一方面,本申请还提出了一种看门狗电路的喂狗设备,应用在如上述任意一个示例所述的看门狗电路中,所述设备包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行:对计数器进行初始化,将当前喂狗次数设置为最大喂狗次数;执行虚拟喂狗动作,并根据所述虚拟喂狗动作递减所述当前喂狗次数;在定时器经过延时并超时中断后,通过中断服务程序监测本次定时器周期中,所述当前喂狗次数是否为0或所述最大喂狗次数;若是,则不反转喂狗信号的电平,不执行实际喂狗动作;否则,反转所述喂狗信号的电平,执行实际喂狗动作。
通过本申请提出看门狗电路以及喂狗方法能够带来如下有益效果:
相比于内置类型的看门狗芯片,本申请中具有独立外置的计时器,无需与系统时钟同源,即使系统时钟出现异常,也可以执行复位操作。相比于外置类型的看门狗芯片,由于采用的元器件成本较低,因此整体的价格相对于现有的外置看门狗芯片也较低。并且可以通过修改第一电阻r1及第二电容c2的值,来提高或降低c2充电速度,即可配置看门狗电路最大喂狗时间,十分便利。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例中看门狗电路的喂狗方法的流程示意图;
图2为本申请实施例中看门狗电路的喂狗设备的示意图;
图3为本申请实施例中看门狗电路的电路图;
图4为本申请实施例中看门狗电路的喂狗方法的具体流程图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
如图3所示,本申请实施例提供一种看门狗电路,包括:耦合模块、三极管、施密特触发器。
其中,耦合模块可以是rc耦合电路,其可以包括第五电阻r5和电容c1,第五电阻r5的一端用于接收相应程序发送的喂狗信号feed_dog,第五电阻r5的另一端与电容c1连接,电容c1的另一端与三极管q1的基极连接,而且电容c1的另一端也通过第六电阻r6后接地。
三极管q1的型号可以是任意一种适配的,例如附图3中所示的2n3904,当然也可以是其他型号。三极管q1的基极与电容c1的另一端连接,发射极接地,集电极与施密特触发器u的输入端连接。三极管q1的集电极还与第二电容c2连接后接地。当然,三极管的集电极可以在连接第二电阻r2后,再与施密特触发器的输入端连接。
施密特触发器,也可以叫做施密特反相器,是带有施密特触发功能的反相器,其输入端正跳变和负跳变的触发电平阈值不同。施密特触发器的输入端与第二电容c2连接后接地,输出端用于输出复位信号sys_reset,施密特触发器还并联有第一电阻r1。施密特触发器还可以通过第三电阻r3后输出复位信号,并通过第三电阻r3、第四电阻r4后与电源连接,输出端通过第三电容c3后接地。利用施密特触发器的特性,结合输入电容c2和反馈电阻r5,可在施密特触发器的输出端产生周期性低电平信号。将喂狗信号通过rc耦合电路接入施密特触发器的输入端,通过对施密特触发器的输入电容c2周期性充放电,可施密特触发器输入端维持在正跳变阈值以下,保证输出端不会产生低电平信号。
在本申请实施例中的看门狗电路工作时,具体的工作过程如可以是:
当无喂狗信号输入时,三极管q1的基级电平为0,三极管q1工作在截止状态。
当无喂狗信号输入时,第二电容c2两端电压初始值为0。此时施密特触发器u的输出端高电平3.3v,该电压驱动第四电阻r4、第三电阻r3、第一电阻r1产生电流对第二电容c2充电,第二电容c2两端电压逐渐升高。当第二电容c2电压达到施密特触发器u输入端的正跳变阈值电压时,输出端电平跳变为0,此时第二电容c2两端仍然维持高电压,该电压驱动第一电阻r1放电,第二电容c2电压开始降低。当第二电容c2电压低于施密特触发器的负跳变阈值电压后,施密特触发器u的输出端重新输出高电平。在此条件下,施密特触发器工作在振荡输出状态,输出端周期性输出低电平信号,系统会周期性复位。
当有喂狗信号输入时,feed_dog信号经过rc耦合电路,在三极管q1基级产生方波,该方波信号与feed_dog信号同相位。当feed_dog输入低电平时,三极管q1截止,电路工作在上述的振荡输出状态,第二电容c2周期性充放电。当feed_dog输入高电平时,三极管q1饱和导通,第二电容c2经过第二电阻r2和三极管q1放电,阻碍第二电容c2两端电压上升,使施密特触发器的输出端sys_reset维持高电平。此时,可以将第二电阻r2的电阻值设置为远小于第四电阻r4、第三电阻r3、第一电阻r1,如此可以使得第二电容c2放电速度慢,充电速度快,只要feed_dog占空比大于特定值,第二电容c2电压将维持在正跳变阈值以下,sys_reset信号将维持高电平,系统不会复位。这里的远小于指的是,电阻值不属于同一数量级。
当喂狗信号停止输入时,feed_dog将维持高电平或低电平或高阻态,经过rc耦合电路后,三极管q1基级电压始终为0v,处于截止状态,施密特触发器u重新进入振荡输出状态,系统周期性复位。
使用普通喂狗方法时,feed_dog的占空比难以控制,当低于特定值时,c2充电时间过长,放电时间过短,c2两端电压无法维持在正跳变阈值以下,反相器输出端输出低电平至sys_reset,会导致系统复位。而在本申请实施例中,通过修改第一电阻r1及第二电容c2的值,可以提高或降低c2充电速度,即可配置看门狗电路最大喂狗时间。其中,当第一电阻r1和第二电容c2增大时,最大喂狗时间增大;反之,第一电阻r1和第二电容c2减小时,最大喂狗时间减小。
在本申请实施例中,可以如图3所示,对各元件的参数进行如下设置:将第五电阻r5的阻值设置为1k,第六电阻r6的阻值设置为10k,第二电阻的阻值设置为300,第三电阻的阻值设置为2k,第四电阻的阻值设置为10k,第一电阻的阻值设置为1m。将第一电容c1的容量设置为1uf,第二电容c2的容量设置为4.7uf,第三电容c3的容量设置为1nf。当然,这只是本申请实施例中的一个示例,具体设置的数值可以根据实际的工作情况进行相应的更改。
在一个实施例中,用于触发喂狗信号的相应程序可以是u-boot。u-boot是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构。对于外置看门狗,u-boot下常用的喂狗方法是在顺序执行的代码中,估算时间间隔,对喂狗引脚进行反转电平的操作,同时在循环执行且时间较长的代码中,每个循环对喂狗引脚进行一次电平翻转。在代码频繁跳转的情况下,实际喂狗引脚的电平翻转频率和高低电平占空比呈现一定的随机性。在基于现有的看门狗电路的系统中,当占空比过低,即无效喂狗时间大于有效喂狗时间一定比例时,系统会复位,导致意外重启。而通过本申请实施例中的看门狗电路,由于施密特触发器的特性,可以有效提高系统可靠性。而且相当于外置看门狗芯片可以降低硬件成本,并且还可以灵活配置最大喂狗间隔时间,尤其适用于u-boot下的看门狗电路。
如图1和图4所示,本申请还提出了一种看门狗电路的喂狗方法,应用在如上述任意一个实施例所述的看门狗电路中,方法包括:
s101、对计数器进行初始化,将当前喂狗次数设置为最大喂狗次数。
在喂狗时,可以首先对喂狗引脚进行初始化设置,即喂狗gpio初始化,初始化喂狗引脚为推挽输出。然后使能cpu中断后,对定时器周期、中断优先级、中断向量等进行相应的配置,以便于后续进行喂狗动作。其中,这里的cpu指的是,看门狗电路用于复位的系统的系统的cpu。并且在设置定时器周期时,可以将定时器周期设置的小于看门狗电路的最大喂狗时间的1/2,如此可以保证在cpu正常运行时,能够正常的执行喂狗动作。
然后,在执行喂狗动作时,可以首先对计数器进行初始化,然后将当前喂狗次数counter设置为最大喂狗次数max。其中,这里的计数器通常为独立外置的,并且对于最大喂狗次数max的设置具有如下要求:当程序(在本申请实施例中以u-boot为例进行解释说明)正常运行时,每个定时器周期内实际的喂狗次数要小于最大喂狗次数max。
s102、执行虚拟喂狗动作,并根据所述虚拟喂狗动作递减所述当前喂狗次数。
在相应的配置完成后,可以首先使能定时器中断,以进行在本轮定时器周期内的虚拟喂狗动作。这里的虚拟喂狗动作指的是,并非实际执行喂狗动作,而是假设已经实际执行出喂狗动作。而在执行虚拟喂狗动作时,可以通过u-boot主函数来运行,并按照正常方法进行虚拟喂狗动作,并在执行虚拟喂狗动作的同时,将当前喂狗次数counter进行递减。在u-boot代码顺序执行及循环执行(如解压内核、读取或其他所需的耗时较长的循环操作)过程中,进行虚拟喂狗操作。这里的读取、解压及其他操作,都是可以u-boot中内置的程序实现,在此不再赘述。
s103、在定时器经过延时并超时中断后,通过中断服务程序监测本次定时器周期中,所述当前喂狗次数是否为0或所述最大喂狗次数。
在定时器进行一定延时后,达到并超过了预设的时长时,定时器会中断,此时本轮的定时器周期结束,可以通过中断服务程序来判断counter是否等于0或max。其中,这里的中断服务程序可以是能够起到相应功能的程序、脚本、代码等,中断服务程序可以内置在u-boot中,也可以是单独的程序,在此不再赘述。
需要说明的是,当定时器为独立外置时,系统时钟发生异常,不会影响定时器,系统可以正常复位。当定时器是cpu内置时,即使定时器为cpu内置,可能与系统时钟同源,但当系统时钟异常导致定时器异常时,cpu就不会执行定时器中断服务程序,即不会执行实际喂狗操作,所以系统也能正常复位。
s104、若是,则不反转喂狗信号的电平,不执行实际喂狗动作。
s105、否则,反转所述喂狗信号的电平,执行实际喂狗动作。
如果counter为0,则说明已经结束的本轮定时器周期内虚拟喂狗次数超过max,表明程序执行顺序超出预期,不反转feed_dog信号电平,也就是不执行实际喂狗动作。如果counter为max,则表明已经结束的本轮定时器周期内没有进行虚拟喂狗,此时也不反转feed_dog信号电平,也就是不执行实际喂狗动作。
如果counter是其他值,则可以执行实际的硬件喂狗操作feed_dog(),反转电路中的feed_dog信号电平,进行实际的喂狗动作。
在本轮的定时器周期结束后,可以通过中断服务程序将计数器的当前喂狗次数counter进行重置,重置为最大喂狗次数max,然后将定时器重装,以便于重新执行虚拟喂狗动作,来进行下一轮周期的喂狗动作。
如图2所示,本申请实施例还提供了一种看门狗电路的喂狗设备,应用在如上述任意一个实施例所述的看门狗电路中,所述设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行:
对计数器进行初始化,将当前喂狗次数设置为最大喂狗次数;
执行虚拟喂狗动作,并根据所述虚拟喂狗动作递减所述当前喂狗次数;
在定时器经过延时并超时中断后,通过中断服务程序监测本次定时器周期中,所述当前喂狗次数是否为0或所述最大喂狗次数;
若是,则不反转喂狗信号的电平,不执行实际喂狗动作;
否则,反转所述喂狗信号的电平,执行实际喂狗动作。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备和介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请实施例提供的设备和介质与方法是一一对应的,因此,设备和介质也具有与其对应的方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述设备和介质的有益技术效果。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。