序
在7840的sample代码里面有一个简单的Boot跳转APP的示例
PFlash地址从0开始
DFlash的地址从1000000开始
Boot解析
他的boot地址配置为0
Boot的代码主要是这几行,主要作用就是Flash的跳转
int main(void)
{SystemClock_Config();InitDebug();printf("demo start...\r\n");printf("BOOT\r\n");printf("Jump to APP\r\n");Go_To_App();printf("demo end...\r\n");while (1){;}
}
地址的配置
#define BOOT_START_ADD 0x00000000
#define BOOT_SIZE 0x00030000#define APP_START_ADD 0x00030000
boot跳转APP的代码
static void Go_To_App(void)
{if (((*(__IO uint32_t *)APP_START_ADD) >= 0x1FFF0000) && ((*(__IO uint32_t *)APP_START_ADD) <= 0x2000EFFF)){DisableInterrupts /* 关全局中断 */Jump_To_App = (Func)(*(__IO uint32_t *)(APP_START_ADD + 4)); /* 指向APP程序的Reset中断*/__set_MSP(*(__IO uint32_t*)APP_START_ADD);Jump_To_App();}printf("Jump to APP Fault\r\n");
}
只烧录Boot的测试
确实从0开始
APP解析
App主要代码
int main(void)
{DisableInterrupts;SCB->VTOR = APP_START_ADD;EnableInterrupts;SystemClock_Config();InitDebug();printf("demo start...\r\n");printf("APP\r\n");printf("demo end...\r\n");while (1){;}
}
APP代码烧录之后打印结果,Zdemo start没找到在哪儿写的
可以看到App的代码地址配置从30000开始
修改APP起始地址
改到40000
修改地址之后需要全片擦除,否则之前地址还有APP的内容,看不出来效果。擦除之后重新烧录Boot代码。
Boot烧录完成发现无法跳转到APP
需要修改Boot的跳转地址
修改之后测试OK
查看内存数据
是按照40000之后的地址保存数据