gpt4 book ai didi

Cortex M0+ 跳转到用户应用程序失败

转载 作者:行者123 更新时间:2023-11-30 16:12:36 27 4
gpt4 key购买 nike

我有一个 KL17,我正在尝试编写一个引导加载程序以允许 OTA 更新。我无法跳转到用户应用程序,这就是我正在尝试的。

void JumpToUserApplication(uint32_t userSP, uint32_t userStartup)
{
printf("MSP BEFORE: %x \n", __get_MSP());
printf("PSP BEFORE: %x \n", __get_PSP());

SCB->VTOR = userSP; // SET UP INTERUPT VECTOR TABLE FOR APP
// set up stack pointer
__set_MSP(userSP);
__set_PSP(userStartup);
void (*user_app)(void) = userStartup;
user_app();

printf("BAD MSP AFTER: %x \n", __get_MSP());
printf("BAD PSP AFTER: %x \n", __get_PSP());

}

我这样调用它:

JumpToUserApplication(PROGRAM_ADDRESS, (PROGRAM_ADDRESS+0x4));

我希望它跳转到应用程序,但是实际发生的情况是引导加载程序实际上重新启动,就好像它返回到引导加载程序重置一样...

WELCOME TO THE BOOTLOADER! 
MSP BEFORE: 20005fc0
PSP BEFORE: 20006000
WELCOME TO THE BOOTLOADER!
MSP BEFORE: 20005fc0
PSP BEFORE: 20006000
... and so on.

欢迎任何意见,谢谢!

最佳答案

此方法有效:

#define PROGRAM_VECTOR_TABLE ((uint32_t *) PROGRAM_ADDRESS)

void jump_to_app(void)
{
static void (*go_to_app)(void) = 0;
go_to_app = (void (*)(void))(PROGRAM_VECTOR_TABLE[1]);
SCB->VTOR = (uint32_t)PROGRAM_VECTOR_TABLE;
__set_MSP(PROGRAM_VECTOR_TABLE[0]);
__set_PSP(PROGRAM_VECTOR_TABLE[0]);
go_to_app();
}

进行了一些更改,但是我注意到转到应用程序的 vector 地址解析为与我尝试的值不同的值。

关于Cortex M0+ 跳转到用户应用程序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58296733/

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