IAP跳转到跑UCOSIII系统的APP出错,原子求教

2019-07-20 07:35发布

说明: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的阿波罗板子
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
shibinjie
1楼-- · 2019-07-21 02:30
BUGFWER 发表于 2017-7-25 08:53
全部关闭了,也不行,他能跳转,只是发生中断的时候跑飞了

IAP中的中断你怎么关的?如果只是关闭全局中断,到APP中你又打开了全局中断,而APP中如果又没有响应的中断函数,自然就跑飞了
BUGFWER
2楼-- · 2019-07-21 07:19
本帖最后由 BUGFWER 于 2017-7-25 15:43 编辑

IAP我没有开中断,IAP程序中目前我没有用任何东西,就是初始化时钟之后直接跳转,就是说跳转到APP运行没问题,在系统开始工作跳转到中断的时候就跑飞了,任何中断都跑飞,我试过别的中断也会跑飞,只要产生中断,程序就会跑飞
shibinjie
3楼-- · 2019-07-21 09:19
 精彩回答 2  元偷偷看……
BUGFWER
4楼-- · 2019-07-21 09:19
 精彩回答 2  元偷偷看……
BUGFWER
5楼-- · 2019-07-21 11:02
好了,
加了一句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();
  }
}
BUGFWER
6楼-- · 2019-07-21 14:05
 精彩回答 2  元偷偷看……

一周热门 更多>