嵌入式学习小组
直播中

杨春林

7年用户 887经验值
私信 关注

MCU向量页重新映射的问题怎么解决?

最近用上了新唐的MCU,向量页重新映射的问题一直无法解决。
#define        APPLICAtiON_START_ADDR        (0x6000)


__asm  INT32U  spChange(INT32U _sp)
{
    MSR  MSP, r0
    BX   lr
}

void  application_run(void)
{
    typedef void(*app_entry)(void);
    INT32U   *vectorTable = (INT32U *)(APPLICATION_START_ADDR);
    static   INT32U    _sp = 0;
    static   INT32U    _pc = 0;
    static   app_entry  app = 0;

    _sp = vectorTable[0];
    _pc = vectorTable[1];
    SYS_UnlockReg();//解除寄存器写保护
    FMC_ENABLE_ISP();//使能ISP
    app = (app_entry)_pc;
    FMC_SetVectorPageAddr(APPLICATION_START_ADDR);  //重置中断向量表
    spChange(_sp);
    app();
    while(1);
}

回帖(1)

张明

2024-3-29 14:30:45
START_ADDR);    app_entry app = (app_entry)(vectorTable[1]);    spChange(vectorTable[0]);    (*app)();} 上面的代码是经典的MCU切换到应用程序的代码,但是如果向量页重新映射了,那么这个代码就会失效。解决这个问题有两种方法: 1.硬件解决:大多数MCU都提供了向量地址寄存器,可以通过这个寄存器设置向量页的地址,使得应用程序能够正确运行。 2.软件解决:可以在运行应用程序时,手动修改向量表中的地址,将其指向重新映射后的地址,从而实现正确运行。这种方法需要在每次切换到应用程序时执行。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分