OpenEdv-开源电子网

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

IAP跳转进入APP后,定时器中断无法响应

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-3-16
在线时间
10 小时
发表于 2017-3-20 11:10:26 | 显示全部楼层 |阅读模式
5金钱
IAP带RTX操作系统(移植别人的)APP不带操作系统,在移植过程中遇到以下问题:问题1,IAP无法正常跳转到APP,检查后将APP里面的中断全部关闭,既能正常跳转。
问题2,为解决问题1,在IAP跳转前关闭总中断__disable_irq();,在APP里面开启总中断__enable_irq();,结果app能正常跳转吗,但运行到__enable_irq();这行,程序就死机。

问题3:为解决问题2,在APP里面不开启总中断,程序可以正常运行,但是程定时器中断无法响应,一直进入不了中断服务函数。

求助大神!!!!!
IAP跳转部分
os_dly_wait(OS_10MS);
        //TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE);
        //TIM_ITConfig(TIM2,TIM_IT_CC1, DISABLE);                                //1رÕËùóDòÑ¿aÆôμÄÖD¶Ï
        //TIM_ITConfig(TIM4,TIM_IT_CC1, DISABLE);                                //1رÕËùóDòÑ¿aÆôμÄÖD¶Ï
//        TIM_ITConfig(TIM4,TIM_IT_Update,DISABLE );
//        TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE );
        //TIM_ITConfig(TIM3,TIM_IT_CC1, DISABLE);                                //1رÕËùóDòÑ¿aÆôμÄÖD¶Ï
       
        tsk_lock();
        __disable_irq(); //__ASM volatile ("cpsid i");

        TIM_DeInit(TIM3);
        printf("gotoAp\r\n");
        JumpAddress = *(vu32*) (ApplicationAddress + 0x00000004);
        printf("gotoAp1\r\n");
        Jump_To_Application = (pFunction) JumpAddress;
        //initialize user application's stack pointer
        printf("gotoAp2\r\n");
        __set_MSP(*(__IO uint32_t *)ApplicationAddress);
        printf("gotoAp3\r\n");       
        Jump_To_Application();
        printf("endApp\r\n");


最佳答案

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

SCB->VTOR = FLASH_BASE | 0x10000;(0x10000是flash存APP的首地址)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2017-1-18
在线时间
180 小时
发表于 2017-3-20 11:10:27 | 显示全部楼层
18855314937 发表于 2017-3-20 15:40
你说的是不是中断向量的偏移,是不是这句NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);

SCB->VTOR = FLASH_BASE | 0x10000;(0x10000是flash存APP的首地址)
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-3-16
在线时间
10 小时
 楼主| 发表于 2017-3-20 14:26:22 | 显示全部楼层
求大神呐!
回复

使用道具 举报

Chalno 该用户已被删除
发表于 2017-3-20 14:54:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-3-16
在线时间
10 小时
 楼主| 发表于 2017-3-20 15:00:29 | 显示全部楼层
Chalno 发表于 2017-3-20 14:54
我也遇到到了这个问题,不只是定时器中断,如果IAP中开启其它例如串口、定时器等外设中断,跳入APP后很容易 ...

你解决了吗
回复

使用道具 举报

Chalno 该用户已被删除
发表于 2017-3-20 15:01:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

Chalno 该用户已被删除
发表于 2017-3-20 15:03:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

18

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2017-1-18
在线时间
180 小时
发表于 2017-3-20 15:34:56 | 显示全部楼层
我遇到过,在进入APP的第一条语句加了FLASH地址重映射,然后好了
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-3-16
在线时间
10 小时
 楼主| 发表于 2017-3-20 15:40:32 | 显示全部楼层
1253171658 发表于 2017-3-20 15:34
我遇到过,在进入APP的第一条语句加了FLASH地址重映射,然后好了

你说的是不是中断向量的偏移,是不是这句NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);       
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-3-16
在线时间
10 小时
 楼主| 发表于 2017-3-21 10:06:28 | 显示全部楼层
1253171658 发表于 2017-3-20 20:04
SCB->VTOR = FLASH_BASE | 0x10000;(0x10000是flash存APP的首地址)

这两个的作用是一样的,一个是库函数,一个是寄存器。试了没用。
回复

使用道具 举报

12

主题

241

帖子

0

精华

高级会员

Rank: 4

积分
806
金钱
806
注册时间
2017-8-17
在线时间
159 小时
发表于 2017-9-22 11:29:33 | 显示全部楼层
在跳转之前复位所有中断,再关闭中断后跳转,再在APP中开启中断。如果不清除中断就跳转到APP中,若是APP中没有用到中断就不会出现问题,但是用到中断就会出现卡死跑飞
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3567
金钱
3567
注册时间
2016-1-8
在线时间
544 小时
发表于 2018-7-13 10:47:08 | 显示全部楼层
1253171658 发表于 2017-3-20 20:04
SCB->VTOR = FLASH_BASE | 0x10000;(0x10000是flash存APP的首地址)

多谢,解决了我的问题
回复

使用道具 举报

17

主题

194

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1049
金钱
1049
注册时间
2016-9-3
在线时间
158 小时
发表于 2018-8-9 10:16:04 | 显示全部楼层
楼主问题解决了吗,我也遇到了类似问题,在IAP和APP中都开启了串口中断,但是在APP执行时,中断发生时只会进入IAP,不会跳转到APP的中断
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-13 01:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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