OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7591|回复: 23

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

[复制链接]

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
发表于 2017-6-20 16:39:38 | 显示全部楼层 |阅读模式
1金钱
说明: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的阿波罗板子

最佳答案

查看完整内容[请看2#楼]

恩,问题找到了。是FPU设置的问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
 楼主| 发表于 2017-6-20 16:39:39 | 显示全部楼层
正点原子 发表于 2017-6-20 20:58
感觉应该是设置问题。

恩,问题找到了。是FPU设置的问题
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
 楼主| 发表于 2017-6-20 16:40:04 | 显示全部楼层
金钱
说明: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的阿波罗板子
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165390
金钱
165390
注册时间
2010-12-1
在线时间
2112 小时
发表于 2017-6-20 20:58:09 | 显示全部楼层
shibinjie 发表于 2017-6-20 16:40
金钱
说明:IAP没跑UCOS,是裸机。现象:如果用一个没跑UCOS的APP,那么IAP跳转APP,和APP跳转到IAP,一切 ...

感觉应该是设置问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-24
在线时间
7 小时
发表于 2017-7-24 15:47:06 | 显示全部楼层
本帖最后由 BUGFWER 于 2017-7-24 16:38 编辑

请问下我的遇到的问题是IAP跳转了,APP程序能运行,但是开始UCOSIII的时候中断跑飞了,同样的程序用UCOSII测试就可以正常运行,请问怎么解决啊?stm32f103vct6
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
 楼主| 发表于 2017-7-25 08:36:03 | 显示全部楼层
BUGFWER 发表于 2017-7-24 15:47
请问下我的遇到的问题是IAP跳转了,APP程序能运行,但是开始UCOSIII的时候中断跑飞了,同样的程序用UCOSII ...

跳转前最好关闭所有中断
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-24
在线时间
7 小时
发表于 2017-7-25 08:53:38 | 显示全部楼层
全部关闭了,也不行,他能跳转,只是发生中断的时候跑飞了
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
 楼主| 发表于 2017-7-25 10:07:00 | 显示全部楼层
BUGFWER 发表于 2017-7-25 08:53
全部关闭了,也不行,他能跳转,只是发生中断的时候跑飞了

IAP中的中断你怎么关的?如果只是关闭全局中断,到APP中你又打开了全局中断,而APP中如果又没有响应的中断函数,自然就跑飞了
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-24
在线时间
7 小时
发表于 2017-7-25 15:41:36 | 显示全部楼层
本帖最后由 BUGFWER 于 2017-7-25 15:43 编辑

IAP我没有开中断,IAP程序中目前我没有用任何东西,就是初始化时钟之后直接跳转,就是说跳转到APP运行没问题,在系统开始工作跳转到中断的时候就跑飞了,任何中断都跑飞,我试过别的中断也会跑飞,只要产生中断,程序就会跑飞
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
 楼主| 发表于 2017-7-26 09:15:57 | 显示全部楼层
BUGFWER 发表于 2017-7-25 15:41
IAP我没有开中断,IAP程序中目前我没有用任何东西,就是初始化时钟之后直接跳转,就是说跳转到APP运行没问 ...

排除IAP程序中中断的影响,那么估计是PSP或MSP的因素了。因为你APP用的是UCOS,UCOS进程用的是PSP,中断用的MSP,,可能是这个没弄好吧,你仔细看看
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-24
在线时间
7 小时
发表于 2017-7-26 09:17:29 | 显示全部楼层
好的我试试,谢谢了
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-24
在线时间
7 小时
发表于 2017-7-26 10:06:34 | 显示全部楼层
好了,
加了一句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();
  }
}
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-24
在线时间
7 小时
发表于 2017-7-26 10:06:45 | 显示全部楼层
好了,
加了一句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();
  }
}
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-24
在线时间
7 小时
发表于 2017-7-26 10:18:38 | 显示全部楼层
本帖最后由 BUGFWER 于 2017-7-26 10:20 编辑

找到了,问题不在那里,在关闭中断上CPU_IntDis(); 这个关闭不行,
__set_BASEPRI(0);                                                                                            
__set_FAULTMASK(0);
这个就好了
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-24
在线时间
7 小时
发表于 2017-7-26 10:28:27 | 显示全部楼层
有没有人帮忙解释下啊,我前面的程序没有关闭中断这个步骤啊,这句的意思好像是我的中断呗关闭了啊,这里开启一下我才能用啊
回复

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2015-3-2
在线时间
36 小时
发表于 2017-9-1 10:11:03 | 显示全部楼层
BUGFWER 发表于 2017-7-26 10:18
找到了,问题不在那里,在关闭中断上CPU_IntDis(); 这个关闭不行,
__set_BASEPRI(0);                    ...

请问你这个具体是怎么该对的呢?  是在CPU_InitDis()函数里加上下面两个
__set_BASEPRI(0);                                                                                            
__set_FAULTMASK(0);
回复

使用道具 举报

12

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
806
金钱
806
注册时间
2017-8-17
在线时间
159 小时
发表于 2017-9-21 09:26:53 | 显示全部楼层
借鉴借鉴,我也出现同样的问题
回复

使用道具 举报

1

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
821
金钱
821
注册时间
2012-7-19
在线时间
113 小时
发表于 2017-11-3 16:36:46 | 显示全部楼层
本帖最后由 leoo 于 2017-11-3 16:38 编辑
shibinjie 发表于 2017-6-20 16:39
恩,问题找到了。是FPU设置的问题

我也遇到了同样的问题,F429,APP是FreeRTOSD,程序进入第一个任务就会跑飞,可以说一下您的解决办法吗
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
 楼主| 发表于 2017-11-6 09:44:02 | 显示全部楼层
leoo 发表于 2017-11-3 16:36
我也遇到了同样的问题,F429,APP是FreeRTOSD,程序进入第一个任务就会跑飞,可以说一下您的解决办法吗

我的问题是BOOTLOAD程序没有开启FPU,后来开启后就好了,具体什么原因我也没搞明白。
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2019-8-14
在线时间
21 小时
发表于 2019-9-26 17:12:22 | 显示全部楼层
非常感谢楼主!我也遇到了同样的问题,果然在IAP程序中关闭FPU后启动APP程序就不会死机了!
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-6-10
在线时间
1 小时
发表于 2019-11-12 19:27:02 | 显示全部楼层
MadaoWu 发表于 2019-9-26 17:12
非常感谢楼主!我也遇到了同样的问题,果然在IAP程序中关闭FPU后启动APP程序就不会死机了!

你好 我也遇到 相同的问题了 IAP和APP 裸板跳转裸板正常,但是裸板IAP跳转FreeRTOS_APP失败,请问 你是怎么解决的 方便 把跳转代码 贴出来吗 或者 加我好友 851830097
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-6-10
在线时间
1 小时
发表于 2019-11-12 19:27:39 | 显示全部楼层
MadaoWu 发表于 2019-9-26 17:12
非常感谢楼主!我也遇到了同样的问题,果然在IAP程序中关闭FPU后启动APP程序就不会死机了!

很急 一头包
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-6-10
在线时间
1 小时
发表于 2019-11-13 11:27:20 | 显示全部楼层
MadaoWu 发表于 2019-9-26 17:12
非常感谢楼主!我也遇到了同样的问题,果然在IAP程序中关闭FPU后启动APP程序就不会死机了!

你好 我的问题已经 解决了,中断禁止了,然后FCU也关闭了
回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2018-7-18
在线时间
20 小时
发表于 前天 10:51 | 显示全部楼层
你好,FPU 怎么设置啊   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-3 03:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表