我希望能够直接从代码启动引导加载程序,而无需将引脚置为高电平并重置微控制器以访问它。下面的想法是引导加载程序二进制文件存储在char数组中。调用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 );
}
答案 0 :(得分:1)
代码附带ROM和RAM链接器设置 - 但只有RAM版本可能适用于您的情况。尝试从二进制文件中读取第二个字(32位小端) - 它应该指向0x20000000范围内的奇数地址,因为它是新的PC值。