第一,我的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;
|