cc3200 reboot 无法启动
我没有使用TI ota的lib进行OTA升级,自己写的一个简单的tcp socket ,服务端也是简单的用socket 进行文件传输,收到升级的新文件后,调用了
static void RebootMCU()
{
//
// Configure hibernate RTC wakeup
//
PRCMHibernateWakeupSourceEnable(PRCM_HIB_SLOW_CLK_CTR);
//
// Delay loop
//
Report("Delay loop...\r\n");
MAP_UtilsDelay(8000000);
//
// Set wake up time
//
Report("Set wake up time...\r\n");
PRCMHibernateIntervalSet(330);
//
// Request hibernate
//
Report("Request hibernate...\r\n");
PRCMHibernateEnter();
//
// Control should never reach here
//
while(1)
{
}
}
这个函数后,系统无法重启,从串口看log,卡住了(没有重新从main启动)。我烧录的application_bootloader是从SDK中编译出来的,没有改动,升级后用Uniflash 查看的文件列表 见附件。而且发现升级后读取/sys/mcubootinfo.bin 明明是把img状态写进去了,而且也把文件正常关闭了,但是当我软件重启失败后,用硬件reset,后再次打印文件内容,发现读取的还是默认的数值, 所以我有点怀疑,软件reset 可能是卡在了读取/sys/mcubootinfo.bin 整个文件的操作上,这只是猜测。
追问一下,我的程序里面运行了几个TASK,OTA 是其中的一个TASK,如果有TASK,处于BLOCK状态,尤其是优先级比OTA TASK 要高的TASK,处于BLOCK状态,会不会影响reboot?
发现一个问题,如果我不用SDK 里面的application_bootloader.bin 作为mcuimg.bin的话,用上面的RebootMCU方法就可以重启成功,如果用了就会系统卡住,起不起来了,TI的工程师有什么好的调试建议么?可能是什么原因造成的?
PS:application_bootloader.bin里面加不了log,加入的话就会出现编译不通过,提示内存越界了
刚刚加了log,发现调用RebootMCU后代码运行到了 bootmgr main.c 里面的 Run(APP_IMG_SRAM_OFFSET); 之后就没有然后了, 系统就卡住了,TI工程师能帮忙分析一下么?
找到问题了,RebootMCU没问题,问题是我个人的 写文件出现了错误,文件大小有问题