你好,我们在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信息】