gpt4 book ai didi

c - Cortex M3 的引导加载程序

转载 作者:太空狗 更新时间:2023-10-29 16:44:33 25 4
gpt4 key购买 nike

我正在使用来自 mbed 的 LPC 1768 板(带有 cortex M3 cpu),我试图在这里实现一些东西,主要是从 SD 卡升级用户应用程序,我正在编写两个程序,第一个是引导加载程序/nano-内核和用户应用程序(helloworld 将作为开始):

  • Bootloader/nano-kernel 在 0x00 地址运行,它会做一些检查并最终抓取 SD 卡上的二进制文件
  • Bootloader/nano-kernel 将在地址 0x9000 复制此二进制文件(稍后可能需要更改,但 bootloader/nano-kernel 未使用此空间,因此应该没问题)
  • Bootloader 跳转到 0x9000 + 4 处的用户应用程序

Sd 卡很容易解决,我在跳跃部分遇到了问题。下面是跳跃功能的代码。

void run(void) {

void (*user_code_entry)(void);

unsigned *p;
SCB->VTOR = (USER_FLASH_START & 0x1FFFFF80);

// Load contents of second word of user flash - the reset handler address
// in the applications vector table
p = (unsigned *)(USER_FLASH_START +4); // USER_FLASH_START is 0x9000

user_code_entry = (void (*)(void))p;

// Jump to user application
user_code_entry();

所以我已经编译(我正在使用 Keil uvision4)用户应用程序将起始地址更改为 0x9000。如果我对我的板进行编程(使用 flashmagictool),然后手动跳转(仍然使用 flashmagictool)到 0x9004 (0x9000 + 4),用户应用程序将运行,所以我相信编译工作正常,因此用户应用程序可以在 0x9000 运行。

但是如果我运行 bootloader/nano-kernel,这个不会跳转到用户应用程序,不幸的是因为我不能调试,我不确定发生了什么......我也试过不使用SD 复制部分,所以我首先对引导加载程序进行编程,基本上只是跳转到 0x9004。然后我对位于 0x9000 的用户应用程序进行编程。如果我重新启动开发板,引导加载程序会运行但不会跳转到用户应用程序。我检查了内存,似乎两个程序(引导加载程序 + 用户应用程序)都是正确的并且在正确的位置。

我确定我在这里遗漏了一些东西,是否有任何我应该查看的低级代码?我已经在线阅读了文档的音调,并且从我发现的示例中,它们以与我相同的方式跳转到用户代码...非常感谢您的帮助。

最佳答案

Cortex M3 只能在 Thumb 模式下运行。因此你总是必须跳转到address +1,否则会产生错误。

试试看:

user_code_entry = (void (*)(void))(USER_FLASH_START +4 +1);

关于c - Cortex M3 的引导加载程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12715556/

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