Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
WatchDog
玩iot camera笔记之4启动看门狗防止死机后不复位
发布于 2016-10-25 11:26:53 浏览:3261
订阅该版
**玩iot camera笔记之4启动看门狗防止死机后不复位** [list]**玩看门狗起因**[/list:u] 新版SDK启用spiflash做root 根文件系统后,出现下面的bug,【firmware-20161002】版的好像还没有解决 20160925版本重新改回tf卡根文暂时解决spi flash错误ERROR: xfer_data_dma [https://club.rt-thread.org/ask/question/5212.html](https://club.rt-thread.org/ask/question/5212.html) 于是想到添加 看门狗,防止死机后不复位,导致工作不正常! [list]**应用层:看门狗的应用**[/list:u] 打开最新SDK【firmware-20161002applicationsmain.c】 1、添加看门狗所需要的头文件 ```//wdt #include
``` 2、添加看门狗的启动线程代码 ``` void wdt_main() { rt_device_t wdt_dev; int ret; int timeout = 2; //5s wdt_dev = rt_device_find("fh_wdt"); rt_device_open(wdt_dev, 0); ret = rt_device_control(wdt_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout); rt_kprintf("fh_wdt start "); while (1) { rt_thread_sleep(timeout * RT_TICK_PER_SECOND / 2); ret = rt_device_control(wdt_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, &timeout); //rt_kprintf( "kicked " ); } } int wdt_demo_init() { int ret = 0; rt_thread_t threadWdt; threadWdt = rt_thread_create("wdt", wdt_main, RT_NULL, 10 * 1024, 8, 20); if (threadWdt != RT_NULL) rt_thread_startup(threadWdt); }``` 上面主要是2个函数,一个看门狗线程函数【wdt_main()】,一个启动线程初始化函数【wdt_demo_init()】 启动线程函数 和其他线程的初始化启动都一样,略过。。。 重点是wdt_main()的函数分析: 流程如下 rt_device_find 查找看门狗设备 || rt_device_open 找到狗后,打开看门狗 || rt_device_control 设置看门狗参数,超时时间,我的改成了2S || || 然后进入主程序,延时 ,喂狗 ``` //延时 rt_thread_sleep(timeout * RT_TICK_PER_SECOND / 2); //喂狗 ret = rt_device_control(wdt_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, &timeout);``` 其中对看门狗的操作用到的参数定义可以在头文件里面找到 ```//wdt #include
``` 3、把【wdt_demo_init();】函数直接添加到main函数里面,上电开机启动 在MSH终端输入ps可以看到看门狗线程在运行! 如果想验证看门狗是否工作,可以屏蔽看门狗喂狗函数试验下 ``` | / - RT - Thread Operating System / | 2.5.0 build Oct 24 2016 2006 - 2016 Copyright by rt-thread team msh />ps ps thread pri status sp stack size max used left tick error -------------- --- ------- ---------- ---------- ------ ---------- --- wdt 8 suspend 0x00000098 0x00002800 03% 0x00000013 000 telnet 25 ready 0x000000f0 0x00000800 41% 0x00000005 000 vlc_get_stream 130 ready 0x00000190 0x00000c00 27% 0x00000003 000 mjpeg_server 17 suspend 0x000000c8 0x00000400 83% 0x00000001 000 vlc_isp 130 ready 0x000000e0 0x00000c00 37% 0x00000006 000 WWD 10 suspend 0x000000c8 0x00000400 51% 0x0000000b 000 mmcsd_detect 15 suspend 0x000000b0 0x00000400 53% 0x00000011 000 tcpip 12 suspend 0x000000e8 0x00001000 19% 0x00000009 000 tshell 20 ready 0x000001a8 0x00002000 05% 0x00000009 000 etx 14 suspend 0x000000a8 0x00000200 53% 0x0000000e 000 erx 14 suspend 0x000000b0 0x00000200 36% 0x00000010 000 tidle 255 ready 0x00000050 0x00000200 25% 0x00000003 000 timer 4 suspend 0x00000078 0x00000200 23% 0x0000000a 000 msh /> ``` [list]**驱动层:驱动层接口分析**[/list:u] 驱动路径: ```firmware-20161002driverswdt.c firmware-20161002driverswdt.h``` 打开后可以发现,wdt.c实现了看门狗应用用到的对看门狗操作对应的函数如: ``` rt_device_open rt_device_control 以及对看门狗对应的控制设置函数命令的处理 rt_device_control对应到fh_watchdog_ctrl函数 rt_device_control的控制参数命令: RT_DEVICE_CTRL_WDT_SET_TIMEOUT 超时命令 RT_DEVICE_CTRL_WDT_KEEPALIVE 喂狗 rt_device_open对应到fh_watchdog_init 当应用层打开设备后,自动调用fh_watchdog_init函数初始化看门狗 ``` [list]**bsp层:板级支持包的接口**[/list:u] 板级支持包 一般有芯片厂家提供,代码在 ```firmware-20161002librariesdriverlibfh_wdt.c``` 是源码(某些接口功能是以LIB库函数的方式的提供), 他给系统驱动层提供系统驱动所需的接口定义,有兴趣可以直接看源码。 一般情况只需要掌握应用层,满足功能需求即可。
查看更多
2
个回答
默认排序
按发布时间排序
fubaojun2006
2017-09-12
哇(挖)~~坑~~~啊!
这个好,回头就不怕板子出问题了。 [s:175]
撰写答案
登录
注册新账号
关注者
0
被浏览
3.3k
关于作者
独行客
这家伙很懒,什么也没写!
提问
6
回答
5
被采纳
0
关注TA
发私信
相关问题
1
关于操作系统中看门狗使用方式的疑问与探讨
2
请教 RTthread看门狗问题
3
STM32看门狗启动后系统不能复位
4
【内核和外设学习营】十里 看门狗实验
5
《内核学习营》+坦然+探索者stm32f407板子RT-thread喂看门狗实验
6
【内核学习营】+王秀峰+IWDG
7
【内核学习营】+青春+简单独立看门狗实验
8
看门狗初始化问题,导致硬件错误
9
stm32f103ze添加看门狗外设 编译不通过
10
看门狗程序报错
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
简单两步配置RTT源码阅读环境 vsc+clangd
2
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
3
LVGL使用字库IC芯片显示中文
4
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
5
freemodbus主机在freertos的适配,参考rtthread例程
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部