你好,我们在OOB工程中加了自己的程序,并且程序正常可用,但是在OTA软件升级并且软件重启 后,程序会就卡死,如果要解决这个问题,可以掉电重启,掉电重启后不会卡死。请问有什么办法可以解决不掉电直接软件重启并不卡死嘛?
Viki Shi:
是否有信息输出,查看具体卡在哪一步?
,
user4696099:
无法仿真,面看不到具体卡在哪里。开了看门狗,但是看门狗好像没有起作用
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); }
,
Viki Shi:
"如果要解决这个问题,可以掉电重启,掉电重启后不会卡死" 重启过后的程序是更新前还是更新后的?
,
user4696099:
更新后的
,
Viki Shi:
请问你使用的是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 CC32XXint32_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信息】