c - 从固件启动引导加载程序

标签 c arm microcontroller cortex-m3

我希望能够直接从代码启动引导加载程序,而无需将引脚置于高电平并重置微 Controller 来访问它。下面的想法是引导加载程序二进制文件存储在字符数组中。当 Start_BootLoader() 被调用时,引导加载程序被复制到 SRAM 中并执行。

但是,代码复制到 RAM 中,但当它尝试在我复制到的位置执行代码时,它什么也不做。

微。是 Energy Micro EFM32380f1024。我使用的下面的代码基于 Energy Micro 的应用说明 AN0042。

void Start_Bootloader(void)
{
  /* Diable interrupts */
  INT_Disable();

  __set_MSP( ( 0x20000000 + sizeof( bootloader ) + 0x400 ) & 0xFFFFFFF0 );

  /* Load the entire bootloader into SRAM. */

  memcpy( (void*)0x20000000, bootloader, sizeof( bootloader ) );

  /* Start executing the bootloader. */

  BOOT_jump( *(uint32_t*)0x20000000, *(uint32_t*)0x20000004 );
}

最佳答案

代码附带了 ROM 和 RAM 链接器设置 - 但只有 RAM 版本可能适用于您的情况。尝试从二进制文件中读取第二个字(32 位小端) - 它应该指向 0x20000000 范围内的奇数地址,因为它是新的 PC 值。

关于c - 从固件启动引导加载程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22618959/

相关文章:

assembly - 为什么 ARM 内核在使用 ELF 和二进制文件时表现不同

c - 了解某些 ELF 文件结构

c - 使用文件系统的最佳方式?

c++ - 使用 dlsym 的 Ansi C 补丁在 linux 下编译正常,但在 Mac Os X 上编译失败

c - 在主函数中返回变量

c - 如何为 Arm Linux 构建静态版本的 pcap 库

针对 IAR EWARM 问题的 Kinetis MKE06Z 微 Controller 的自定义引导加载程序

c - 下面的操作是什么意思?

embedded - 每次 SPI 发送都会导致 MSP430 上接收到 0

编译器标志 "-Wshadow"在代码块中不起作用