OpenEdv-开源电子网

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

UCOS 串口接收几分钟进入hardfault_handler解决方法!

[复制链接]

79

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2016-11-17
在线时间
47 小时
发表于 2016-11-22 10:09:10 | 显示全部楼层 |阅读模式
本帖最后由 daxing198612 于 2016-11-22 10:10 编辑

尝试了无数种方法,包括取消printf中文输出,减小接收字符数,在中断里加入
if (USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)//ÅD¶Ïμ½òç3öÖD¶Ï£¡
        {
                  USART_ReceiveData(USART2);//清除ORE标志位
                        USART_ClearFlag(USART2, USART_FLAG_ORE);
        }等等,串口接收数分钟还是会导致死机!


后来才发现
关键代码在关于USART串口接收中断的优先级设置里。
例如:MY_NVIC_Init(3, 3, USART2_IRQn, NVIC_PriorityGroup_2);
改成MY_NVIC_Init(0, 0, USART2_IRQn, NVIC_PriorityGroup_0);后串口连续接收数万次30字节数据再发送150字节数据再无异常,也不会死机了。
这种包含抢占优先级的分组方式,可能导致长时间串口进入接收中断的时候堆栈溢出,进入hardfault_handler无限死循环,只能重新启动。
关于优先级的影响原因只是猜测,哪位老兄可知真正原因!



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

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-22 10:27:31 | 显示全部楼层
hardfault handler一般都是错误的内存操作导致的,你可以看下debug里面的callback窗口,看看是什么原因导致进入的hardfault handler函数
回复 支持 反对

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-11-22 13:29:30 | 显示全部楼层
#define NVIC_PRIORITYGROUP_0         ((uint32_t)0x00000007U) /*!< 0 bits for pre-emption priority
                                                                 4 bits for subpriority */
#define NVIC_PRIORITYGROUP_1         ((uint32_t)0x00000006U) /*!< 1 bits for pre-emption priority
                                                                 3 bits for subpriority */
#define NVIC_PRIORITYGROUP_2         ((uint32_t)0x00000005U) /*!< 2 bits for pre-emption priority
                                                                 2 bits for subpriority */

是不是有其他地方的中断优先级配置跟这里的冲突了,检查一下。
活到老,学到老。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 16:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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