本帖最后由 天涯行客 于 2014-12-4 12:37 编辑
程序所有配置都没有问题,就是不执行APP程序,不知道怎么回事啊
2014-12-04_105927.png (77.37 KB, 下载次数: 4)
下载附件
2014-12-4 11:00 上传
程序跳转代码
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
{
SerialPutString("Execute user Program
");
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
}
#define ApplicationAddress 0x8010000
我APP程序比较大 生成的BIN文件有60K左右,会是堆栈溢出的问题吗?
正解在5楼
/* Test if user code is programmed starting from address "ApplicationAddress" */
if (((*(__IO uint32_t*)jumpAddr) & 0x2FFE0000 ) == 0x20000000)
{
__ASM("CPSID I");
JumpAddress = *(__IO uint32_t*) (jumpAddr + 4);
/* Jump to user application */
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) jumpAddr);//设置堆栈指针
Jump_To_Application();
}
遇到了同样的问题,iap更新完app后直接跳转到app不是每次都失败,有时可以有时执行不起来(在app main最开始位置点灯),跳转前也关闭了中断,app运行SystemInit函数时重设了中断向量表。
最后解决办法是iap更新完app后,软复位cpu,NVIC_SystemReset();
复位后重新运行iap,在main开始运行就跳转。可以
我怀疑是某些寄存器没被复位导致,不知道怎么深究哪个寄存器影响了直接跳转
你是咋复位的,NVIC_SystemReset?
是的。。。。。
一周热门 更多>