当前位置:   article > 正文

RT-Thread 使用设备驱动框架 驱动看门狗例程中 MSH命令后提示“find iwg failed“”解决办法_rtthread 看门狗 超时

rtthread 看门狗 超时

太长不看版:
修改这几行代码为下面这些
#define IWDG_DEVICE_NAME “wdt” /* 看门狗设备名称 */

    rt_uint32_t timeout = 10;    /* 溢出时间 */
  • 1

代码参考

https://www.rt-thread.org/document/api/iwdg_sample_8c-example.html

下面是官方例程中的代码

/*
 * Copyright (c) 2006-2018, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2018-09-25     misonyo      first edition.
 */
/*
 * 程序清单:这是一个独立看门狗设备使用例程
 * 例程导出了 iwdg_sample 命令到控制终端
 * 命令调用格式:iwdg_sample iwg
 * 命令解释:命令第二个参数是要使用的看门狗设备名称,为空则使用例程默认的看门狗设备。
 * 程序功能:程序通过设备名称查找看门狗设备,然后初始化设备并设置看门狗设备溢出时间。
 *           然后设置空闲线程回调函数,在回调函数里会喂狗。
*/
#include <rtthread.h>
#include <rtdevice.h>
#define IWDG_DEVICE_NAME    "iwg"    /* 看门狗设备名称 */
static rt_device_t wdg_dev;         /* 看门狗设备句柄 */
static void idle_hook(void)
{
    /* 在空闲线程的回调函数里喂狗 */
    rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
    rt_kprintf("feed the dog!\n ");
}
static int iwdg_sample(int argc, char *argv[])
{
    rt_err_t ret = RT_EOK;
    rt_uint32_t timeout = 1000;    /* 溢出时间 */
    char device_name[RT_NAME_MAX];
    /* 判断命令行参数是否给定了设备名称 */
    if (argc == 2)
    {
        rt_strncpy(device_name, argv[1], RT_NAME_MAX);
    }
    else
    {
        rt_strncpy(device_name, IWDG_DEVICE_NAME, RT_NAME_MAX);
    }
    /* 根据设备名称查找看门狗设备,获取设备句柄 */
    wdg_dev = rt_device_find(device_name);
    if (!wdg_dev)
    {
        rt_kprintf("find %s failed!\n", device_name);
        return RT_ERROR;
    }
    /* 初始化设备 */
    ret = rt_device_init(wdg_dev);
    if (ret != RT_EOK)
    {
        rt_kprintf("initialize %s failed!\n", device_name);
        return RT_ERROR;
    }
    /* 设置看门狗溢出时间 */
    ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout);
    if (ret != RT_EOK)
    {
        rt_kprintf("set %s timeout failed!\n", device_name);
        return RT_ERROR;
    }
    /* 设置空闲线程回调函数 */
    rt_thread_idle_sethook(idle_hook);
    return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(iwdg_sample, iwdg sample);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

要想这个例程能用。首先需要初始化IIWDG。我使用RT-Thread Studio开发
cube生成看门狗设置后添加到主函数。保证初始化设置正确
在这里插入图片描述
第二
打开RT-Thread Settings【也可以用env设置】
找到WDT(窗口看门狗)。可以右键搜索查找
在这里插入图片描述
第三
将官方例程放入工程中
在这里插入图片描述
第四
编译下载
输入命令后报错找不到iwg
在这里插入图片描述
经过debug调试后,发现。。。压根没有iwg这个设备。要么你自己重新给独立看门狗编一套。
要么。。。修改设备名。变成窗口看门狗来用。
我用的芯片是ST32F7,独立看门狗也可以作为窗口看门狗来用。
在这里插入图片描述
再次编译运行
wc!这是啥错误。设置超时时间过长???在这里插入图片描述
找到报错代码段查看,发现是timeout有问题在这里插入图片描述
这不是设置1000吗?怎么会超过32s呢?在这里插入图片描述
第一步查看iwdg初始化设置是不是设置有问题
在这里插入图片描述
发现没有后,查看这个宏
在这里插入图片描述
这TM设置的时间是以秒为单位的。。。。
在这里插入图片描述
修改一下
在这里插入图片描述
编译运行
在这里插入图片描述
ok!打工人不加班。。。溜了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/713235
推荐阅读
相关标签
  

闽ICP备14008679号