基于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);//解除中断屏蔽,打开中断

 

posted @ 2023-03-18 22:28  realiot  阅读(2039)  评论(0)    收藏  举报