我使用finsh控制台进行http_ota正常,放在线程中就卡在64%失败,请问这是为什么呢?
这是软件包升级函数:
void http_ota(uint8_t argc, char **argv)
{
if (argc < 2)
{
rt_kprintf("using uri: " HTTP_OTA_URL "\n");
http_ota_fw_download(HTTP_OTA_URL);
}
else
{
http_ota_fw_download(argv[1]);
}
}
/**
* msh />http_ota [url]
*/
MSH_CMD_EXPORT(http_ota, Use HTTP to download the firmware);
这是我的线程:
void update_thread_entry(void *parameter)
{
while(1)
{
http_ota_fw_download(PKG_HTTP_OTA_URL);
}
}
int update(void)
{
update_thread = rt_thread_create("update_thread",update_thread_entry,RT_NULL,2048,3,10);
if(update_thread != RT_NULL) rt_thread_startup(update_thread);
return RT_EOK;
}
//INIT_APP_EXPORT(update);
MSH_CMD_EXPORT(update, Use HTTP to download the firmware);
使用finsh升级成功:

使用自己线程升级失败:

您好,最开始我也想启动时检测升级,后面我这版要求实现的是在启动后用户自行查看版本与手动升级,硬件使用L496,只使用了内部flash,调试时通过finsh一切正常,放在线程中就失败,是因为其他线程干扰么?可是finsh也是线程,优先级也不高,是finsh在执行操作时采用了什么方法么?我再代码没看到有执行其他的操作
是用户自行查看,手动发送OTA指令呀。我说的操作都是在接收到指令后
哦哦,您说的是接收到OTA命令后重启程序,我以为是启动时,那这样是每次发送检查更新命令都会重启,然后更新在重启,最后更新结束,是么大佬
1.收到指令判断格式对不对,正确则存储到EasyFlash,标志置1(PS:这个标志其实可以用BKP寄存器来保存)然后重启
2.重启后检测标志置1则开始升级。(不管什么值都把这个标志给清0)
3.升级成功或超过最大重试次数就再重启来进入boot搬运程序或进入正常运行模式
明白了大佬,非常感谢
已经解决,非常感谢