看门狗设备初始化接口的问题

7 天前 [复制链接] 12 53

1金钱
我的选用stm32f1的芯片,在使用看门狗设备时用官方的 rt_device_find("iwg") 查找不到设备,后来打开驱动文件,将设备名称改成"wdt"就好了。
, ]4 r1 H" b! A但是在调用初始化接口 rt_device_init(wdg_dev)时会导致系统重启!请问这可能是什么原因造成的. l, E: k4 D  \1 M

; E/ R) {2 W- s9 j% Q  d  m& ?# z6 B0 d) [

使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 6 天前 | 显示全部楼层
一调用就重启?把你的看门狗应用代码 完整的贴出来看看?
+ v) Y% W$ {% p7 d* }& e; E还有你用到的是那个 bsp?
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
来一颗糖 发表于 2019-7-12 08:24/ Y7 \) O, G5 O  Z& D8 }
一调用就重启?把你的看门狗应用代码 完整的贴出来看看?
. L- N9 @/ _/ K; Y: p/ \6 s% v" P还有你用到的是那个 bsp? ...
* y* z$ z# r! B* ]9 e! L4 _' f1 b
你是不是用了iwdg_sample.c这个测试的。
4 ~3 y  M9 k7 \8 B1 v. K) U1 x如果是这个就一定会出错,驱动里面的看门狗超时时间是秒为单位,sample里是毫秒为单位。
7 g3 X" P8 J9 Q. D( D1 s8 |: ^" u测试的时候会提示设置数值过大,然后系统重启。
1 A9 g" I, G, s% `( |2 a, @* M/ [/ C7 j* N
如果你是上述问题,那么你只需把timeout 改到 0-32之间就可以了。! v( i) V7 a7 v2 D
; y" K5 x$ O1 W2 o  @  @( ?
这个问题昨天已经反馈给RTT了,据说已经修复,你可以看下这里是否更新https://github.com/RT-Thread-pac ... aster/iwdg_sample.c
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
本帖最后由 乐于 于 2019-7-12 09:38 编辑
0 F$ E8 s! v/ \2 K: w( P0 R& I8 I3 s5 v% K1 @! |

* x) J$ i8 @0 K% g0 v3 H8 |
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
本帖最后由 乐于 于 2019-7-12 09:38 编辑
  y7 ?/ J- J  m" V5 _+ U' W0 S* c1 F: q
, ?- d3 S% x6 c6 t0 Y0 J
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
来一颗糖 发表于 2019-7-12 08:247 z: Z( K6 S2 W" h* a
一调用就重启?把你的看门狗应用代码 完整的贴出来看看?
* Z6 N$ |" S! \5 G! N还有你用到的是那个 bsp? ...
( w8 z/ H6 K  y* m& Y
/*
: |' _, R# {0 v3 X& T * Copyright (c) 2006-2018, RT-Thread Development Team% V  p" l7 E6 d& r2 P3 z& n
*
. h( M6 }& d+ P1 u# W; B( T * SPDX-License-Identifier: Apache-2.05 n9 z, ], |* Y
*
1 b& _+ D3 U0 h1 I1 `  d" z * Change Logs:
3 h/ K0 T3 _; p5 D7 S8 B% _ * Date           Author       Notes
; G! g8 }# a/ C) w7 ]/ t * 2018-09-25     misonyo      first edition.
/ h" u$ p) S5 Z* X# Q1 E. |5 J- A */: F+ @- M0 y0 J( a# E( F
/*
3 W% x1 t, k, ^5 D. L * 程序清单:这是一个独立看门狗设备使用例程, p7 @* J$ |, L( X
* 例程导出了 iwdg_sample 命令到控制终端$ h4 c3 E7 x1 `9 I8 k8 `5 e! }5 D
* 命令调用格式:iwdg_sample iwg
# r3 P: {( r0 \4 e- s * 命令解释:命令第二个参数是要使用的看门狗设备名称,为空则使用例程默认的看门狗设备。6 R  m' M3 e4 H7 K
* 程序功能:程序通过设备名称查找看门狗设备,然后初始化设备并设置看门狗设备溢出时间。! m9 k6 o, V9 D  C- Y" x9 l, o
*           然后设置空闲线程回调函数,在回调函数里会喂狗。
8 F0 a( D3 _' k# W. Y2 o2 }" u*/
7 v, |& V; v2 L' o+ R( v8 H4 o1 k  c2 @5 K2 l  h
#include <rtthread.h>. ~; O% L  c* K9 p
#include <rtdevice.h>' {; z* t8 S0 _, E
" q- ^  W. F" `) K' ]3 l5 z
#define IWDG_DEVICE_NAME    "wdt"    /* 看门狗设备名称 */
1 s. G' @7 h- K, r
9 V1 a, C* G# S- S2 rstatic rt_device_t wdg_dev;         /* 看门狗设备句柄 */% ]  n) E& j6 F3 B1 P1 Q/ z6 x* \9 R
$ G2 S  M$ `! W" \5 B9 Y* H! R+ w
static void idle_hook(void)0 E+ W1 f! e  ]6 q+ g
{9 e5 B& A8 s/ [
    /* 在空闲线程的回调函数里喂狗 */
+ U. E' Y; l! t$ X" y    rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);! b0 J( C. b: o. E
    rt_kprintf("feed the dog!\n ");
' X# n0 y8 N. [% K; H! W4 Z2 n}8 z$ A# R/ p7 ?3 F! T* U
- ?# N' ^2 O0 r" e
static int iwdg_sample(int argc, char *argv[]); {/ l: @( x/ I9 F0 |  a
{$ c: x2 h4 ^' a, i/ v8 |8 E: ~
    rt_err_t ret = RT_EOK;
& I( Y* G5 T# B, G$ J6 f- h  l$ u    rt_uint32_t timeout = 10;    /* 溢出时间 */' y+ l) T/ E4 F4 N) g- ?$ Y# G' ^3 A
    char device_name[RT_NAME_MAX];
+ U) Q, ?% [+ V9 S
  g3 Q; Z, m  z4 C9 O3 [    /* 判断命令行参数是否给定了设备名称 */. p8 u( O8 h8 l+ D+ T+ t1 k
    if (argc == 2)0 h- r+ B, r3 H5 `5 [) }; |
    {* `  |9 k6 M4 Y  i3 z0 ~# i- S
        rt_strncpy(device_name, argv[1], RT_NAME_MAX);
9 _( X$ F& D: y  _' u1 i  p2 o    }
+ T$ S; ?1 K6 f' d, X7 w/ k& u+ T$ r; w    else  o* m4 B) f5 D/ ?9 O+ \
    {# E: r* z1 h' k. [2 E6 e  w* P* L
        rt_strncpy(device_name, IWDG_DEVICE_NAME, RT_NAME_MAX);/ |5 ~3 O4 |% A6 q$ d7 G+ H
    }
2 @/ G' n, J9 L) `; u    /* 根据设备名称查找看门狗设备,获取设备句柄 */7 y! B& h+ K6 u& y
    wdg_dev = rt_device_find(device_name);
0 ~) S& Q/ X0 J2 J5 L    if (!wdg_dev)5 ~+ ^8 A8 ~; A' B  ~
    {/ k9 m! f+ W( w3 G% ?' y' N
        rt_kprintf("find %s failed!\n", device_name);) r) r4 {( i' m6 h. S
        return RT_ERROR;
& P* [3 ]4 c2 T+ l+ x: P    }
+ X9 ^# ~9 `/ Z" @9 i        else
# \0 V' r$ t$ B! H        {; L4 h2 A1 O; m
                rt_kprintf("find %s succeed!\n", device_name);& [  U  C! N! f7 u3 t0 u8 ]7 e
        }2 F8 r: h7 K7 e4 S7 R
    /* 初始化设备 */
3 f4 U5 Y  ~1 c  X0 y1 j/ l    ret = rt_device_init(wdg_dev);
2 i. h1 g; i  T: V& ~$ O% }2 \6 X  r    if (ret != RT_EOK)
0 x3 j- {/ f7 @, H; M    {
' z2 K. {  P9 e        rt_kprintf("initialize %s failed!\n", device_name);" G9 }9 a. Y0 E, Y7 A! U6 p
        return RT_ERROR;
1 p+ s- |3 t  q9 U/ Q4 s2 o    }* X( B! k% Z, M' W: `5 h
        else
. h6 L/ v. V& Y! K  l9 Y        {3 T+ z# Z  l1 e5 j2 O6 m
                rt_kprintf("initialize %s succeed!\n", device_name);: n( o1 O+ g0 W$ d& U
        }3 h* I+ l9 j( ~; k$ H+ |" n  R
    /* 设置看门狗溢出时间 */
$ B" i2 t( X! v- b; }* _" H    ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout);# R) [+ e0 V4 f' e! }* D1 B- ^
    if (ret != RT_EOK); }' r0 V9 ~3 |0 ^9 V  q
    {2 k1 w. C' k4 |* ~4 [: i
        rt_kprintf("set %s timeout failed!\n", device_name);8 `. R8 ^* Y' M  f1 }/ e& v
        return RT_ERROR;; z: b( R& Z) L8 b) g8 b# H* v* r7 F
    }
6 E3 z! {$ e/ l! n1 p/ _6 [; p% }        else
( N% [, o: d6 z7 n$ S7 W5 Z        {2 S' [( _0 G- Q% y8 y$ o; g
                rt_kprintf("set %s timeout succeed!\n", device_name);! ?1 O8 @5 a" Q
        }- b& l; b9 L, F; z4 I
    /* 设置空闲线程回调函数 */& A. h  G+ k8 k. I9 V
    rt_thread_idle_sethook(idle_hook);
* f) V1 y! Y7 P" A5 j7 [$ c' ?7 y) Z; l
    return ret;
/ ^( M) x# U) Z7 d1 r}  ~, H$ ^% l0 w9 P) y, d5 K# b
/* 导出到 msh 命令列表中 */
9 F' i& j  `; i, D. TMSH_CMD_EXPORT(iwdg_sample, iwdg sample);
6 I7 Y& K5 l( P$ G$ L
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
来一颗糖 发表于 2019-7-12 08:24
( Y3 l7 S' _( [! F! X5 x, v一调用就重启?把你的看门狗应用代码 完整的贴出来看看?, Y) w' C+ i5 Z) J" q: c
还有你用到的是那个 bsp? ...
' ]! A. x7 v* M+ U6 n% H
执行初始化函数就会失败,我不太确定我得设备名称"wdt"是不是对的,官方例程是"iwd"
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
whj467467222 发表于 2019-7-12 08:44, d# P3 C' {( d+ l) s; U
你是不是用了iwdg_sample.c这个测试的。
* `, F% [- e6 }- j4 p如果是这个就一定会出错,驱动里面的看门狗超时时间是秒为单位, ...

9 ~" T! n0 ?+ f, P- I, A没有更新啊。。。
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
来一颗糖 发表于 2019-7-12 08:24- S- X6 `( R- k
一调用就重启?把你的看门狗应用代码 完整的贴出来看看?& G6 t; q3 G3 u% @9 Z  J0 h
还有你用到的是那个 bsp? ...

$ c& w- M* k' U$ Nbsp根据官方模板自己制作的,
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
乐于 发表于 2019-7-12 09:393 g& [- h$ e9 C& J6 E
/*
" f5 h8 v2 z( ^+ @2 @ * Copyright (c) 2006-2018, RT-Thread Development Team) T% X  H/ l) X9 k* L# l- x- v
*

; R( `6 _' G1 \) N就是这个文件,我昨天已经反馈过了。
0 k- V  \, M2 j- w# i8 g. n/ ^  a' [这个文件有两处错误
% u0 P& v3 n: z1,修改名字“iwg”为“wdt”
" n: o, w6 ^4 P2 |* ^1 @& a, ^2,修改timeout 为1.就可以了。
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
来一颗糖 发表于 2019-7-12 08:24
! Q' F  N9 J0 L" x; y, _3 q一调用就重启?把你的看门狗应用代码 完整的贴出来看看?! I; D/ x+ g3 y6 ]! {, X
还有你用到的是那个 bsp? ...
& `0 v/ n0 F" {& r8 o2 K. @- M
昨天下午我们才讨论的这个问题,晚上就被人家测试出来了
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
乐于 发表于 2019-7-12 09:41+ _, `, s1 ^( m$ t
执行初始化函数就会失败,我不太确定我得设备名称"wdt"是不是对的,官方例程是"iwd" ...
- ?9 D6 Q3 i2 x7 r; Y7 y
可以输入 MSH 命令: list_device 查看下是否存在看门狗设备。如果存在 就接着输入 命令: iwdg_sample xxx (xxx 表示看门狗设备名称)
+ e& B% f* Q: |, s/ ?: K- ~
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
来一颗糖 发表于 2019-7-12 11:12; ~& s6 \4 A+ c
可以输入 MSH 命令: list_device 查看下是否存在看门狗设备。如果存在 就接着输入 命令: iwdg_sample xx ...

  i( z: n( L, `& Z& i确实是例程有问题
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区  

© 2013-2017 上海睿赛德电子科技有限公司 沪ICP备13014002号-1

Powered by RT-Thread

快速回复 返回顶部 返回列表