我已经制作了一个bootloader和一个可以进行通信的Windows应用程序。 Windows应用程序将hex文件(用户应用程序的偏移量从0x0C008000开始)发送到引导加载程序,后者将其存储在闪存中的地址。 hex文件的数据存储在正确的地址中。我通过阅读闪光灯来检查它。
引导加载程序等待3秒钟才能收到符号。如果没有收到任何标志,那么它将跳转到用户应用程序。
跳跃不起作用,我不知道为什么。 Bootloader从0x0C000000开始。 在用户应用程序的链接描述文件中,我映射了这样的内存区域(从0x0C008000开始)
MEMORY
{
FLASH_1_cached(RX) : ORIGIN = 0x08008000, LENGTH = 0xf8000
FLASH_1_uncached(RX) : ORIGIN = 0x0C008000, LENGTH = 0xf8000
PSRAM_1(!RX) : ORIGIN = 0x10000000, LENGTH = 0x10000
DSRAM_1_system(!RX) : ORIGIN = 0x20000000, LENGTH = 0x10000
DSRAM_2_comm(!RX) : ORIGIN = 0x30000000, LENGTH = 0x8000
}
跳转的代码如下
void RunFlash(void)
{
PPB->VTOR = 0x0c008000; // Offset of the Vector
asm("ldr r0, =0x0c008000");
asm("ldr r1, =0xE000ED08");
asm("str r0,[r1]");
asm("ldr sp, [r0], #4");
asm("ldr r15, [R0]");
}
我总是得到“没有可用的源”0x80082b0“错误。
有人可以帮帮我吗?我是否需要对链接描述文件进行其他更改?我是否需要在启动代码中更改某些内容?
我使用的是Infenion XMC4500和DAVE4 IDE。