基于FREERTOS的BOOTLOADER跳转APP调试笔记
使用场景:BootLoader基于Freertos,APP是裸机 程序。
BootLoader设置方法
void iap_app_load(uint32_t appxaddr)
{
uint32_t temp;
if (((*(vu32*)appxaddr) & 0x2FFE0000) == 0x20000000) {
test_rtt_printf(3, 0, "\r\nNormal mode,start to jump to app from bootloader!\r\n");
__set_PRIMASK(1);//bootloader在进入app之前使用__set_PRIMASK(1);函数关闭中断,在app中需要将中断打开__set_PRIMASK(0);
__set_CONTROL(0);//使用操作系统后系统内核会使用PSP模式,跳转到APP后没有恢复到MSP模式就会导致内存异常从而进入到内存异常中断
jump2app = (iapfun) * (vu32*)(appxaddr + 4);
__set_MSP(*(vu32*)appxaddr);
jump2app();
} else {
test_rtt_printf(3, 0, "\r\nERROR,there is no app data maybe!\r\n");
}
}
APP设置方法(main函数最开始位置添加)
SCB->VTOR=APP_FLASH_DATA_ADDRESS; //将程序中断向量重定义至APP代码起始位置 APP_FLASH_DATA_ADDRESS用户要自定义
__set_PRIMASK(0);//解除中断屏蔽,打开中断

浙公网安备 33010602011771号