历史上的今天
今天是:2024年12月18日(星期三)
2018年12月18日 | watchdog的正确用法
2018-12-18 来源:eefocus
关于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定时中断作为操作系统的时钟节拍。
史海拾趣
|
[时间] 2010/01/26 | 13:30 - 16:30 [地点] 苏州丽都大酒店5楼4号会议厅(苏州市干将西路168号) [主办公司] 美国国家仪器有限公司 [简介] NI LabVIEW + 数据采集的完美体验! &n ...… 查看全部问答> |
|
Linux内核的 Fec.c 接收函数中 收不到 bpdu包,怎么回事 我发送bpdu包(组播包),为什么在Fec的接受函数里收不到呢。 而广播包,还有目标Mac为板子的Mac的包可以接受到。 怎么回事,不懂? 请教达人帮忙!!!!!… 查看全部问答> |
|
我想在两个程序中使用同一个串口,由于不能使用CreateFile打开两次串口,所以需要使用同一个HANDLE,而直接使用这个HANDLE又不行,在PC上可以使用DuplicateHandle来进行一个拷贝,但是在CE上这个函数说只能拷贝Event、Mutex、Semaphore这三种类型的 ...… 查看全部问答> |
|
最近做了一块S3C2440的板子,程序从FLASH搬4K到2440内部的SRAM中初始化CPU,SDRAM后,(前4K代码运行正常,有指示灯显示),搬代码到SDRAM中,在SDRAM运行,就运行不了,程序跑飞,不知道为什么? &n ...… 查看全部问答> |
|
关于这个电路我想做个说明: 主要电路是变压器T极其分布电容,其工作原理图见http://photo.163.com/photos/qingjidanpianji/131797516/3575663836/,V1,V2组成反馈式振荡升压电路.其中T是稳压(随身听用)电源其规格是220V/3V/2W的变压器,兼作反馈元件, ...… 查看全部问答> |
|
最近正在用FE425做一个程序,用并口调试时读不到SD16的转换结果,但是同样的设置(只是把下载器设置改了一下)USB仿真器却可以读出来。为什么呢???… 查看全部问答> |




