嵌入式系统的全程喂狗方法

文档序号:6458723阅读:944来源:国知局
专利名称:嵌入式系统的全程喂狗方法
技术领域
本发明涉及嵌入式系统的失效恢复方法,尤其涉及一种看门狗全程喂狗方法。
技术背景在嵌入式系统中,为了使系统在异常情况下能自动恢复, 一般都会引入硬件看门 狗电路。硬件看门狗本身并不能解决系统出现的问题,它只是有助于系统在出现异常 状况时可自动恢复正常工作状态。硬件看门狗其实就是一个计数器,当硬件看门狗启动后,计数器开始自动计数,经过一定时间计数器溢出就会对CPU产生一个复位信号使系统重启。系统正常运行时需要在硬件看门狗允许的时间间隔内对看门狗计数器清 零,不让复位信号产生,这即是喂狗动作。目前嵌入式系统喂狗方法一般都是在设备启动阶段禁用看门狗,设备启动后程序 运行时再启用看门狗。这是由于设备启动时间一般都大于硬件看门狗的时间间隔,如 果此阶段不禁用看门狗,则设备启动无法成功。问题是如果在设备启动阶段系统出现 故障,系统则无法恢复。如何在嵌入式系统设备启动和程序运行时都正确启用看门狗 以实现系统全过程失效恢复,是一个待解决的技术问题。发明内容技术问题为了解决以上问题,本发明涉及一种看门狗电路设计及在嵌入式系 统设备启动和程序运行时都启用看门狗以实现系统全过程失效恢复的方法。技术方案本发明采用IMP706芯片组成硬件看门狗电路(看门狗的时间间隔为 1.6秒),硬件看门狗电路的WDI 口通过电平转换器件与中央处理器的GPI03 口相连, 硬件看门狗电路的RESETJ)UT 口与中央处理器的RESET 口相连。嵌入式系统全过程喂 狗策略是嵌入式系统看门狗电路设计和从设备启动阶段到程序运行阶段的看门狗喂 狗策略,即硬件看门狗器件IMP706的WDI 口与中央处理器(CPU)UO的GPI03 口相连, 在BootLoader阶段、内核1阶段、内核2阶段、内核3阶段、程序运行阶段都插入 喂狗程序进行喂狗动作,这些喂狗程序的运行时间间隔为1秒。在设备启动和程序运行的不同阶段喂狗实现方法不同在BootLoader阶段采用 直接取反中央处理器的GPI03 口寄存器值的方法;在Linux内核1阶段采用直接取反 中央处理器的GPI03 口寄存器值的方法;在Linux内核2阶段釆用调用GPIO的驱动 的方法;在Linux内核3阶段采用调用WATCHDOG驱动的方法;在应用程序运行阶段, 采用调用WATCHDOG驱动的方法。这些方法的实质都是使看门狗计数器清零,不产生 复位信号。有益效果全过程启用看门狗,确保系统在任一阶段出现软件或硬件故障都能复 位重启,系统可靠性得到全面提高;看门狗电路简单,硬件只需一块看门狗芯片,不 需复杂的外围电路,有效降低成本;


图l是本发明的总体框图。图2是本发明的看门狗电路原理图。图3是本发明的多线程应用程序喂狗流程图。
具体实施例方式下面结合附图和实例对本发明作进一步说明。图1本发明的总体框图表明了嵌入式系统的喂狗过程和各阶段的喂狗方法。喂狗 过程分两个阶段设备启动阶段和程序运行阶段。设备启动阶段分BootLoader阶段、 内核1阶段、内核2阶段、内核3阶段,程序运行阶段包括多线程各任务的运行。在 各阶段喂狗程序的调用方法不同在BootLoader阶段采用直接取反中央处理器的 GPI03 口寄存器值的方法,不断使看门狗计数器清零;在Linux内核l阶段也采用直 接取反中央处理器的GPI03 口寄存器值的方法,不断使看门狗计数器清零;在Linux 内核2阶段采用调用GPIO的驱动的方法;在Linux内核3阶段釆用调用WATCHDOG驱 动的方法;在应用程序运行阶段,采用调用WATCHDOG驱动的方法。这些方法的实质 都是使看门狗计数器清零,不产生复位信号。如图2看门狗电路原理图,本发明采用IMP706芯片Ul组成硬件看门狗电路(看 门狗的时间间隔为1. 6秒),硬件看门狗器件的TOI 口与中央处理器(CPU)UO的GPI03 口相连。电平转换器件U2为74AVC1T45 (视不同的CPU可省略U2器件)。CPU的GPI03 脚与电平转换器件U2的4脚Bl连接,提供1. 8V的电平,电平转换器件U2的3脚与看门狗器件Ul的6脚连接,对Ul的WDI脚提供看门狗复位信号,看门狗器件Ul的1 脚与4脚接到复位开关,看门狗器件Ul的7脚接到CPU的复位管脚,当复位开关被 触动或看门狗器件Ul的计数器溢出,看门狗器件Ul的7脚输出复位信号给CPU的 RESET 口, CPU复位重启。嵌入式系统全过程喂狗方法详细过程如下-在BootLoader (本发明采用U-boot但不限于此)阶段喂狗的策略是在BootLoader 的程序中不同位置插入喂狗程序,这些不同位置程序其运行时间相隔一定时间(小于 看门狗的时间间隔,典型值为l秒)。具体做法是,首先在BootLoader第一阶段即汇 编中插入喂狗代码,然后在BootLoader第二阶段Flash读写、CRC校验、循环等待等 处插入喂狗代码。喂狗代码采用直接置位中央处理器的GPI03口寄存器值的方式进行。在Linux内核(本发明采用MontaVista Linux操作系统但不限于此)加载阶段 喂狗策略是在Linux内核程序的不同位置插入喂狗程序,这些不同位置程序其运行时 间相隔一定时间(小于看门狗的时间间隔,典型值为1秒)。具体做法是,首先在Linux 内核1阶段的内核解压縮程序、GPIO驱动加载程序适当代码处插入喂狗代码,喂狗代 码调用直接取反中央处理器的GPI03 口寄存器值的方式进行;在Linux内核2阶段的 各类设备驱动加载、WATCHDOG驱动加载程序适当代码处插入喂狗代码,喂狗代码调用 GPIO驱动,GPIO驱动内含取反中央处理器的GPI03 口寄存器值的操作;在Linux内 核3阶段的内核RTC驱动加载程序、加载根文件系统程序、init程序的适当代码处调 用Linux的WATCHDOG驱动,WATCHDOG驱动内含GPIO驱动。图3为多线程应用程序运行阶段喂狗方法。在主程序中首先创建一个监控线程, 它的优先级高于其他线程。监控线程在其他被监控的线程正常工作的情况下, 一定时 间内对看门狗进行喂狗操作,喂狗操作通过调用WATCHDOG驱动来完成。如果某个线 程出现故障,监控线程就不执行喂狗操作,也就达到这个线程出现故障时系统自动重 启的目的。如果监控线程自身出现故障,不能及时执行喂狗操作,看门狗也自动复位 重启。具体做法是,主程序首先启动监控线程,然后依次启动多个被监控的线程,每 一线程内都设置一计数器。被监控的线程中首先对线程内的计数器初始化为O,在各 个线程主循环中,对相应的计数器执行加1操作。监控任务每隔若干秒对各线程内的 计数器进行检验,查询计数器值是否为0,如果不为0,则说明对应接受监控的线程 正常运行,然后对看门狗喂狗,系统就不会复位。如果有任意一个计数器值为0,检测到 对应接受监视的线程出现故障需要重启,这时不对看门狗喂狗,使得系统复位重启。
权利要求
1.一种嵌入式系统的全程喂狗方法,其特征在于嵌入式系统看门狗电路设计和从设备启动阶段到程序运行阶段的看门狗喂狗策略,即硬件看门狗器件IMP706的WDI口与中央处理器(CPU)U0的GPIO3口相连,在BootLoader阶段、内核1阶段、内核2阶段、内核3阶段、程序运行阶段都插入喂狗程序进行喂狗动作,这些喂狗程序的运行时间间隔为1秒。
2. 根据权利要求1所述的嵌入式系统看门狗的全程喂狗方法,其特征在于在设备 启动和程序运行的不同阶段喂狗实现方法不同在Boo1;Loader阶段采用直接取反中 央处理器的GPI03 口寄存器值的方法;在Linux内核1阶段采用直接取反中央处理器 的GPI03 口寄存器值的方法;在Linux内核2阶段采用调用GPI0的驱动的方法;在 Linux内核3阶段采用调用WATCHDOG驱动的方法;在应用程序运行阶段,采用调用 WATCHDOG驱动的方法。这些方法的实质都是使看门狗计数器清零,不产生复位信号。
全文摘要
嵌入式系统的全程喂狗方法涉及嵌入式系统的失效恢复方法,嵌入式系统看门狗电路设计和从设备启动阶段到程序运行阶段的看门狗喂狗策略,即硬件看门狗器件IMP706的WDI口与中央处理器(CPU)U0的GPIO3口相连,在BootLoader阶段、内核1阶段、内核2阶段、内核3阶段、程序运行阶段都插入喂狗程序进行喂狗动作,这些喂狗程序的运行时间间隔为1秒。该方法可对嵌入式系统运行的全过程进行有效的失效恢复,提高了系统可靠性。
文档编号G06F11/00GK101271414SQ200810024778
公开日2008年9月24日 申请日期2008年5月6日 优先权日2008年5月6日
发明者张长顺, 赵新荣, 陆永刚, 黄建元 申请人:江苏东大金智建筑智能化系统工程有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1