下面的代码 是运行在flash的第一个段 作用只是根据标志区地址来跳转到不同的区域
int main(void)
{
if(IAP_ProCur == PROGRAM_LOW)
{
UserProgram = (void (*)()) (PROGRAM_LOW + 1);
__disable_irq();
(*UserProgram)();
}
if(IAP_ProCur == PROGRAM_HIGH)
{
UserProgram = (void (*)()) (PROGRAM_HIGH + 1);
__disable_irq();
(*UserProgram)();
}
}
现在的问题是,我同一个程序 通过 Target 设置IROM 地址0x1000 (PROGRAM_LOW,即为低区首地址) 编译后下载程序后能跳转也能很好运行;
但是,当 Target 设置IROM 地址0x4000 ( PROGRAM_HIGH,即为高区首地址 ) 编译后下载程序无法跳转,更不用说运行高区的程序;
当然了 对程序都进行了中断重映射!
调试后发现当IAP_ProCur 为 PROGRAM_HIGH 时运行到 (*UserProgram)(); 这一句时直接进入HardFault_Handler中断死掉了,
查看flash区内,高区和低区数据,除了固定偏移地址不同外其他全是一样,不明白,
谁遇到过? |