说明:IAP没跑UCOS,是裸机。现象:如果用一个没跑UCOS的APP,那么IAP跳转APP,和APP跳转到IAP,一切正常。问题就出在,同一个IAP,APP换成跑UCOSIII的程序后,能跳转到APP,但是在执行第一个任务的时候就死了。(PS:其实APP我就是用的原子的例程:9-1UCOSIII软件定时器例程),注意:我在main函数开头加了SCB->VTOR = FLASH_BASE | 0x4000,而且IROM1里面也设置了其实地址0x8004000。main函数里创建了StartTask,一执行到StartTask就死了。原子,各位大神求教???什么原因??
用的F429的阿波罗板子
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
IAP中的中断你怎么关的?如果只是关闭全局中断,到APP中你又打开了全局中断,而APP中如果又没有响应的中断函数,自然就跑飞了
IAP我没有开中断,IAP程序中目前我没有用任何东西,就是初始化时钟之后直接跳转,就是说跳转到APP运行没问题,在系统开始工作跳转到中断的时候就跑飞了,任何中断都跑飞,我试过别的中断也会跑飞,只要产生中断,程序就会跑飞
加了一句SCB->VTOR=ApplicationAddress;在IAP程序跳转之前的程序里面,但是没道理啊,我在APP程序里面加了这一句了,我把我可以的程序贴上来看看
void vfnExtiIap(void)
{
int i;
unsigned long int JumpAddress;
pFunction JumpToApplication;
if(((*(volatile unsigned long int *)ApplicationAddress)&0x2fff0000)==0x20000000)
{
JumpAddress=*(volatile unsigned long int *)(ApplicationAddress+4);
JumpToApplication=(pFunction)JumpAddress;
SCB->VTOR=ApplicationAddress;
__set_BASEPRI(0);
__set_FAULTMASK(0);
__set_PSP(*((volatile unsigned long int *)ApplicationAddress)); //重新设置进程PSP堆栈地址
__set_MSP(*((volatile unsigned long int *)ApplicationAddress));
__set_CONTROL(0);
__ISB();
__disable_irq();
JumpToApplication();
}
}
一周热门 更多>