初级会员

- 积分
- 82
- 金钱
- 82
- 注册时间
- 2016-7-13
- 在线时间
- 24 小时
|
今天使用IAP跳转到App中,发现可以跳转到app.但是app中使用的定时器中断,始终不能进入,断点调试发现,停在了0x8000013A,即default_handle
从网上找到各种帖子说明:
1.在Jump_To_Application之前要先关闭所有的NVIC ,GPIO
void DisableAllNVIC(void)
{
int i=0;
for( i=19; i < 59; i++)
{
NVIC->ICER[i >> 0x05] =(unsigned int )0x01 << (i & (unsigned char)0x1F);
}
}
void DisableAllGPIO(void)
{
GPIO_InitTypeDef gpio_init;
gpio_init.GPIO_Pin = 0xffff;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &gpio_init);
GPIO_Init(GPIOB, &gpio_init);
}
2.关闭总中断,__ASM("CPSID I");
3.设置好msp指针地址
4.在app中设置偏移指针
5.然后再开总中断
按照上面步骤执行后,发现依然不行,跳转到app后,始终不能跳入定时器中断,后面测试不使用IAP bootloder程序,直接从0x8000000跑app ,发现一切正常。各种苦恼......
开始怀疑:
1.程序flash 和rom空间不够,因为使用的是c8t6,编译后发现加上bootloder的(code+rom)总和也不超过50k,应该不是这个问题。
2.堆栈分配太小,溢出。改大了依然没有解决问题
后面终于解决了,还是不够细心。
在跳转到app后,应该第一步就初始化时钟,然后再是设置偏移指针,开总中断,再来初始化各种定时器,GPIO,串口等
SystemInit();
NVIC_Configuration();
__ASM("CPSIE I");
|
|