我希望能够直接从代码启动引导加载程序,而无需将引脚置于高电平并重置微 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/