【发布时间】:2013-05-05 14:43:34
【问题描述】:
我正在使用 stm32f4 探索板,我试图跳转到闪存的一部分,在那里我将开始执行另一个程序。变量ApplicationAddress 是 0x08008000。当我的代码到达此部分时,PC 会转到 0x0000000 并且系统会死机。我不确定到底发生了什么。感谢您的时间。我的跳转代码如下所示。
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
【问题讨论】:
-
一堆问题:0x08008000这两个字的内容是什么?你是说一旦
Jump_To_Application()被执行,PC 就会以0 结束?您是否有可以在汇编级别单步执行的调试器设置?您是否有可以将文本转储到以进行调试写入的串行端口? -
有一个适用于任何 ARM Cortex-M 设备的通用解决方案,详细信息如下:stackoverflow.com/questions/14393715/…。因此这是重复的。
-
对不起,Clifford,我搜索了一个类似的帖子,但我没有看到这个。
-
所以汇编方法适用于返回主程序起始地址@0x08000000,而不是另一个程序的地址@0x08008000。你知道为什么会这样吗?
-
我遇到的另一件事;当您编译要跳转到的程序时,请确保将该项目的设置更改为从您要跳转到的地址 0x
开始。