主程序中有一个变量,该变量是一个结构体类型
typedef struct at_cmd_s
{
const uint8_t type;
const char * cmd;
const uint8_t len;
}at_cmd_t;
static at_cmd_t cmd_ati = {1, "ATI",3};
程序运行后,在主程序串口初始化完成后立即打印cmd_ati.type值,发现该值不是1了,将uint8_t改成uint32_t后,打印数值正常,但是这个不是根本原因,通过调试发现,在bootload跳转前关闭全局中断,在主程序SCB->VTOR = FLASH_APP_START_ADDR设置中断向量后在打开全局中断,打印该值正常了,因为打印在程序初始化阶段,没有数组越界问题,最终发现bootload中的SysTick_Handler一直在运行,跳转到主程序了,中断向量还没有改,中断服务函数将bootload中uwTick的内存地址数据进行的加加,所以bootload跳转到主程序前一定要关闭所有中断,程序初始化运行完后,在开启中断
__weak void HAL_IncTick(void)
{
uwTick += (uint32_t)uwTickFreq;
}