第一,我的APP开始地址怎么确定,在哪定义?我没找到flash的分配管理文件,是直接在keil里编辑ROM1的地址值吗?如果在配置中勾选了use memory layout from target dialog是通过IROM1进行配置,没勾选则在sct文件中配置。
bootloader的配置如下:
APP的配置如下:
第二,我在BOOTLOADER要跳转到APP里的时候,我该怎么跳过去呢?是否可以直接参考你们的ISP源码?你们是怎么实现跳转到0X08000000地址执行的。
可以参考我们的IAP代码。
bootloader跳转代码:
- /**
- * JumpTOApp
- *
- * @param[in] none
- * [url=home.php?mod=space&uid=266161]@return[/url] none
- *
- * [url=home.php?mod=space&uid=247401]@brief[/url] Jump to APP Code
- */
- void JumpTOApp(void)
- {
- uint32_t JumpAddress;
- __ASM("CPSID I");
- if(((*(__IO uint32_t *)APP_ADDRESS) & 0x2FFE0000) == 0x20000000)
- {
- JumpAddress = *(__IO uint32_t *)(APP_ADDRESS + 4); // Jump to user application
- s_jumpToApplication = (pFunction)JumpAddress; // Initialize user application's Stack Pointer
- __set_MSP(*(__IO uint32_t*)APP_ADDRESS);
- s_jumpToApplication(); /* jump to app */
- }
- else
- {
- printf("top of stack pointer is unvalid! please reboot!\r\n");
- while (1); /* because of APP address have no code data */
- }
- }
第三,其实也是第一点,APP地址定义好后,中断向量表要重新定义么?
APP中,进入MAIN函数后,重定向中断向量表:
- __ASM(" CPSIE I");
- SCB->VTOR = APP_ADDRESS;
|