OpenEdv-开源电子网

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

IAP程序跳转之后死机现象

[复制链接]

2

主题

15

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-5-4
在线时间
0 小时
发表于 2013-5-4 15:54:17 | 显示全部楼层 |阅读模式
 


 

 


请救原子哥!

写了IAP程序想练习一下这个功能的,从串口接口BIN文件是可以的,而且也能写入FLASH,但在跳转时,感觉已经进入APP程序了,就出现死机不动了。

几张截图,如下:


 


 


 





      


 


出现这种状况实在是不解啊,请指点迷津

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-5-4 21:33:15 | 显示全部楼层
直接在我们例程上修改试试。
看你的代码,貌似是自己改过的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-5 15:41:47 | 显示全部楼层

之前买的一个战舰板子,后面自己也画了一个,好多程序都重写过了,所以看上去不太一样,但IAP部分跟硬件没有关系,所以IAP部分的程序其实跟战舰的差不多(几乎是一样的)。

是不是在跳转之前应该屏蔽异常呢,CPSID F;(我心里这样考虑的,还没有实践)

回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-5 16:51:35 | 显示全部楼层
 今天我在跳转之前加了一句CPSID F;屏蔽异常,就成功跳转到APP程序执行了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-5-5 21:46:29 | 显示全部楼层
回复【3楼】孙为:
---------------------------------
那你应该是有什么地方有问题,否则不会引起死机才对。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-5-5 21:46:41 | 显示全部楼层
你这这是治标,不治本。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-6 08:43:20 | 显示全部楼层

是的,治标不治本呐!!!  

问题出现了!因在IAP程序中在跳转之前CPSID F;屏蔽了所有异常,跳转到APP之后发现在无法正常响应中断(APP程序是一个使用外部中断来控制两个LED闪烁的测试程序),但程序运行正常,但不会因中断改变闪烁模式(因中断没有响应),我估计是因为在IAP中屏蔽了所有异常,所有在APP中异常依然是屏蔽的。后来我在APP中MAIN函数开始加了一句CPSIE F;来开启异常,之后发现又出现一种问题,是我没有触发中断,但总是死在异常向量表里


后来我又试了一个另外一个APP程序  (是一个LED正常闪烁的程序,并没有开启任何中断),如在APP开始 部分不加CPSIE F;来开启异常(因为IAP中跳转时关闭了异常)一切正常,只要开启后,就和上面这个中断LED效果一样。图如下:



因出现上现这么多问题,所以我在所IAP中把那个屏蔽异常的语句去掉了,还是不行呢。

我估计BIN文件的接收和写入应该没有问题,这部分的代码基本上就是原模原样的战舰的代码,就是在跳转是出现了问题,是不是异常向量表处理的不好呢?跳转时应该注意点什么呢?

回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-6 08:44:02 | 显示全部楼层
   死机是死在了向量表里了
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-6 08:50:47 | 显示全部楼层

刚刚发现了我的代码和战舰的有一点不一样,截图如下:

IAP程序:


 

APP程序:


堆空间大小不一样,会不会是这中问题呢?但这个APP程序我如正常使用JTAG下载到板子运行是正常的呀!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-5-6 10:38:43 | 显示全部楼层
回复【9楼】孙为:
---------------------------------
那可能还是终端向量表设置有问题,你用我们的例程测试下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-5-6 10:38:56 | 显示全部楼层
用我们提供的system文件夹的函数
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-6 11:14:03 | 显示全部楼层
回复【10楼】正点原子:

回复【9楼】孙为:
---------------------------------
那可能还是终端向量表设置有问题,你用我们的例程测试下。

---------------------------------
中断向量表我也设置了,APP程序中MAIN函数一开始就偏移向量表SCB->VTOR = 0x08000000 | 0x40000;因我的IAP中加了文件系统,所以有点大。
相关函数我就是使用的你们提供SYSTEM文件夹中,主要是SYS.C,其他代码都差不多呀。能说一下IAP跳转APP这一过程时,相关前后的中断向量表正确的设置应该是怎样的呢?你们提供的那个PDF我也详细看了, 也是按照上面的步骤做了,就是不行呀,进行APP程序之后会死在那个向量表里。
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-5-4
在线时间
0 小时
 楼主| 发表于 2013-5-6 20:11:38 | 显示全部楼层
回复【11楼】正点原子:

用我们提供的system文件夹的函数

---------------------------------
原子哥,我查出原因了。是因为IAP程序中的一些外设一直处于开启状态——RTC开启了秒中断,所在到APP程序中还是发生秒中断,因异常向量表已经偏移,但APP中没有设置相应的服务程序,所以死在异常向量表里了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-5-6 23:13:57 | 显示全部楼层
回复【13楼】孙为:
---------------------------------
哦哦。。。呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-4-27
在线时间
0 小时
发表于 2013-5-19 09:55:05 | 显示全部楼层
回复【13楼】孙为:
---------------------------------
我也碰到楼主一样的情况,
我用的是SDIO IAP,跳转以后也停在异常处理这里了,可能是IAP程序中开启了SDIO中断,请问楼主后面是怎么修改的?
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-12-21
在线时间
3 小时
发表于 2015-12-21 11:33:20 | 显示全部楼层
回复【13楼】孙为:
---------------------------
你好,你的这个问题解决了吗
回复 支持 反对

使用道具 举报

16

主题

173

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2441
金钱
2441
注册时间
2014-11-5
在线时间
348 小时
发表于 2015-12-21 11:42:06 | 显示全部楼层
你将此句SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET放在主函数的最前面,将变量i的定义放在主函数外,试一试!!
回复 支持 反对

使用道具 举报

29

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1530
金钱
1530
注册时间
2012-9-4
在线时间
262 小时
发表于 2016-4-8 10:27:44 | 显示全部楼层
不知道楼主死机问题解决没有啊??我也遇到同样的问题。。。。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-12-5
在线时间
0 小时
发表于 2016-12-5 10:56:24 | 显示全部楼层
楼主怎么解决的啊
回复 支持 反对

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-12-5 11:15:50 | 显示全部楼层
中断向量表跳转后需要重新配置,不知道题主有没有做
回复 支持 反对

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1765
金钱
1765
注册时间
2015-6-11
在线时间
312 小时
发表于 2016-12-5 17:22:36 | 显示全部楼层
hejin 发表于 2016-12-5 10:56
楼主怎么解决的啊

如果bootload使用了中断配置,需要在跳转前清除相应中断设置位,这样就可以避免跳转后触发中断导致出现异常。
具体实现是跳转函数前添加
__ASM volatile ("cpsid i");
或者
__disable_irq(); (需要头文件core_cm3.h,如果没有用上面那个)
回复 支持 反对

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2015-9-16
在线时间
39 小时
发表于 2016-12-21 16:45:29 | 显示全部楼层
遇到同样的问题: IAP升级之后程序可以跳转,但是进不了任何中断
回复 支持 反对

使用道具 举报

18

主题

238

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1823
金钱
1823
注册时间
2014-8-5
在线时间
211 小时
发表于 2016-12-21 19:43:21 | 显示全部楼层
17楼正确
出现进入APP后死机的朋友,请在APP代码里面第一条语句执行
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET
这句代码我猜测的意思 是   把中断APP程序中的中断向量表偏移成APP的中断向量表的位置
如果在APP代码中不加这个偏移,那么在APP代码中一进中断,那么程序就恢复不了了,程序会进入硬件中断出不来了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 07:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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