你好,我们在OOB工程中加了自己的程序,并且程序正常可用,但是在OTA软件升级并且软件重启 后,程序会就卡死,如果要解决这个问题,可以掉电重启,掉电重启后不会卡死。请问有什么办法可以解决不掉电直接软件重启并不卡死嘛?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你好,我们在OOB工程中加了自己的程序,并且程序正常可用,但是在OTA软件升级并且软件重启 后,程序会就卡死,如果要解决这个问题,可以掉电重启,掉电重启后不会卡死。请问有什么办法可以解决不掉电直接软件重启并不卡死嘛?
无法仿真,面看不到具体卡在哪里。开了看门狗,但是看门狗好像没有起作用
void WatchCallbackFxn(Watchdog_Handle watchdogHandle)
{
Watchdog_clear(watchdogHandle);
}
watchdog_Init()
{
watchdog_init();
Watchdog_Params_init(¶ms);
params.resetMode = Watchdog_RESET_ON;
params.callbackFxn = (Watchdog_Callback) WatchCallbackFxn;
watchdogHandle = Watchdog_open(CONFIG_WATCHDOG_0,¶ms);
if( watchdogHandle == NULL )
{
usleep(1);
}
}
void * controlTask(void *pvParameters)
{
........
Watchdog_setReload(watchdogHandle, 150000);
}
请问你使用的是TI launchpad还是自制板?
在OTA时推荐用bootloader来使用看门狗,需要写入"/sys/mcubootinfo.bin" 文件并且设置sBootInfo.ulStartWdtTime。请参考一下下面的代码【来自CloudOTA example】。在reset后【即系统文件已就位】,boot loader会在运行新image之前设置WDT。假如WDT超时【新image没有正确提交】,bootloader即返回到原先的image
int32_t Platform_CommitWdtConfig(int32_t TimeoutInSeconds)
{
#ifdef CC32XX
int32_t lFileHandle;
uint32_t ulToken = 0;
sBootInfo_t sBootInfo;
int32_t lRetVal;
lFileHandle = sl_FsOpen(
(unsigned char *)"/sys/mcubootinfo.bin",
SL_FS_CREATE | SL_FS_OVERWRITE |
SL_FS_CREATE_MAX_SIZE(
sizeof(sBootInfo)) |
SL_FS_CREATE_SECURE | SL_FS_CREATE_PUBLIC_WRITE |
SL_FS_CREATE_NOSIGNATURE,
(_u32 *)&ulToken);
if(0 > lFileHandle)
{
//OTA_DBG_PRINT("OtaWatchDog: Error opening bootinfo file
// : %d\n\r",lFileHandle);
return(-1);
}
memset(&sBootInfo,0,sizeof(sBootInfo_t));
/* max 104 seconds */
sBootInfo.ulStartWdtTime = 40000000 * TimeoutInSeconds;
sBootInfo.ulStartWdtKey = APPS_WDT_START_KEY;
lRetVal =
sl_FsWrite(lFileHandle, 0, (uint8_t*)&sBootInfo, sizeof(sBootInfo_t));
lRetVal = sl_FsClose(lFileHandle, 0, 0, 0);
if(0 != lRetVal)
{
//OTA_DBG_PRINT("OtaWatchDog: Failed to close the bootinfo file");
return(-1);
}
#endif
//Enable WDT - done by PRCMCC3200MCUInit
//HWREG(0x4402E188) |= 0x00000020;
return(0);
}
在MCU reset之前,确保先调用"sl_Stop()"
假如还有问题,请把整个OTA过程的log信息传上来【在otauser.h中,使能 "SL_ENABLE_OTA_DEBUG_TRACES",即可获取OTA lib的log信息】