关于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定时中断作为操作系统的时钟节拍。

最新文章

  1. kali 安装FTP服务器-vsftpd
  2. 高性能Java网络框架 MINA
  3. Java for LintCode 验证二叉查找树
  4. shell命令:给当前目录里一个文件压缩一份不包含.svn文件的zip包
  5. 【shell】while与until循环
  6. Config the Android 5.0 Build Environment
  7. [TSOI2005]Exhibit
  8. oracle学习笔记1:windows下oracle数据库安装及.net调用oracle数据库
  9. [转]C++实现系统服务暂停、停止、启动
  10. 北风风hadoop课程体系
  11. 性能测试之LoardRunner 手动关联二
  12. 笔记整理--socket_server
  13. Android调用系统图库返回路径
  14. win下jdk7环境变量的配置
  15. “吃神么,买神么”的第二个Sprint计划
  16. github push error ---- recursion detected in die handler
  17. JavaWeb -cookie&session&application
  18. hsqldb简单使用总结
  19. HashMap、LinkedHashMap和TreeMap对比
  20. 【BZOJ3879】SvT 后缀数组+单调栈

热门文章

  1. OpenCV —— 摄像机模型与标定
  2. C/C++(函数)
  3. gSOAP 使用WebServer心得
  4. ArcSDE:C#创建SDE要素数据集
  5. 矩阵乘法java代码实现
  6. 33.Node.js 文件系统fs
  7. Flume的可管理性
  8. android组件
  9. Vue 打包后报错 Uncaught TypeError: Cannot redefine property: $router
  10. 3/18 Django框架 启动django服务