这篇我们接着分析boot部分的程序设计。MCU重启后首先运行的就是boot程序,通过判断flag区有没有新固件更新的标志,如果有就更新固件;没有就跳转到app程序。
1. 官方关于boot程序流程的介绍
2. 我们先来看看main函数的逻辑
int main(void)
{
SystemInit();
#ifdef DEBUG
usart1_init();
#endif
memset((uint8_t *)&update_param, 0 , sizeof(update_param_def));
rFlashData((uint8_t *)&update_param, sizeof(update_param_def), //读取Flag区数据
UPDATE_PARAM_SAVE_ADDR_BASE);
if(0xEEEE == update_param.rom_statue) //如果有固件更新标志,准备更新固件
{
if(0 == ROM_MD5_Check(update_param.rom_size , SYS_APP_BAK_SAVE_ADDR_BASE , update_param.ssl_data)) //校验MD5值通过,更新固件
{
update_new_system(update_param.rom_size);
}
else //校验失败,擦除备份区的固件,运行原app程序