nrf52832 DUF功能加看门狗

环境:nrf52832 ,SDK11
问题描述:应用程序中不加WDT时升级功能正常,加了WDT后会在升级一半就重启
原因分析:在升级过程中没有喂狗,导致看门狗发飙了

解决办法:

#ifdef ADD_WDT

static void Feed_WDT(void)
{
    NRF_WDT->RR[0] = WDT_RR_RR_Reload;
}

#endif
static void wait_for_event()
{
    // Transport is waiting for event?
    while(true)
    {
#ifdef ADD_WDT
    Feed_WDT();
#endif

        // Can't be emptied like this because of lack of static variables
#ifdef BLE_STACK_SUPPORT_REQD
        (void)sd_app_evt_wait();
#else
        __WFI();
#endif
        app_sched_execute();
    }
}

2、SDK12以后的版本
问题描述:不加WDT时,升级正常,加了WDT后需要升级两次才能切换到application
问题分析:升级过程是没错的,只是在copy bank1_code to bank0_code时出现了看门狗重启
解决办法:
不仅要在wait_event中喂狗,还要在copy code过程中喂狗

1、

static void wait_for_event()
{
    // Transport is waiting for event?
    while(true)
    {
#ifdef ADD_WDT
    Feed_WDT();
#endif

        // Can't be emptied like this because of lack of static variables
#ifdef BLE_STACK_SUPPORT_REQD
        (void)sd_app_evt_wait();
#else
        __WFI();
#endif
        app_sched_execute();
    }
}

2、
在nrf_dfu_utils.c 中的 nrf_dfu_app_continue喂狗,修改类似下面这样

    // Copy the application down safely
    do
    {

            /* this fix up the bug that need dfu twice to enter application at 2017-10-25 11:43:34  */          
// ADD_WDT
#if 1           
            NRF_WDT->RR[0] = WDT_RR_RR_Reload;
#endif
            cur_len = (length_left > split_size) ? split_size : length_left;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值