[攻城狮计划(三)] —— 看门狗定时器

🙌秋名山码民的主页
😂一个打过一年半的oier,写过一年多的Java,现在致力于学习iot应用的普通本科生
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
🙏作者水平有限,如发现错误,还请私信或者评论区留言!

目录

  • 前言
  • 看门狗
    • 瑞萨R2E1
    • 具体实现
  • 最后


前言

🚀🚀开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯和 瑞萨MCU 联合发起的「 致敬未来的攻城狮计划 」的第 2 篇,点击查看活动计划详情

👍首先作为一个穷学生来说,很感谢有这次的机会能带我领略除C51和STM32板子以外开发板的机会,让我在空闲的时间内不仅能吸取很多知识,更能听取李老师作为企业级架构师的手把手敲代码的教学。

看门狗

看门狗的含义:当一切正常时,看门狗不会有什么反应,但是出现异常情况时,看门狗就会叫,并把异常情况阻挡在门外。

一般来说,看门狗我们也叫他看门狗定时器,从本质上面来看,其实它就是一个计数器,在使用的时候,我们需要给它一个数值,随后看门狗的计数器根据计数方向开始累计,在看门狗的计数器达到预设的数值之前,我们可以进行重置看门狗计数器的操作,简称“喂狗”。但当我们没有在计数器发生溢出之前进行及时喂狗的话,看门狗就会产生复位请求或者不可屏蔽中断请求(NMI-Non Maskable Interrupt)。

瑞萨R2E1

瑞萨R2E1的看门狗模块包括2个32位计数器, CNT 和 RST。CNT 计数器用于记录内部时钟计数, RST 计数器用于记录看门狗超时时间。当CNT 计数器的计数值达到 RST 计数器的值时,看门狗硬件将自动产生复位信号,重置系统。这个复位可以参考:单片机——复位操作详述

瑞萨R2E1看门狗模块的主要特点如下:

精度高:R2E1 的看门狗模块精度高,超时时间可设置为 0.16 秒到 8192 秒,同时还支持极精准的微秒级超时时间。

配置灵活:R2E1 看门狗模块具有多种配置模式,支持溢出、时间窗口等模式选择,并且在不同模式下还可设置不同的超时时间。

系统保护:看门狗模块可以保护系统在异常情况下的稳定运行,当系统出现死循环、死机等情况时,看门狗硬件可以及时地产生复位信号,重启系统。

低功耗:R2E1 看门狗模块具有低功耗特性,可以有效地提高系统电量使用效率。

值得注意的是,看门狗模块虽然可以保护系统运行,防止死机现象,但也可能带来一定的安全风险。如果看门狗定时器设置过短,容易误判系统出现问题,直接重启系统。因此,在设计系统时,需要认真选取看门狗超时时间,并采用恰当的检测机制,确保其能够正确地监控系统状态,而不会对系统的正常运行产生负面影响。

具体实现

硬件方面,看门狗模块一般由一个计数器和一个输出/复位电路组成,计数器每隔一定时间加1,如果系统正常运行,软件会在计数器加1的过程中定时清除计数器的值,这样可以保证计数器一直处于计数中,当系统出现故障导致软件不能正常清除计数器时,当计数器的计数值达到预先设定的阈值时,输出/复位电路会将系统复位,重启系统,从而达到保护系统的效果。

软件方面,看门狗模块需要由程序员编写相应的代码实现,具体过程如下:

  1. 初始化看门狗模块,包括设置看门狗定时器的超时时间和模式等参数。
  2. 在主程序中定时清除看门狗定时器计数器的值,以免定时器超时导致系统复位。
  3. 若代码进入死循环等非正常状态,导致主程序无法正常执行,程序无法清除看门狗计数器的值,看门狗定时器会在特定时间后超时,产生复位信号,重启系统。
  4. 在软件中加入容错机制,保证程序正常运行,如加入异常处理代码,避免程序出错导致系统复位。

代码实现

#include "r2e1.h"

WDT.WTCNT = WDT_CNT_VALUE;     //设置看门狗计数值
WDT.WTCSR.BIT.OVFINT = 0;      //禁止溢出中断
WDT.WTCSR.BIT.WTIT = 0;        //禁止计数器超时中断
WDT.WTCSR.BIT.WOVWE = 0;       //禁止写入看门狗计数器
WDT.WTCSR.BIT.WTIS = 2;        //设置看门狗计数器时钟源

WDT.WTCSR.BIT.CNTCLR = 1;   //定时清除计数器的值

#pragma interrupt INTWDTI(vect=VECT_WDTI)
void INTWDTI(void)
{
   WDT.WTCSR.BIT.CNTCLR = 1; //定时清除计数器的值
}

WDT.WTCSR.BIT.WDTE = 0;   //关闭看门狗模块

当看门狗定时器达到预设的超时时间时,会产生看门狗中断,并自动复位系统。同时也可以通过设置看门狗模块的 RSTEN 位实现看门狗产生复位信号直接重启系统。

最后

如果本文对你有所帮助,还请三连支持一下博主!
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/9398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双非二本如何入职腾讯?只需要做好这些准备就能进大厂?

每年的招聘旺季在“金三银四”和“金九银十”这2段时间,许多在春招中没有找到心仪大厂offer的测试小伙伴最近有私信我,想要了解如何在秋招中一举获得心仪大厂的青睐,那今天我就来和大家扒一扒那些大厂自动化测试面试题以及注意事项哦&#xf…

Python解题 - CSDN周赛第43期

感觉周赛越来越无趣了,基本都是考过的题目。上期周赛也是,4道题都曾考过,问哥也都写过题解,奖品也不吸引人,实在没什么好写了。 回想前段时间用力过猛,刷了C站大部分OJ题,以致于现在看到题目就直…

Elasticsearch:索引状态是红色还是黄色?为什么?

在我之前文章 “Elasticsearch:如何调试集群状态 - 定位错误信息” 中,我有详细介绍如何调试集群状态。在今天的文章中,我将详细介绍如何故障排除和修复索引状态。 Elasticsearch 是一个伟大而强大的系统,特别是创建一个可扩展性极…

MySQL函数、视图、存储过程及触发器

前言 MySQL在我们工作中都会用到,那么我们最常接触的就是增删改查,而对于增删改查来说,我们更多的是查询。但是面试中,面试官又不会问你什么查询是怎么写的,都是问一些索引啊,事务啊, 底层结构…

Hbase 介绍

Hbase 简介 Hbase 是一个开源的非关系型的分布式数据库,运用于HDFS文件系统之上,可以容错地存储海量稀疏的数据。Hbase是一个高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库,主要用来存储非结构化和半结构化的松散数据 。 Hbase的…

ChatGPT中文在线官网-如何与chat GPT对话

怎么下载ChatGPT中文版 ChatGPT是一种基于Transformer架构的自然语言处理技术,其中包含了多个预训练的中文语言模型。这些中文ChatGPT模型大多数发布在Github上,可以通过Github的源码库来下载并使用,包括以下几种方式: 下载预训练…

高并发写场景:库存扣减

在设计商品的库存扣减逻辑时&#xff0c;可能一开始想到的(伪)代码是&#xff1a; <?php /*** 商品库存扣减** param int $skuId 商品ID* param int $num 库存扣减数量** return bool 扣减成功返回true&#xff0c;失败返回false*/ function stock_decr($skuId, $num) {…

Go是一门面向对象编程语言吗

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;tonybai|慕课网讲师 Go语言已经开源13年了&#xff0c;在近期TIOBE发布的2023年3月份的编程语言排行榜中&#xff0c;…

【hello Linux】Linux基本指令(下)

目录 1. more 指令&#xff1a;分批查看文件 1.1 more -n 文件名&#xff1a;查看文件前 n 行 1.2 more 文件名&#xff1a;屏幕输满 补充指令&#xff1a; 2. less 指令 2.1 less -N 文件名 2.2 /字符串&#xff1a;向下搜索“字符串”的功能 3. head 指令 3.1 head 文件名 3…

4.Java逻辑控制语句

Java逻辑控制语句 在实际生活中&#xff0c;我们的生活不是一成不变的&#xff0c;很多时候需要我们去选择&#xff0c;大到人生的十字路口&#xff0c;小到今天晚上吃什么&#xff0c;选择无处不在。小的选择决定了我们一件小事的走向&#xff0c;大的选择可能会改变我们人生…

基于多目标粒子群优化算法的计及光伏波动性的主动配电网有功无功协调优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

JavaScript -- 对象

1. 概念 对象是 JavaScript 数据类型的一种&#xff0c;可以理解为是一种无序的数据集合 2. 对象的使用 2.1 对象的声明 let 对象名 {} let 对象名 new Object() 2.2 属性和方法 数据描述性的信息称为属性&#xff0c;如人的姓名、身高、年龄、性别等&#xff0c;一般是…

蓝桥杯之贪心

蓝桥杯之贪心1055.股票买卖II104.货仓选址AcWing112.雷达设备1235.付账问题1239.乘积最大K是奇数&#xff0c;需要转化为K是偶数的情况&#xff0c;于是先取一个数&#xff0c;为了使得结果最大&#xff0c;取最大的数&#xff08;正数的话绝对值最大&#xff0c;负数的话(K是奇…

java版工程项目管理系统源码 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单

ava版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示1…

托福高频真词List12 // 附托福TPO阅读真题

目录 4.5单词 生词 熟词 真题 4.5单词 生词 irreversiblepermanentadj.无法挽回的&#xff0c;永久的manipulateskillfully usedhandlev.操控monumentalenormousgreat and significantadj.极大的&#x1f9f8;retardslowv.放缓&#x1f9f8;subsistencesurvivaln.生存 wit…

Redis应用问题及解决

目录 一.缓存穿透 1.1 问题描述 1.2 解决方案 二.缓存击穿 2.1 问题描述 2.2 解决方案 三.缓存雪崩 3.1 问题描述 3.2 解决方案 当数据库压力变大&#xff0c;导致服务访问数据库响应变慢&#xff0c;导致服务的压力变大&#xff0c;最终可能导致服务宕机。 一.缓存穿透 1.1 …

【数据结构】栈与队列经典oj题

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;初阶数据结构 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对…

[Jenkins自动化] 实现远端linux自动化部署方式(上篇)

目录 本篇文章简介: 简单易上手, 轻松实现jenkins实现自动化部署(上) 1. 安装jenkins方式 -> 1.1 windows版本 --->1.1.1 直接安装 修改安装路径 设置端口号 9000为例 ---> 1.1.2 创建工作空间即可 (起名为pzy) -> 1.2 linux版本(暂无) -> 1.3 docker版…

chapter-4-数据库语句

以下课程来源于MOOC学习—原课程请见&#xff1a;数据库原理与应用 考研复习 概述 SQL发展 注&#xff1a;关键词是哪些功能&#xff0c;尤其第一个create alter drop是定义功能 1.SQL功能强大&#xff0c;实现了数据定义、数据操纵、数据控制等功能 2.SQL语言简洁&#xff…

redis基础总结-常用命令

redis常用指令3. 常用指令3.1 key 操作分析3.1.1 key应该设计哪些操作&#xff1f;3.1.2 key 基本操作3.1.3 key 扩展操作&#xff08;时效性控制&#xff09;3.1.4 key 扩展操作&#xff08;查询模式&#xff09;3.2 数据库指令3.2.1 key 的重复问题3.2.2 解决方案3.2.3 数据库…