BOOTLOADER与WGT冲突

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

这边使用OTA_HTTP升级,控制台输入URL之后直接就进硬件错误了,开启WGT后会这样,关闭就没有问题。请问这是为啥呢?% p0 Q3 ~, @- \' H5 W  p
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-9-10 17:24:25 | 显示全部楼层
ota升级时一直在占用mcu,进不了空闲函数无法喂狗,
! |0 w- }4 |) ]$ Y0 l# D在进行ota升级之前先改变一些WGT的触发时间,改的大一点试试
使用道具 举报 回复
发表于 2019-9-10 17:28:59 | 显示全部楼层
flyboy 发表于 2019-9-10 17:249 H; M' g9 e. t+ Q+ t! W1 k
ota升级时一直在占用mcu,进不了空闲函数无法喂狗,
) I5 D* w2 I- r8 I/ N% N3 v: a在进行ota升级之前先改变一些WGT的触发时间,改的大一点 ...
4 `5 T; C8 s9 `8 A
好的 谢谢 我这边试试
使用道具 举报 回复
发表于 2019-9-11 10:59:12 | 显示全部楼层
本帖最后由 jamguo 于 2019-9-11 11:00 编辑 4 M4 y; }) W! e  ]3 J! g
flyboy 发表于 2019-9-10 17:24
/ g6 `/ R8 w8 Sota升级时一直在占用mcu,进不了空闲函数无法喂狗,
( J: i) T4 z$ b" y; }' V$ a在进行ota升级之前先改变一些WGT的触发时间,改的大一点 ...

$ M% D. f; }; ?3 Q5 n; b改的很大了,,,,还是不行,一进OTA准备下载就直接重启
$ e8 \& |+ a( K4 |0 _, j: d# W7 `; ?4 d; ^) [  H, K0 @8 N
  1. rt_err_t ret = RT_EOK;
    % Y' `( m# l: R2 c  y# d
  2.     rt_uint32_t timeout = 300000;    /* 溢出时间 */
    1 n1 S. E: M( H) a+ R% W
  3.     char device_name[RT_NAME_MAX];& U& [% S6 h3 M+ u- K0 @
  4.     rt_strncpy(device_name, IWDG_DEVICE_NAME, RT_NAME_MAX);; K- S; Q+ r  X0 k5 r- W
  5.     /* 根据设备名称查找看门狗设备,获取设备句柄 */
    0 M" o( C& X2 P) P  a$ j/ Q$ M
  6.     wdg_dev = rt_device_find(device_name);
    5 k- A# Y7 L" j! q0 h
  7.     if (!wdg_dev)
    * s/ E# c% o4 a+ C+ Q1 v
  8.     {
    # t5 T5 v* z* C0 p0 Z4 g. k
  9.                  
    ; C3 D3 B- j% F  j
  10.         return RT_ERROR;
    ! _4 S' g4 c: w: a; M2 |
  11.     }1 L" E. S/ L5 [
  12.         else7 \0 @3 s  [: e- f1 x
  13.         {
    6 B  [3 O9 K9 u7 u1 t* H* M1 D
  14.              rt_kprintf("find %s succeed!\n", device_name);5 L9 F; l2 |* e! X7 E
  15.         }
    & i2 R; r* d4 S' c1 a5 ~4 d' N! b
  16.     /* 初始化设备 */
    % E6 I9 \2 Y( w1 Y
  17.     ret = rt_device_init(wdg_dev);
    : P8 ~4 `2 S# H# |: j$ [
  18.     if (ret != RT_EOK)
    0 m* X+ P! T0 ~& h  _2 _" a) r
  19.     {               
    9 Y! h4 j5 j2 T' C5 @( }
  20.                          ! V: u% B" d' V. x$ g$ F
  21.         return RT_ERROR;" e  u6 c3 T. E! R) L  o3 f4 N
  22.     }. u7 C9 o3 e( A' H2 f
  23.         else
    5 H+ S+ z/ X% Z" I: T1 D+ u
  24.         {   
复制代码
使用道具 举报 回复
发表于 2019-9-11 11:07:40 | 显示全部楼层
flyboy 发表于 2019-9-10 17:24
+ n+ A" L0 G  r  H( Yota升级时一直在占用mcu,进不了空闲函数无法喂狗,3 X2 Z+ R2 T, O" X, G- U( @3 W. p
在进行ota升级之前先改变一些WGT的触发时间,改的大一点 ...
& x9 W9 V3 ]! E1 p! H
我这边又试了一下使用例程的CMD模式  结果是一样的   WGT 和  OTA都是例程  开启WGT后再开OTA  就会重启
使用道具 举报 回复
发表于 2019-9-11 14:26:20 | 显示全部楼层
本帖最后由 jamguo 于 2019-9-11 14:31 编辑 7 ^2 y0 h1 f2 N' Y2 A2 S2 l! F
  w  s0 m+ [% F, M% F1 ^! y
目前一直打日志追溯,找到了一直卡在 webclient -> webclient_handle_response 的循环里   不开看门狗的话 大概循环20次就能更新 ,开看门狗估计更新8次这样就复位了,看来还是看门狗时间的问题 可是这个参数我甚至调到  30000==30S了 还是一样。。。
使用道具 举报 回复
发表于 2019-9-11 14:58:29 | 显示全部楼层
本帖最后由 jamguo 于 2019-9-11 15:50 编辑 6 ?0 B  D) W# ?  ?; k
/ u1 E6 R5 ~; a; o. }) U
晕  还是出问题了  没有关掉看门狗 ,。。。。话说  这个。。。。
7 O0 E6 C% }9 P+ T# Z# h: S5 p2 p
static rt_err_t wdt_control(rt_watchdog_t *wdt, int cmd, void *arg)% k* b$ [& a) N( B6 W2 o/ u
{
* U5 W( r. b! }( f5 d    switch (cmd)2 M- d+ g2 m) N
    {6 l3 l. z3 ~) d% Z8 o6 I' _& ^" c' V
        /* feed the watchdog */
% O2 C4 W+ M1 A* l5 c% O" }1 r    case RT_DEVICE_CTRL_WDT_KEEPALIVE:
: |4 v4 U; f0 U( e& x/ X) @        HAL_IWDG_Refresh(&hiwdg);. y- v% ^* U9 @- l
        break;
+ W! i8 w! f+ t1 t' t        /* set watchdog timeout */! C* e/ `9 j3 u) ~# u" g
    case RT_DEVICE_CTRL_WDT_SET_TIMEOUT:
* l; ?4 j% ]0 ~1 f; h0 A        hiwdg.Init.Reload = *((rt_uint32_t*)arg);
  ?, r& ]; X: b% p        if (HAL_IWDG_Init(&hiwdg) != HAL_OK), T) I) {$ y5 ?
        {
( T; |& d" J" D3 y            LOG_E("wdg set timeout failed.");' S7 j: W7 q7 [7 c8 x( S. N
            return -RT_ERROR;) ]7 d( o) S" C
        }. `; f8 a) J% |& M. o  g# \
        break;! a$ T+ f9 z" M0 v' _
    default:, \5 ^4 `# ]3 r7 k6 K8 v0 x( f8 f
        return -RT_ERROR;2 m; i9 J% {) c2 D& E
    }
: }" e! p) w. c) ]$ i- z    return RT_EOK;9 `0 \- N4 s8 l$ u
}- O9 W! d; P. k6 _7 N
/ o2 `, H& ?, H
; v: Y9 m8 c$ g
只有设置时间和初始化功能啊/////
/ C' o& a( n" o! B' t$ ~7 _  V1 l! |7 \# ?& b

4 S7 G/ Q% D. ?! d文档里
$ L* U/ b. Q' p' ^1 i9 u& Z* ]$ O: i. F! |% g7 H$ U. u! x
& i0 y" H$ T: C  M) n
#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) /* 停止看门狗 */
1 ^' B' {1 {7 ~$ R4 `5 i# ]9 |# A
4 q4 L! k; r% Y: L1 y$ [
5 ~) ?: T3 c7 Q8 x0 z! e" Z. K2 {
这些是干嘛的/////" o. r* Z; a7 O/ U+ R7 N* O/ Q7 H
使用道具 举报 回复
发表于 2019-9-12 15:11:02 | 显示全部楼层
jamguo 发表于 2019-9-11 14:58
/ Q/ m! |! ~; f, F晕  还是出问题了  没有关掉看门狗 ,。。。。话说  这个。。。。* m. F3 a" w$ o( h
) E" p  A. k' K9 y; ^0 P. g
static rt_err_t wdt_control(rt_watchd ...

" R4 A, o: w* ?! x  [/ @" s这是驱动没有实现完成吗,看来写这个的程序员要被祭天了。。。
使用道具 举报 回复
发表于 2019-9-16 11:39:05 | 显示全部楼层
stm32 不支持 停止看门狗 功能。1 G, G8 g: o- {  m5 q' E
- e+ @8 H7 B2 _3 V

0 v( _2 J9 Z5 m$ n
2 [4 I3 e# l; Q. ^' Y7 }- I4 `0 l另外:
" p0 y+ q% B  H1 p: _, z. |
# r1 }; X; W1 n我觉得楼主,要么不要用看门狗功能。要么用看门狗功能,就必须要可控的定时喂狗。
- L' C% w* \# u* G) z4 Y1 X
3 p$ Y  @/ t* z* {/ }在 OTA 升级过程中加入周期性喂狗语句才是正解,而不是通过关闭看门狗来解决。
使用道具 举报 回复
发表于 2019-9-16 11:44:30 | 显示全部楼层
来一颗糖 发表于 2019-9-16 11:39
4 Y* N, v4 Z: I  jstm32 不支持 停止看门狗 功能。

* D) w  `- s- g* m1 Z5 ~现在可以了 ,是这个驱动设定时间的问题 它以前只有溢出时间,没有加分频系数在里边,所以你设定多少都是有一个最大值的,把分屏系数加进去就好了,升级后把看门狗调2分钟
使用道具 举报 回复
发表于 2019-9-16 13:46:39 | 显示全部楼层
jamguo 发表于 2019-9-16 11:44
+ ]- B: J* j9 c$ @$ P3 i; ]现在可以了 ,是这个驱动设定时间的问题 它以前只有溢出时间,没有加分频系数在里边,所以你设定多少都是 ...
4 |  b1 V6 _# t7 p% X7 c
stm32 LSI 为 32khz 的 独立看门狗最多设置溢出时间 32.768 秒;LSI 为 40 kHz 的最多设置溢出时间 26.2144 秒。不可能设置成两分钟的。
使用道具 举报 回复
发表于 2019-9-17 15:41:07 | 显示全部楼层
来一颗糖 发表于 2019-9-16 13:46' b0 o% k8 z, b; x7 ^: \
stm32 LSI 为 32khz 的 独立看门狗最多设置溢出时间 32.768 秒;LSI 为 40 kHz 的最多设置溢出时间 26.21 ...
/ ?: Y9 V7 i$ `# N
。。。。加了点判断。。要不这个时间也不够用啊
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

Powered by RT-Thread

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