0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解RK平台看门狗程序:用mywatchdog.c实现灵活的超时控制与喂狗管理

jf_44130326 来源:Linux1024 2026-02-02 17:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式系统稳定性保障中,看门狗程序的灵活性和易用性直接影响开发效率。今天我们聚焦一份实用的看门狗程序mywatchdog.c,看看它如何通过简单指令实现超时时间设置与喂狗开关控制,以及在实际场景中如何发挥作用。

一、程序核心功能:从代码看mywatchdog.c的设计

先来看mywatchdog.c的核心逻辑,它的设计目标很明确:通过命令行参数快速配置看门狗超时时间,并控制喂狗行为,代码如下:

配置:

&wdt{status ="okay";};

测试指令:这种方式不灵活# 写入任意内容(大写字母‘V’除外),开启看门狗,每44 秒内需要写入一次(喂狗)echoA > /dev/watchdog# 开启看门狗,并且内核会每隔 22 秒自动喂一次狗echoV > /dev/watchdog

#include#include#include#include#include#include#include#include#include// 定义看门狗超时控制相关IOCTL命令#defineWDIOC_SETTIMEOUT    _IOWR(WATCHDOG_IOCTL_BASE, 6, int)#defineWDIOC_GETTIMEOUT    _IOR(WATCHDOG_IOCTL_BASE, 7, int)intmain(intargc,char*argv[]){ inttimeout; intfd; intret =0; // 打开看门狗设备节点,打开即启动看门狗(硬件特性)  fd =open("/dev/watchdog", O_WRONLY); if(fd ==-1) {   perror("watchdog");   exit(EXIT_FAILURE);  }  // 从命令行参数获取超时时间(第一个参数)  timeout =atoi(argv[1]); printf("输入的超时参数:%d,实际设置值:%drn",atoi(argv[1]), timeout); // 设置看门狗超时时间  ret =ioctl(fd, WDIOC_SETTIMEOUT, &timeout); if(ret < 0) {   printf("设置超时时间失败n");   gotofail;  } // 验证并获取实际生效的超时时间(部分硬件可能限制最小/最大超时值)  ret =ioctl(fd, WDIOC_GETTIMEOUT, &timeout); if(ret < 0) {   printf("获取超时时间失败n");   gotofail;  }else{   printf("当前看门狗超时时间:%d秒n", timeout);  } // 循环喂狗(根据第二个参数控制是否实际执行喂狗操作) while(1) {   // 注意:当前代码中喂狗操作被注释,实际使用时需根据需求开启   // 若第二个参数为1则执行喂狗,0则不喂狗(触发复位)   if(argc >=3&&atoi(argv[2]) ==1) {      ret =write(fd,"�",1);// 喂狗核心操作:向设备写入1字节数据     if(ret !=1) {        ret =-1;       break;      }    }   printf("喂狗状态:%sn", (argc>=3&&atoi(argv[2])==1)?"已喂狗":"未喂狗");   sleep(timeout -10);// 间隔小于超时时间,预留缓冲  }fail: close(fd); returnret;}

代码核心亮点

1.支持通过命令行参数动态设置超时时间(argv[1]);

2.通过第二个参数(argv[2])控制喂狗开关(1 =开启喂狗,0 =关闭喂狗);

3.包含超时时间验证步骤,避免硬件不支持的超时值导致配置失效;

4.循环喂狗逻辑中预留10秒缓冲,降低因系统延迟导致的误复位风险。

二、关键指令解析:/etc/init.d/mywatchdog 300 1 &怎么用?

将编译后的mywatchdog程序放在/etc/init.d/目录下,即可通过一条指令完成看门狗配置,这条指令的含义是:

#设置超时时间为300秒(5分钟),开启喂狗功能,并后台运行

/etc/init.d/mywatchdog 300 1 &

指令参数拆解:

300:第一个参数,代表设置看门狗超时时间为300秒(若硬件支持,实际生效时间会通过WDIOC_GETTIMEOUT返回);

1:第二个参数,控制喂狗开关(1=开启喂狗,程序会每隔290秒执行一次喂狗;0=关闭喂狗,系统会在300秒后触发复位);

&:将程序放入后台运行,不阻塞当前终端,适合作为系统服务启动。

三、实际场景用法:从调试到部署

1.调试阶段:验证看门狗复位功能

若要测试看门狗是否正常工作,可关闭喂狗功能:

#设置超时10秒,关闭喂狗,观察系统是否在10秒后复位

/etc/init.d/mywatchdog 10 0 &

2.部署阶段:作为系统服务常驻

将程序加入系统启动脚本(如rc.local),确保系统启动时自动开启看门狗:

#rc.local中添加,系统启动后自动以300秒超时、开启喂狗的方式运行

/etc/init.d/mywatchdog 300 1 &

3.注意事项:

代码中write(fd, "�", 1)是喂狗核心操作,实际使用时需取消注释(当前代码为注释状态,仅作演示);

超时时间设置需结合系统最大响应时间(如系统完成一次复杂任务最长需200秒,则超时时间建议设为250-300秒);

后台运行时可通过ps命令查看进程状态,通过kill命令终止:

#查看mywatchdog进程

ps -ef | grep mywatchdog

#终止进程(需先关闭看门狗,否则进程退出后可能触发复位)

kill [进程ID]

四、为什么这样设计?看门狗程序的灵活性很重要

相较于固定配置的看门狗程序,mywatchdog.c的优势在于:

参数化控制:无需修改代码即可调整超时时间和喂狗状态,适合不同场景(如调试、生产环境);

兼容性强:基于Linux标准/dev/watchdog接口,不仅适用于RK平台,也可移植到其他支持标准看门狗驱动的嵌入式系统;

易于集成:放入/etc/init.d/目录后,可通过系统服务管理工具(如systemctl)统一管理,符合嵌入式系统服务规范。

总结:让看门狗管理更简单

mywatchdog.c通过简洁的代码实现了看门狗的核心功能,而/etc/init.d/mywatchdog 300 1 &这条指令则将配置门槛降到了最低。在实际开发中,只需根据系统需求调整超时时间和喂狗开关,就能让看门狗成为系统稳定运行的可靠后卫。记住:好的看门狗程序,不仅要能守得住,更要用得活


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 看门狗
    +关注

    关注

    10

    文章

    611

    浏览量

    73199
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3823

    浏览量

    133887
  • 程序
    +关注

    关注

    117

    文章

    3848

    浏览量

    85472
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    看门狗多任务系统及喂狗方法详解

    看门狗分硬件看门狗和 软件看门狗。硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称“
    的头像 发表于 07-05 09:21 2w次阅读
    <b class='flag-5'>看门狗</b>多任务系统及<b class='flag-5'>喂狗</b>方法<b class='flag-5'>详解</b>

    窗口看门狗喂狗时间

    0-x内,x由相关寄存器决定(X由预分频器和重装载值决定,最大值为0xFFF)。喂狗的时间不能过晚为什么需要看门狗独立看门狗:在0-重载值之间任意时间都可以喂狗如果
    发表于 07-30 06:31

    窗口看门狗的定义及窗口看门狗和独立看门狗区别是什么

    窗口看门狗一、窗口看门狗的定义及窗口看门狗和独立看门狗区别是什么? 总结一下就是独立看门狗只有下限,在下限前
    发表于 08-02 06:56

    看门狗喂狗时间及程序

    什么是看门狗定时器 看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后
    发表于 10-16 09:19 1.9w次阅读

    什么是stm32看门狗?独立看门狗和窗口看门狗工作原理解析

    stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。 独立看门狗
    的头像 发表于 11-06 11:48 2.9w次阅读
    什么是stm32<b class='flag-5'>看门狗</b>?独立<b class='flag-5'>看门狗</b>和窗口<b class='flag-5'>看门狗</b>工作原理解析

    STM32看门狗配置(独立看门狗IWDG和窗口看门狗WWDG)

    stm32自带两个看门狗模块,独立看门狗IWDG和窗口看门狗WWDG。看门狗主要作用是可用来检测和解决由软件错误引起的故障;当计数器达到给定的超时
    发表于 11-09 17:17 8898次阅读
    STM32<b class='flag-5'>看门狗</b>配置(独立<b class='flag-5'>看门狗</b>IWDG和窗口<b class='flag-5'>看门狗</b>WWDG)

    软件看门狗和硬件看门狗的作用和区别

    。  软件看门狗技术的原理和这差不多,只不过是软件的方法实现,我们还是以51系列来讲,我们知道在51单片机中有两个定时器,我们就可以这两个定时器来对主
    的头像 发表于 10-15 17:29 4.1w次阅读

    对于MCU看门狗IIWDG WWDG喂狗时间的配置参考

    对于MCU看门狗IIWDG WWDG喂狗时间的配置参考可以参考MCU的datasheet;在每个MCU的datasheet中都有这样的表格:6.3.25 Timer
    发表于 10-28 12:06 13次下载
    对于MCU<b class='flag-5'>看门狗</b>IIWDG WWDG<b class='flag-5'>喂狗</b>时间的配置参考

    窗口看门狗是什么?与独立看门狗有啥区别?

    STM32有两个看门狗,独立看门狗和窗口看门狗。其实两者的功能是类似的,只是喂狗的限制时间不同。
    发表于 02-09 10:28 9次下载
    窗口<b class='flag-5'>看门狗</b>是什么?与独立<b class='flag-5'>看门狗</b>有啥区别?

    STM32中的独立看门狗和窗口看门狗

    和窗口看门狗。 独立看门狗:使用的是外部时钟,即使主频不工作了,看门狗也能正常工作。只要在到达喂狗时间的上限前喂狗即表示
    的头像 发表于 12-22 16:58 3364次阅读

    详解独立看门狗实现原理

    这里以大家熟悉的STM32为例给大家讲解一下独立看门狗的配置以及工作过程。STM32F10xxx内置两个看门狗:独立看门狗和窗口看门狗,提供了更高的安全性、时间的精确性和使用的
    发表于 12-22 17:01 4255次阅读

    STM32独立看门狗详解

    本文将介绍STM32的看门狗中的独立看门狗,并通过实例来喂狗、体验喂狗与不喂狗的区别。
    的头像 发表于 05-01 09:06 5985次阅读
    STM32独立<b class='flag-5'>看门狗</b><b class='flag-5'>详解</b>

    MCU如何集成看门狗的功能

    和窗口看门狗。 独立看门狗 :使用的是外部时钟,即使主频不工作了,看门狗也能正常工作。只要在到达喂狗时间的上限前喂狗即表示
    的头像 发表于 06-22 09:09 3178次阅读
    MCU如何集成<b class='flag-5'>看门狗</b>的功能

    STM32的看门狗原理和示例代码

    ):IWDG是一个定时器,其计数器在启用后开始递增。在程序中,你需要定期喂狗(通过向IWDG的寄存器写入特定的值),以防止看门狗超时。否则,如果超过了预定的时间,系统
    的头像 发表于 12-01 08:00 3941次阅读
    STM32的<b class='flag-5'>看门狗</b>原理和示例代码

    喂狗”的艺术:看门狗不叫,才是系统好

    程序的。现实里的会追飞盘,PLC里的看门狗追的是跑飞的程序。 本质上是一个计时器,用于监控程序的运行状态。主
    的头像 发表于 11-25 10:50 430次阅读
    “<b class='flag-5'>喂狗</b>”的艺术:<b class='flag-5'>看门狗</b>不叫,才是系统好