OpenEdv-开源电子网

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

求助大神!BootLoader跳转APP出现不定时死机现象

[复制链接]

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2015-7-10
在线时间
24 小时
发表于 2023-5-8 18:30:53 | 显示全部楼层 |阅读模式
20金钱
装置写了BootLoader程序和APP程序,BootLoader用于485程序升级,正常使用没有问题,当装置开机启动的时候485总线上有大量报文时BootLoader跳转APP时候会有不定时死机现象。BootLoader里面只开了一个串口中断,APP里面的串口用的定时器查询的方式。有时候跳过去了while循环没死,但是把定时器搞死机了。不知道什么原因,用排除法把串口初始化关了还会出现,真是神奇了!求大神帮助!
微信图片_20230508182734.jpg

最佳答案

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

波特率也不高啊!才9600,定时器扫描的目的是全局只开一个中断,怕中断多了影响其他程序,这也是领导要求的没办法。后来自己做了测试程序用串口中断接收APP还是死机,发现只要加入串口接收软复位就会死机,再后来把软复位放到while循环里面,串口中断接收8个字节置标志复位,刷了10来分钟程序就死了。今天换了GD303的片子跑之前改的BootLoader,跳转之前关外设和中断,也增加了ORE等过载处理,目前刷了3个小时还是正常的,怀疑之 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2015-7-10
在线时间
24 小时
 楼主| 发表于 2023-5-8 18:30:54 | 显示全部楼层
c2007s 发表于 2023-5-12 11:53
当有一个字节未读取时就会ORE。你看你的波特率多少,你处理的函数不能超过一个字节的时长,否则就会有ORE错 ...

波特率也不高啊!才9600,定时器扫描的目的是全局只开一个中断,怕中断多了影响其他程序,这也是领导要求的没办法。后来自己做了测试程序用串口中断接收APP还是死机,发现只要加入串口接收软复位就会死机,再后来把软复位放到while循环里面,串口中断接收8个字节置标志复位,刷了10来分钟程序就死了。今天换了GD303的片子跑之前改的BootLoader,跳转之前关外设和中断,也增加了ORE等过载处理,目前刷了3个小时还是正常的,怀疑之前那几个GD103芯片是不是有问题或者是水货
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3329
金钱
3329
注册时间
2011-11-10
在线时间
207 小时
发表于 2023-5-8 18:50:29 | 显示全部楼层
BootLoader接收完数据后,校验数据正确,然后关闭所有中断,写入新固件,写完跳转。在写Flash时必须关闭中断。
回复

使用道具 举报

5

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
442
金钱
442
注册时间
2021-11-22
在线时间
141 小时
发表于 2023-5-9 08:35:11 | 显示全部楼层
我正在学IAP,帮你顶
回复

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2015-7-10
在线时间
24 小时
 楼主| 发表于 2023-5-9 17:08:40 | 显示全部楼层
c2007s 发表于 2023-5-8 18:50
BootLoader接收完数据后,校验数据正确,然后关闭所有中断,写入新固件,写完跳转。在写Flash时必须关闭中 ...

好像还是跟串口处理有关系,串口ORE标识都清掉了不知道还会卡死在串口里面,导致跳转失败,如果人为复位,同时发送报文的情况下还会导致APP的定时器死机,APP串口是定时查询的方式
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3329
金钱
3329
注册时间
2011-11-10
在线时间
207 小时
发表于 2023-5-10 08:38:13 | 显示全部楼层
跳之前清掉所有中断标志,关闭中断,反初始串口。APP里重新初始化。
回复

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2015-7-10
在线时间
24 小时
 楼主| 发表于 2023-5-10 13:20:56 | 显示全部楼层
c2007s 发表于 2023-5-10 08:38
跳之前清掉所有中断标志,关闭中断,反初始串口。APP里重新初始化。

好的!先照你说的试试看!APP里面用定时器查询的方式,定时器查询if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET),反复复位重启,总线上有报文的情况下也会死机,ORE标识也清过了,串口也读了,还是会进入到hardfault里面死循环不知道啥原因!网上都说清ORE标识能解决,正常运行的时候确实解决了大量数据死机问题,但是反复重启的时候会挂掉
回复

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2015-7-10
在线时间
24 小时
 楼主| 发表于 2023-5-10 14:24:28 | 显示全部楼层
@原子哥来帮帮看看啥情况呢?
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3329
金钱
3329
注册时间
2011-11-10
在线时间
207 小时
发表于 2023-5-11 08:58:12 | 显示全部楼层
aust19 发表于 2023-5-10 13:20
好的!先照你说的试试看!APP里面用定时器查询的方式,定时器查询if(USART_GetFlagStatus(USART1, USART_ ...

先清掉ORE再初始化。另外定时器优先级够不够高?中断处理函数速度够不够快?中断处理函数里有没有延时操作?都有可能导致总线数据多时出问题。
回复

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2015-7-10
在线时间
24 小时
 楼主| 发表于 2023-5-11 15:34:16 | 显示全部楼层
c2007s 发表于 2023-5-11 08:58
先清掉ORE再初始化。另外定时器优先级够不够高?中断处理函数速度够不够快?中断处理函数里有没有延时操 ...

整个APP函数就开了一个定时器2,其他串口中断都没开,用的查询方式的,定时器优先级都是0,已经最高了
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3329
金钱
3329
注册时间
2011-11-10
在线时间
207 小时
发表于 2023-5-12 11:53:31 | 显示全部楼层
当有一个字节未读取时就会ORE。你看你的波特率多少,你处理的函数不能超过一个字节的时长,否则就会有ORE错误。建议把波特率降低,看看错误上是否消除。另外如果是长时间接收数据注意定时累积误差,排除方法:运行一段时间,重新初始化一下串口。你直接开串口接收中断就可以了,为什么还用定时器扫描来做?简单的被搞复杂了
回复

使用道具 举报

9

主题

218

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1364
金钱
1364
注册时间
2020-5-12
在线时间
381 小时
发表于 2023-5-12 12:15:18 | 显示全部楼层
在跳转前关闭串口外设使能
回复

使用道具 举报

4

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2015-7-10
在线时间
24 小时
 楼主| 发表于 2023-5-22 10:04:57 | 显示全部楼层
c2007s 发表于 2023-5-12 11:53
当有一个字节未读取时就会ORE。你看你的波特率多少,你处理的函数不能超过一个字节的时长,否则就会有ORE错 ...

现在问题基本找到了,APP死机的原因是GD32F103芯片不能用ST的NVIC的复位命令来执行,单次或者少数没有问题,但是你反复调用哪个NVIC来复位就会出现死机现象。芯片原厂已经给出答复了,就是这个问题,用GD32F303测和STM32F103来测没有问题
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3329
金钱
3329
注册时间
2011-11-10
在线时间
207 小时
发表于 2023-5-23 08:36:34 | 显示全部楼层
aust19 发表于 2023-5-22 10:04
现在问题基本找到了,APP死机的原因是GD32F103芯片不能用ST的NVIC的复位命令来执行,单次或者少数没有问 ...

新产品开发还是得先用STM的,然后再考虑降低成本换成国产芯片。出了问题也好查到原因。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 08:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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