watchdog的正确用法

关于watchdog应该有过单片机学习经历的人,都比较熟悉。但watchdog的正确用法,恐怕大家如果没有经历过实际产品的开发不会有深入的理解。

瑞萨RL78系列的单片机自身带有watchdog,当启用watchdogtimer定时器后,在watchdog timer溢出时间间隔的75%会产生watchdog中断。至于在watchdog中做什么,好多示例程序,都会在中断处理函数中喂狗,使watchdog timer重新开始计时。

实际的喂狗程序应该在watchdog的中断处理函数中吗?如果在,有什么样的效果?如果不应该在,喂狗程序应该放在哪儿,中断处理函数中又应该做什么?下面一一来解答。

假如喂狗程序只在watchdog的中断处理函数中,当然重新启动watchdog timer的目的达到了,由于watchdogtimer溢出产生的复位也避免了。但是,watchdog本身存在的价值已经失去了。Watchdog存在的意义是监测程序中的非法循环以及程序是否跑飞。假设程序已经陷入了非法循环中不能退出,或者程序已经跑飞。Watchdog timer的定时中断还会正常工作,所以喂狗程序还能够正常执行。只是中断函数执行完之后,程序的返回点还是非法循环,或者是跑飞的非法指令。这个大家可以在其他MCU中写程序,打断点调试一下。

既然,喂狗程序不能放在watchdogtimer的定时中断中,应该放在哪儿呢。首先,来一个知识的正向迁移,watchdog timer的定时中断执行的机制是所有中断都遵循的机制,这个中断的中断处理函数中喂狗不能达到目的,当然其他定时中断处理函数中也是一样的道理。正确的喂狗程序需要放入main函数的主循环中,喂狗的时间间隔需要考虑主循环所有可能分支耗时最大的那个。也即,watchdog timer的溢出时间大于所有分支的最大耗时,喂狗时间间隔小于所有分支的最大耗时。

返回到最后一个问题,watchdog timer定时中断的中断处理程序应该做些什么,和普通定时器的用法一样,提供一个较为精确的定时时间间隔。比如在ucosII向RL78/G14的移植中,可以将watchdog timer定时中断作为操作系统的时钟节拍。

watchdog的正确用法

时间: 2024-11-08 12:22:07

watchdog的正确用法的相关文章

MySQL触发器的正确用法

一.创建触发器的基本语法: CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 触发器语句 触发事件包括:INSERT.UPDATE.DELETE 二.正确案例演示 如果想在sql文件中直接创建触发器,下面为一个完整的sql文件创建(含触发器的创建)示例: use mysql drop database if exists myTest; create database myTest default charset=gb2312; u

欧拉函数 BZOJ3884 上帝与集合的正确用法

3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1843  Solved: 862[Submit][Status][Discuss] Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α"."α"被定义为"元"构成的集合.容易

bzoj 3884 上帝与集合的正确用法 指数循环节

3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容易发现,一共有两种不同的“α”. 第三天, 上帝又创造了一个新的元素,称作“β”.“β”被定义为“α”构成的集合.容易发现

【转】改善C#程序的建议2:C#中dynamic的正确用法 空间

dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject();Console.WriteLine(dynamicObject.Name);Console.WriteL

【转】C#中dynamic的正确用法

原文:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = Get

C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod("Add");

dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject(); Console.WriteLine(dynamicObject.Name); Console.Writ

BZOJ 3884(上帝与集合的正确用法-欧拉函数递推找极限)[Template:数论 V2]

3884: 上帝与集合的正确用法 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 523  Solved: 237 [Submit][Status][Discuss] Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做"元". 第二天, 上帝创造了一个新的元素,称作"α"."α"被定义为"元"构成的集合.容

Spring MVC中Session的正确用法<转>

Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的设计模式遍及各处,使得其框架虽然学习曲线陡峭,但 一旦掌握则欲罢不能.初学者并不需要过多了解框架的实现原理,随便搜一下如何使用“基于注解的controller”就能很快上手,而一些书籍诸如 “spring in action”也给上手提供了非常优良的选择. 网上的帖子多如牛毛,中文的快速上手,英文的

C#中dynamic的正确用法

dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错: dynamic dynamicObject = GetDynamicObject();Console.WriteLine(dynamicObject.Name);Console.WriteL