BOOTLOADER与WGT冲突

发表在 Bootloader2019-9-10 16:33 [复制链接] 11 484

这边使用OTA_HTTP升级,控制台输入URL之后直接就进硬件错误了,开启WGT后会这样,关闭就没有问题。请问这是为啥呢?
$ }0 F6 E) n6 M$ J2 r0 z
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-9-10 17:24:25 | 显示全部楼层
ota升级时一直在占用mcu,进不了空闲函数无法喂狗,1 V# n8 k8 J3 C- E' `
在进行ota升级之前先改变一些WGT的触发时间,改的大一点试试
使用道具 举报 回复
发表于 2019-9-10 17:28:59 | 显示全部楼层
flyboy 发表于 2019-9-10 17:24
- }, W4 |* C. g# lota升级时一直在占用mcu,进不了空闲函数无法喂狗,1 i  K) V) f7 {8 W. v
在进行ota升级之前先改变一些WGT的触发时间,改的大一点 ...

1 y5 |! N; O. U  }8 k1 P好的 谢谢 我这边试试
使用道具 举报 回复
发表于 2019-9-11 10:59:12 | 显示全部楼层
本帖最后由 jamguo 于 2019-9-11 11:00 编辑
+ O( H! R: p2 w7 w, {/ q# I
flyboy 发表于 2019-9-10 17:24+ I; I5 E- A/ A& K
ota升级时一直在占用mcu,进不了空闲函数无法喂狗,
- |2 l, e- J- i, A在进行ota升级之前先改变一些WGT的触发时间,改的大一点 ...

' `1 o9 f: n- G4 _1 W+ P) n. L改的很大了,,,,还是不行,一进OTA准备下载就直接重启 ' }- u( |. B5 ]* r

' I4 [2 [# ^% |) c
  1. rt_err_t ret = RT_EOK;; q! b3 x1 e  n4 O2 L
  2.     rt_uint32_t timeout = 300000;    /* 溢出时间 */
    5 Y! s6 v8 k. \9 D2 _* t0 o. z# {
  3.     char device_name[RT_NAME_MAX];
    * s) g, a4 m  v. @+ T
  4.     rt_strncpy(device_name, IWDG_DEVICE_NAME, RT_NAME_MAX);7 w2 }5 A2 Z0 j9 M/ b
  5.     /* 根据设备名称查找看门狗设备,获取设备句柄 */0 I: ^+ A- f. W! S
  6.     wdg_dev = rt_device_find(device_name);
    4 p  \! g0 M: i4 S0 V
  7.     if (!wdg_dev)
    : P' V/ G( \% ~: p$ f) A( @0 k
  8.     {* N0 s1 G8 K& \8 f
  9.                  ' i# R% i/ M& e8 t: X' V; `
  10.         return RT_ERROR;& b% E7 u1 S  w& y; F+ c6 K' |
  11.     }4 p" Y/ {, W7 f4 M8 [1 V  p
  12.         else
    6 Q& }$ L0 I- t( R- V
  13.         {
    8 X8 i9 @+ z* c" O
  14.              rt_kprintf("find %s succeed!\n", device_name);6 D8 ?5 X# g, ~6 I
  15.         }. R1 n8 Z" }) b; q( T2 O, A
  16.     /* 初始化设备 */, {) y, `3 Z- b8 E" k
  17.     ret = rt_device_init(wdg_dev);0 k/ _. b2 @% u
  18.     if (ret != RT_EOK)4 S" w: t+ x. Q4 F* ]$ G3 x
  19.     {               
    0 y! D$ r( Q1 a) A+ f
  20.                          ) _# q, O7 e" \  d, e6 \3 |
  21.         return RT_ERROR;5 ]9 b; o- U+ P1 _/ c& T
  22.     }' |( B- G! P& z, [, x
  23.         else; o- f% E, g8 u" j6 E& M1 F
  24.         {   
复制代码
使用道具 举报 回复
发表于 2019-9-11 11:07:40 | 显示全部楼层
flyboy 发表于 2019-9-10 17:24
. e+ v: K; _* h- e7 aota升级时一直在占用mcu,进不了空闲函数无法喂狗,- _7 i1 }0 {% o: u! [$ Y2 t
在进行ota升级之前先改变一些WGT的触发时间,改的大一点 ...
* q6 {8 ?8 t! M. _
我这边又试了一下使用例程的CMD模式  结果是一样的   WGT 和  OTA都是例程  开启WGT后再开OTA  就会重启
使用道具 举报 回复
发表于 2019-9-11 14:26:20 | 显示全部楼层
本帖最后由 jamguo 于 2019-9-11 14:31 编辑 1 D& g" B( N7 T2 ?1 [6 `7 {

3 |+ Z. |0 y5 M* G9 m  o目前一直打日志追溯,找到了一直卡在 webclient -> webclient_handle_response 的循环里   不开看门狗的话 大概循环20次就能更新 ,开看门狗估计更新8次这样就复位了,看来还是看门狗时间的问题 可是这个参数我甚至调到  30000==30S了 还是一样。。。
使用道具 举报 回复
发表于 2019-9-11 14:58:29 | 显示全部楼层
本帖最后由 jamguo 于 2019-9-11 15:50 编辑
' I  x( l1 @$ ]; s) R
8 f- ^/ W1 }: Q; f/ d& v晕  还是出问题了  没有关掉看门狗 ,。。。。话说  这个。。。。
+ S" A0 A( C. S' ^% m) e1 A4 x( r1 J3 m. {0 f" k6 V2 t  Q0 I( X
static rt_err_t wdt_control(rt_watchdog_t *wdt, int cmd, void *arg)! `% N% k. A# A/ O( L! H0 P
{/ z  B6 Y5 j2 L' r
    switch (cmd)
% v1 A% f! _5 x0 i/ s; X    {5 V5 {* s2 g5 y# M" r
        /* feed the watchdog */
! v6 n' p$ s4 N9 V7 _7 Z. b$ W    case RT_DEVICE_CTRL_WDT_KEEPALIVE:6 Z& v" J( Q5 {3 ]; q
        HAL_IWDG_Refresh(&hiwdg);
: ~# a0 b: |8 {! R% Y6 i        break;* ]' ?2 D2 ^% }
        /* set watchdog timeout */3 y2 [! W8 W* c8 E* M  K, T
    case RT_DEVICE_CTRL_WDT_SET_TIMEOUT:8 @/ M# ~2 c5 t) x
        hiwdg.Init.Reload = *((rt_uint32_t*)arg);" y' a& |9 G8 ?4 V5 F4 L
        if (HAL_IWDG_Init(&hiwdg) != HAL_OK)/ p9 O- Y/ o8 D; v( b$ S( i
        {) A$ Z" G  v2 i6 F
            LOG_E("wdg set timeout failed.");
: |# i9 k* o# {2 H9 K4 M4 b$ m- }            return -RT_ERROR;  I; b; W/ f2 j( c1 _; z
        }8 r" R8 u) l5 r% D3 a7 E) t  r
        break;
/ X& B0 T8 a: G' f    default:
0 Q9 o4 }1 \) B2 j3 @        return -RT_ERROR;1 k& b1 ~6 Y( p" i% T* ?( a& _; ~. W) H
    }
! j6 p0 `2 T) [2 l7 H/ p0 W: R# h    return RT_EOK;1 G) l9 |2 Q4 E( _% j
}
; b- M( o  D+ x  t3 d) ^( `# G9 X, [/ @6 t. }( X
9 F4 k& w4 M; k* T. `
只有设置时间和初始化功能啊/////
% @8 Z' q7 g6 k7 n. k# C7 }1 z* o
3 v9 B$ f) \/ M  m  F5 M* z& X# N: h/ b2 h# U. r
文档里
1 v/ }0 |& G/ _$ X1 k
* {1 x$ U; V6 h! x# f/ C: ?
/ A# x' z# \2 L0 I+ W6 V#define RT_DEVICE_CTRL_WDT_GET_TIMEOUT    (1) /* 获取溢出时间 */#define RT_DEVICE_CTRL_WDT_SET_TIMEOUT    (2) /* 设置溢出时间 */#define RT_DEVICE_CTRL_WDT_GET_TIMELEFT   (3) /* 获取剩余时间 */#define RT_DEVICE_CTRL_WDT_KEEPALIVE      (4) /* 喂狗 */#define RT_DEVICE_CTRL_WDT_START          (5) /* 启动看门狗 */#define RT_DEVICE_CTRL_WDT_STOP           (6) /* 停止看门狗 *// L1 k$ E6 j' h9 ~; C

5 N, J0 g4 I" \- S. _. W5 d
$ X( u/ s/ z/ U- \4 ~  ~7 [
这些是干嘛的/////: n  Q% ?4 s* v
使用道具 举报 回复
发表于 2019-9-12 15:11:02 | 显示全部楼层
jamguo 发表于 2019-9-11 14:58# A9 L* G# {) _8 l- f8 o; S; A3 m7 Q
晕  还是出问题了  没有关掉看门狗 ,。。。。话说  这个。。。。$ y5 V" p9 Q: R, T2 `* c* [0 h
9 R! Q! o8 ^+ t' R0 b- Z
static rt_err_t wdt_control(rt_watchd ...

4 ^3 k! N6 ]+ B' k8 r这是驱动没有实现完成吗,看来写这个的程序员要被祭天了。。。
使用道具 举报 回复
发表于 2019-9-16 11:39:05 | 显示全部楼层
stm32 不支持 停止看门狗 功能。5 X' A' `# v) ~- V
! g3 @. \1 F7 @3 o8 o* X
8 z# v, c8 P6 g! @$ I7 u% B9 L4 n2 v5 Z
8 y/ n+ D, O5 ?, o
另外:( H( I( Q, c) M: Y1 u) N+ w8 b

1 ]& ~5 Z* o+ T我觉得楼主,要么不要用看门狗功能。要么用看门狗功能,就必须要可控的定时喂狗。
! }8 s& z6 s/ k" s0 o! W; U' W1 V6 \/ c! F2 K" H0 G, E- w
在 OTA 升级过程中加入周期性喂狗语句才是正解,而不是通过关闭看门狗来解决。
使用道具 举报 回复
发表于 2019-9-16 11:44:30 | 显示全部楼层
来一颗糖 发表于 2019-9-16 11:39
- Z! E( i0 v# L( m" Nstm32 不支持 停止看门狗 功能。

5 f7 x2 J0 M0 U/ k现在可以了 ,是这个驱动设定时间的问题 它以前只有溢出时间,没有加分频系数在里边,所以你设定多少都是有一个最大值的,把分屏系数加进去就好了,升级后把看门狗调2分钟
使用道具 举报 回复
发表于 2019-9-16 13:46:39 | 显示全部楼层
jamguo 发表于 2019-9-16 11:44! r; }- Y) g3 z; |3 u& C7 Z/ \
现在可以了 ,是这个驱动设定时间的问题 它以前只有溢出时间,没有加分频系数在里边,所以你设定多少都是 ...

$ N& z9 M1 X0 w- ^stm32 LSI 为 32khz 的 独立看门狗最多设置溢出时间 32.768 秒;LSI 为 40 kHz 的最多设置溢出时间 26.2144 秒。不可能设置成两分钟的。
使用道具 举报 回复
发表于 2019-9-17 15:41:07 | 显示全部楼层
来一颗糖 发表于 2019-9-16 13:46
9 p% i7 G7 c) R8 R* kstm32 LSI 为 32khz 的 独立看门狗最多设置溢出时间 32.768 秒;LSI 为 40 kHz 的最多设置溢出时间 26.21 ...

# g& p! W! y; N, e1 J0 e" @。。。。加了点判断。。要不这个时间也不够用啊
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 6 主题
  2. 234 帖子
  3. 234 积分

Ta的主页 发消息

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

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