小编bat*_*mat的帖子

Cortex M3的Bootloader

我正在使用mbed的LPC 1768板(带有cortex M3 cpu),我正在尝试在这里实现一些功能,主要是从SD卡升级用户应用程序,我正在编写两个程序,首先是一个bootloader/nano-kernel,以及一个用户应用程序(helloworld将开始):

  • 在0x00地址运行的Bootloader/nano-kernel,它会进行一些检查并最终获取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();
Run Code Online (Sandbox Code Playgroud)

}

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

但是,如果我运行bootloader/nano-kernel,这个没有跳转到用户应用程序,不幸的是因为我无法调试,我不知道发生了什么...我也试过不使用SD副本部分,所以我首先编程引导加载程序,基本上只是跳转到0x9004.然后我编写将位于0x9000的用户应用程序.如果我重启电路板,bootloader会运行,但不会跳转到用户应用程序.我检查了内存,似乎两个程序(bootloader + user-app)都是正确的并且位于正确的位置.

我相信我在这里遗漏了一些东西,是否有任何我应该关注的低级代码?我已经在线阅读了文档的音调,从我发现的例子中,他们以与我相同的方式跳转到用户代码...非常感谢任何帮助.

c arm bootloader keil cortex-m

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

arm ×1

bootloader ×1

c ×1

cortex-m ×1

keil ×1