看门狗实例 以及设置进空闲线程

看门狗实例 以及设置进空闲线程

/*
 * @Descripttion: 独立看门狗源文件
 */

#include "iwdg.h"


rt_device_t WdgDev;


static void idle_hook(void)
{
    /* 在空闲线程的回调函数里喂狗 */
    rt_device_control(WdgDev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
//    rt_kprintf("feed the dog!\n ");
}

/**
 * @name: WdgInit
 * @msg:  初始化看门狗
 * @param [in]
 *         无 
 * @param [out]
 *         无
 * @return 无
 * @note:  无
 */
rt_int8_t WdgInit(void)
{
	rt_err_t ret = RT_EOK;
	rt_uint32_t timeout = WDT_DEV_TIMEOUT;
	
	//根本设备名称查找看门狗设备,获取文件句柄
	WdgDev = rt_device_find(WDT_DEV_NAME);
	if(!WdgDev)
	{
		rt_kprintf("find %s failed!\n", WDT_DEV_NAME);
        return RT_ERROR;
	}
	
    //设置看门狗溢出时间
    ret = rt_device_control(WdgDev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout);
    if (ret != RT_EOK)
    {
        rt_kprintf("set %s timeout failed!\n", WDT_DEV_NAME);
        return RT_ERROR;
    }

    //启动看门狗
    ret = rt_device_control(WdgDev, RT_DEVICE_CTRL_WDT_START, RT_NULL);
    if (ret != RT_EOK)
    {
        rt_kprintf("start %s failed!\n", WDT_DEV_NAME);
        return RT_ERROR;
    }

	/* 设置空闲线程回调函数 */
    rt_thread_idle_sethook(idle_hook);
	
    return ret;	
	
}

```c
/*
 * @Descripttion: 独立看门狗头文件
 */

#ifndef IWDG_H
#define IWDG_H

#include <rtthread.h>
#include <rtdevice.h>

#define WDT_DEV_NAME "wdt"
//溢出时间单位为秒
#define WDT_DEV_TIMEOUT 2

extern rt_device_t WdgDev;

rt_int8_t WdgInit(void);

#endif


rt_thread_idle_sethook(idle_hook);  设置空闲线程

static void idle_hook(void)
{
    /* 在空闲线程的回调函数里喂狗 */
    rt_device_control(WdgDev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
//    rt_kprintf("feed the dog!\n ");
}
空闲线程具体实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值