BOOTLOADER与WGT冲突

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

这边使用OTA_HTTP升级,控制台输入URL之后直接就进硬件错误了,开启WGT后会这样,关闭就没有问题。请问这是为啥呢?
2 u% t: M" r1 k6 t$ S2 f0 Y
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-9-10 17:24:25 | 显示全部楼层
ota升级时一直在占用mcu,进不了空闲函数无法喂狗,: d9 l0 q! f# m( y5 g
在进行ota升级之前先改变一些WGT的触发时间,改的大一点试试
使用道具 举报 回复
发表于 2019-9-10 17:28:59 | 显示全部楼层
flyboy 发表于 2019-9-10 17:240 q4 H- m" q6 Z4 L* E& D
ota升级时一直在占用mcu,进不了空闲函数无法喂狗,  G( v" y7 _9 J7 h4 P/ S7 Z: G) k
在进行ota升级之前先改变一些WGT的触发时间,改的大一点 ...
; ~8 n) h/ n  b+ r
好的 谢谢 我这边试试
使用道具 举报 回复
发表于 2019-9-11 10:59:12 | 显示全部楼层
本帖最后由 jamguo 于 2019-9-11 11:00 编辑
6 k( j9 S7 z3 y7 |+ R% A- x0 Y
flyboy 发表于 2019-9-10 17:24
/ @$ U1 b" U' S. Vota升级时一直在占用mcu,进不了空闲函数无法喂狗,
" |& a+ H/ N' `/ j在进行ota升级之前先改变一些WGT的触发时间,改的大一点 ...
/ u. G4 c- T# c
改的很大了,,,,还是不行,一进OTA准备下载就直接重启
# y' c' n  l8 e% c$ k' E8 W. q- W0 |3 z& V) L4 B7 x# C
  1. rt_err_t ret = RT_EOK;  ~8 `" C3 K5 v% c& q; {# I. w  T
  2.     rt_uint32_t timeout = 300000;    /* 溢出时间 */2 y  a$ x7 o# x, ]$ K
  3.     char device_name[RT_NAME_MAX];
    8 x2 f4 g  }3 g  H
  4.     rt_strncpy(device_name, IWDG_DEVICE_NAME, RT_NAME_MAX);
    $ X# o& X% p, v* E, y; N9 D7 C/ G
  5.     /* 根据设备名称查找看门狗设备,获取设备句柄 */
    & t$ x8 y' y8 e  i
  6.     wdg_dev = rt_device_find(device_name);
    , e# K6 K" Z' w( U5 p
  7.     if (!wdg_dev)  T9 G0 d; }5 U
  8.     {
    + k, Q' o8 {$ E( x, B& D. C1 ]$ U
  9.                  
    / X4 a) n. l  W& E- |9 X+ |
  10.         return RT_ERROR;/ A9 m; P% F- e. k) I7 p3 r# D
  11.     }/ Z4 P0 e$ _) G$ P6 s. K
  12.         else
    ( `' Q6 `+ [6 d, M9 Z4 a  @  M
  13.         {" d# F8 I: k) K# e
  14.              rt_kprintf("find %s succeed!\n", device_name);3 I* i* S. i% y% Y1 q
  15.         }
    4 j& L% n+ G( |$ m
  16.     /* 初始化设备 */7 q! D$ [# E3 u* ?0 @0 q3 }
  17.     ret = rt_device_init(wdg_dev);
    2 w  q$ k% |6 T
  18.     if (ret != RT_EOK)
    * e" p6 P2 U# W
  19.     {                ) F" e+ ]! z' Z. n; B
  20.                          2 H1 c% e" i4 b$ a
  21.         return RT_ERROR;$ K. b+ ?5 e9 ~# j: v! X
  22.     }+ o" ]0 h/ p* w
  23.         else& e2 C; h6 ?6 [8 h" F0 A2 j$ }
  24.         {   
复制代码
使用道具 举报 回复
发表于 2019-9-11 11:07:40 | 显示全部楼层
flyboy 发表于 2019-9-10 17:24
" K- N1 I' \% n! |+ cota升级时一直在占用mcu,进不了空闲函数无法喂狗,
5 H; i) l. J$ }9 l' \在进行ota升级之前先改变一些WGT的触发时间,改的大一点 ...

* ]* B* D' M2 N+ k我这边又试了一下使用例程的CMD模式  结果是一样的   WGT 和  OTA都是例程  开启WGT后再开OTA  就会重启
使用道具 举报 回复
发表于 2019-9-11 14:26:20 | 显示全部楼层
本帖最后由 jamguo 于 2019-9-11 14:31 编辑   c8 S' z5 S. s1 i6 \

; k3 L0 ^7 s# W& n% D! j/ N目前一直打日志追溯,找到了一直卡在 webclient -> webclient_handle_response 的循环里   不开看门狗的话 大概循环20次就能更新 ,开看门狗估计更新8次这样就复位了,看来还是看门狗时间的问题 可是这个参数我甚至调到  30000==30S了 还是一样。。。
使用道具 举报 回复
发表于 2019-9-11 14:58:29 | 显示全部楼层
本帖最后由 jamguo 于 2019-9-11 15:50 编辑 9 ]: M  @8 ~- g. Q' ~: u3 v# T
; p$ e- O$ X$ @
晕  还是出问题了  没有关掉看门狗 ,。。。。话说  这个。。。。+ J. s" y; I0 s1 b% p) o+ c; y
: ~0 g& K6 P' Z6 \* d7 V1 m4 a
static rt_err_t wdt_control(rt_watchdog_t *wdt, int cmd, void *arg)% D) ^/ @9 K1 z9 a3 f
{
1 q3 ~0 X0 Z4 {& h* @6 D6 D- K    switch (cmd)! e7 Z. [1 a, B# [0 |- w
    {
$ [; m2 M0 w/ m% m2 r! Y/ A4 K+ O& r        /* feed the watchdog */$ S" w( w+ Z5 Q# i; s4 C0 D1 K, [
    case RT_DEVICE_CTRL_WDT_KEEPALIVE:
% a. }, _3 \' v3 T9 _- ^+ J) v        HAL_IWDG_Refresh(&hiwdg);7 K  M; C  s3 h; [# P% w: N
        break;7 [5 \7 z  m/ ^5 t* q+ b0 }- G
        /* set watchdog timeout */% D4 Y' R3 v9 N: K
    case RT_DEVICE_CTRL_WDT_SET_TIMEOUT:+ m/ z9 L& r& C. J1 x4 q5 a
        hiwdg.Init.Reload = *((rt_uint32_t*)arg);  P0 j5 X( i% Z2 ~8 d6 t) D8 c
        if (HAL_IWDG_Init(&hiwdg) != HAL_OK)5 w8 _+ \% M$ a2 ]& y6 l
        {
5 b4 y7 D# y2 B3 v; u6 T, R4 H            LOG_E("wdg set timeout failed.");
3 i* J7 J/ b* _6 e0 `            return -RT_ERROR;/ s: N4 x8 Y# O' }1 i1 E. g
        }
) {+ p# x1 s3 o$ @4 l; j" @        break;+ L' h; t5 k3 P0 q9 Y  F7 U1 m
    default:
: W6 T- f% @' L; n* a4 r. o! W        return -RT_ERROR;
1 M5 l5 h; |! X% D; h    }  d3 u! f& R9 d/ h, c
    return RT_EOK;
1 a' ]& }% Y/ m, Q1 r! t& ]: L}
/ d5 g7 |  d1 o- k' p4 A' ]5 h" k+ l
$ R/ f/ T- `0 ]) k9 s2 t3 C
只有设置时间和初始化功能啊/////
$ B# H4 \( S& m. s/ f9 f. C7 O, ~& ~8 r" \

1 D. {6 l. I9 f. J; P1 y0 N文档里
' a4 M- }5 R* A+ ~
+ I' ~( ^1 n6 C  n6 r5 H$ i. B* _+ @
( v: w# m8 I9 h$ t#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) /* 停止看门狗 */3 Z6 {. l' p" ?( }" k" L% B! D1 s

7 v. b  q3 G+ M" o

* @- M2 j( L' Q0 n( ^9 [这些是干嘛的/////
0 Q# }3 g: y" e! W
使用道具 举报 回复
发表于 2019-9-12 15:11:02 | 显示全部楼层
jamguo 发表于 2019-9-11 14:58: b" k) A6 b3 h3 Q; K
晕  还是出问题了  没有关掉看门狗 ,。。。。话说  这个。。。。6 E8 [0 x  v  U& k  [4 K/ r

( G9 a+ m9 Z8 \* M6 {! Ostatic rt_err_t wdt_control(rt_watchd ...
. w# L3 S2 d; P( j% ^8 Z& D' m! g4 r
这是驱动没有实现完成吗,看来写这个的程序员要被祭天了。。。
使用道具 举报 回复
发表于 2019-9-16 11:39:05 | 显示全部楼层
stm32 不支持 停止看门狗 功能。# M! K, l/ R+ v3 E

5 U4 r& R. v- [5 b
0 n- l. i2 B4 ^0 h2 L: {4 f9 f: ?% m! f4 u
另外:
7 K# w7 s9 H+ b8 u" m) Q
* _& J& _- {( p. y3 z$ T我觉得楼主,要么不要用看门狗功能。要么用看门狗功能,就必须要可控的定时喂狗。
7 d5 n# R, p( B( S/ \! s5 h+ H, G- ]/ h4 q( B" c
在 OTA 升级过程中加入周期性喂狗语句才是正解,而不是通过关闭看门狗来解决。
使用道具 举报 回复
发表于 2019-9-16 11:44:30 | 显示全部楼层
来一颗糖 发表于 2019-9-16 11:39
: k! r% k; n6 r9 ?* C, c4 Ystm32 不支持 停止看门狗 功能。

. j; b/ B& }7 T! |) v3 `0 u现在可以了 ,是这个驱动设定时间的问题 它以前只有溢出时间,没有加分频系数在里边,所以你设定多少都是有一个最大值的,把分屏系数加进去就好了,升级后把看门狗调2分钟
使用道具 举报 回复
发表于 2019-9-16 13:46:39 | 显示全部楼层
jamguo 发表于 2019-9-16 11:44
/ S+ M6 N/ \( O7 c% W. \7 u现在可以了 ,是这个驱动设定时间的问题 它以前只有溢出时间,没有加分频系数在里边,所以你设定多少都是 ...

. y$ s& s9 N% ]1 p) H: [stm32 LSI 为 32khz 的 独立看门狗最多设置溢出时间 32.768 秒;LSI 为 40 kHz 的最多设置溢出时间 26.2144 秒。不可能设置成两分钟的。
使用道具 举报 回复
发表于 2019-9-17 15:41:07 | 显示全部楼层
来一颗糖 发表于 2019-9-16 13:46' Z3 M# q! G$ O6 a8 g, |
stm32 LSI 为 32khz 的 独立看门狗最多设置溢出时间 32.768 秒;LSI 为 40 kHz 的最多设置溢出时间 26.21 ...
% P4 o" R4 E* _% V4 C- ~9 Y
。。。。加了点判断。。要不这个时间也不够用啊
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

Powered by RT-Thread

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