gpt4 book ai didi

memory - stm32f4内存跳转

转载 作者:行者123 更新时间:2023-12-02 22:03:35 24 4
gpt4 key购买 nike

我正在使用 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();

最佳答案

大概您在问题中发布的那段代码实际上是在使用 MSP 堆栈,因此当您执行时:

__set_MSP(*(__IO uint32_t*) ApplicationAddress);

如果 Jump_To_Application 变量是一个局部变量(如果它是一个局部变量,它可能已经在堆栈上 - 特别是如果你正在运行一个非优化/调试build) 可能突然变成垃圾。

为了解决这个问题,我使用了:

void LoadStackAndGo( void* sp, void* entry)
{
__asm (
"mov sp, r0 \n"
"mov pc, r1 \n"
);
}

它应该很容易适应您正在使用的任何工具链。

关于memory - stm32f4内存跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16490315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com