序
在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之后的地址保存数据