ESP32-任务看门狗笔记
看门狗机制用于监控嵌入式系统运行并在发生不可知的软硬件故障时将系统复位。系统正常运行时,看门狗定时器溢出之前会被重置计数值,也就是“喂狗”。定时器溢出意味着无法“喂狗”,系统异常。
基于ESP-IDF4.1
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "freertos/FreeRTOS.h"
4 #include "freertos/task.h"
5 #include "esp_task_wdt.h"
6
7 #define TWDT_TIMEOUT_S 3
8 #define TASK_RESET_PERIOD_S 2
9
10 /*
11 * 检查任务看门狗输出的宏,并在返回错误代码的时候触发中止
12 */
13 #define CHECK_ERROR_CODE(returned, expected) ({ \
14 if(returned != expected){ \
15 printf("TWDT ERROR\n"); \
16 abort(); \
17 } \
18 })
19
20 static TaskHandle_t task_handles[portNUM_PROCESSORS];
21
22 //用户任务的回调函数
23 void reset_task(void *arg)
24 {
25 //将任务添加到任务看门狗,并检查是否已添加
26 CHECK_ERROR_CODE(esp_task_wdt_add(NULL), ESP_OK);
27 CHECK_ERROR_CODE(esp_task_wdt_status(NULL), ESP_OK);
28
29 while(1){
30 //每2秒重置一次看门狗
31 CHECK_ERROR_CODE(esp_task_wdt_reset(), ESP_OK); //注释这一行可以触发看门狗超时
32 vTaskDelay(pdMS_TO_TICKS(TASK_RESET_PERIOD_S * 1000));
33 }
34 }
35
36 void app_main(void)
37 {
38 printf("Initialize TWDT\n");
39 //初始化和重新初始化任务看门狗
40 CHECK_ERROR_CODE(esp_task_wdt_init(TWDT_TIMEOUT_S, false), ESP_OK);
41
42 //启动时未订阅空闲任务,则订阅到任务看门狗
43 #ifndef CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0
44 esp_task_wdt_add(xTaskGetIdleTaskHandleForCPU(0));
45 #endif
46 #ifndef CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1
47 esp_task_wdt_add(xTaskGetIdleTaskHandleForCPU(1));
48 #endif
49
50 //创建用户任务并添加到任务看门狗
51 for(int i = 0; i < portNUM_PROCESSORS; i++){
52 xTaskCreatePinnedToCore(reset_task, "reset task", 1024, NULL, 10, &task_handles[i], i);
53 }
54
55 printf("Delay for 10 seconds\n");
56 vTaskDelay(pdMS_TO_TICKS(10000)); //延迟10秒
57
58 printf("Unsubscribing and deleting tasks\n");
59 //从任务监视程序中删除并取消订阅用户任务,然后取消订阅空闲任务
60 for(int i = 0; i < portNUM_PROCESSORS; i++){
61 vTaskDelete(task_handles[i]); //首先删除用户任务(防止重置未订阅的任务)
62 CHECK_ERROR_CODE(esp_task_wdt_delete(task_handles[i]), ESP_OK); //从任务看门狗取消订阅任务
63 CHECK_ERROR_CODE(esp_task_wdt_status(task_handles[i]), ESP_ERR_NOT_FOUND); //确认任务已经取消订阅
64
65 //取消订阅空闲任务
66 CHECK_ERROR_CODE(esp_task_wdt_delete(xTaskGetIdleTaskHandleForCPU(i)), ESP_OK); //从任务看门狗取消订阅空闲任务
67 CHECK_ERROR_CODE(esp_task_wdt_status(xTaskGetIdleTaskHandleForCPU(i)), ESP_ERR_NOT_FOUND); //确认空闲人取消订阅
68 }
69
70
71 //取消订阅所有任务后,取消初始化任务看门狗
72 CHECK_ERROR_CODE(esp_task_wdt_deinit(), ESP_OK);
73 CHECK_ERROR_CODE(esp_task_wdt_status(NULL), ESP_ERR_INVALID_STATE); //确认任务看门狗取消初始化
74
75 printf("Complete\n");
76 }
原文:https://gitee.com/EspressifSystems/esp-idf/tree/master/examples/system/task_watchdog
ESP32-任务看门狗笔记的更多相关文章
- nRF51822 看门狗和OTA (无线升级功能)的尴尬笔记
很久没有记笔记了.今天要记点东西,不然以后又忘记了. 随着时代的发展,现在的SDK已经是13.0了.蓝牙5.0也就来了.废话就少说了,记笔记吧. 两年前搞过nRF51822 的无线升级功能,那时候用的 ...
- CC2540开发板学习笔记(八)—— 看门狗
一.功能: 防止程序跑飞,使得系统重新进入工作状态,即一种复位操作吧. 但需要不停地喂狗= =(就是不断的执行某种操作),假如说你的程序跑到了不知道哪里去的错误时,即不会实现喂狗,就会发生复位,程序就 ...
- Kubernetes 笔记 09 DaemonSet 我是一只看门狗
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...
- 【小梅哥SOPC学习笔记】给NIOS II CPU增加看门狗定时器并使用
给NIOS II CPU增加看门狗定时器并使用 配置看门狗定时器: 1. 设置计时溢出时间为1秒 2. 计数器位宽为32位 3. 勾选No Start/Stop control bits 4. 勾选F ...
- STM32F407 窗口看门狗 个人笔记
窗口看门狗的喂狗时间范围 由框图知: 复位条件是:当且仅当 { 启动位启动 且 { T6为0 (计数器的值减小到0X03F即下限,还没喂狗,即喂狗太晚) 或 计数器的值高于上限时喂狗,即喂狗太早 } ...
- STM32F407 独立看门狗 个人笔记
什么是看门狗 如果程序跑飞了怎么办? 可以用看门狗来监控. 看门狗是: 一个递减的计数器,如果不按时给计数器赋值,计数器的值减到一定程度,就会使系统复位. 也就是说如果程序运行异常,无法正常给计数器赋 ...
- 5、CC2541芯片中级教程-OSAL操作系统(PWM+看门狗)
本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...
- S5PV210时钟,看门狗定时器
晶振:时钟源(操作主要有两个,倍频,分频) A8的时钟源: 时钟域,每个时钟域(不同的最高频率和最低频率)管理着不同的电路模块: 不同的时钟域对应不同电路模块表 时钟电路:懂得看时钟电路(时钟源选择开 ...
- 突然地心血来潮,为 MaixPy( k210 micropython ) 添加看门狗(WDT) C 模块的开发过程记录,给后来的人做开发参考。
事情是前几天群里有人说做个看门狗不难吧,5分钟的事情,然后我就怼了几句,后来才发现,原来真的没有看门狗模块鸭. 那好吧,那我就写一下好了,今天是(2020年4月30日)想着最后一天了,不如做点什么有价 ...
随机推荐
- Ansible-快速启动
Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务. Ansible的特点 1.ansible轻量级无客户端agentless,只需要双 ...
- 利用TortoiseGit向Github上传文件
利用TortoiseGit向Github上传文件 第一步:建一个新文件夹,作为本地仓库 第二步:右键选择设置为版本库 若弹出,确认即可 重新打开改文件,会发现多了一个绿色的小勾 在文件夹中会自动生成一 ...
- 重新整理 .net core 实践篇————配置系统之盟约[五]
前言 在asp .net core 中我们会看到一个appsettings.json 文件,它就是我们在服务中的各种配置,是至关重要的一部门. 不管是官方自带的服务,还是我们自己编写的服务都是用它来实 ...
- 鸿蒙 Android iOS 应用开发对比02
个人理解,不抬杠 转载请注明原著:博客园老钟 https://www.cnblogs.com/littlecarry/ IOS 把界面抽象成 "控制" Controller:And ...
- (转)修改python默认排序方式
在Java中,自定义类可以通过继承comparable接口,重写compareTo方法来使用内置sort()函数来对自定义对象排序,我就在想Python中有没有类似的操作. 首先随便写个自定义类,比如 ...
- 硬件delay评估表
硬件delay评估表 硬件延时评估表用于快速评估一个模型在特定硬件环境和推理引擎上的推理速度. Bw 主要用于定义PaddleSlim支持的硬件延时评估表的格式. 概述 硬件延时评估表中存放着所有可能 ...
- VB 老旧版本维护系列---迷之集合- dataTable
迷之集合- dataTable '定义一个datatable,并声明一个空对象 Dim data As DataTable = New DataTable() '获取行数 Dim rows As In ...
- 基于SSL(TLS)的HTTPS网页下载——如何编写健壮的可靠的网页下载
源码下载地址案例开发环境:VS2010本案例未使用openssl库,内部提供了sslite.dll库进行TLS会话,该库提供了ISSLSession接口用于建立SSL会话. HTTP协议很简单,写个简 ...
- Android adb的常用命令
环境部署: 1.下载adb工具 2.下载奇兔刷机(或其它一键刷机软件),将手机与电脑进行连接 3.一键root手机 命令 1.获取设备列表及设备状态:adb devices 如果连接的设备不止一个, ...
- Zabbix 4.0 使用笔记
自定义监控项1.确认需监控内容 (例如:登陆用户数)2.确认监控方法(例如:脚本)3.编写脚本 vi /etc/zabbix/custom_shell/current_login_user.sh# w ...