初级会员

- 积分
- 56
- 金钱
- 56
- 注册时间
- 2019-5-15
- 在线时间
- 17 小时
|
1金钱
本帖最后由 wpgdut 于 2019-5-28 21:38 编辑
原子哥,各位前辈,小弟现在使用STM32F429开发板,使用UCOS-II+HAL库,移植开发板中的例程,建立三个任务,主要有串口收发、LWIP网口收发、以及CAN收发三个功能。三个中断接收优先级依次为CAN接收中断、网口接收中断、串口接收中断。CAN接收中断优先级最高。
CAN通过HAL_CAN_Transmit发送数据(Timeout超时设置为10),每秒大概发送查询帧20帧,每发送一帧查询帧后,底层应答30帧数据,所以CAN中断接收大概每秒有600帧。
网口发送和中断应答接收的数据大概是每秒40帧(一问一答),现在遇到一个很纠结的问题。
程序在运行几个小时以后,进入HardFault_Handler错误循环。STOP停止后,通过KEIL调试,发现程序是在HAL_CAN_Transmit发送过程中的hcan->State = HAL_CAN_STATE_BUSY_TX处进入HardFault_Handler,详细如图所示。看起来就像就是CAN的发送和中断接收有冲突了一样。我猜想也有可能是网口中断的影响。
我通过监控,HAL_CAN_Transmit发送函数的返回值在1个小时候内,大概出现了400次HAL_TIMEOUT超时,即CAN发送失败的情况。另外还有个现象,就是监控CPU使用率OSCPUUsage,开始一段时间该值都比较低正常,运行一段时间后就会变的很大,大概有60-80的样子,最大值有90多。
我在这个问题上卡住好多天了,我自己也查了很多资料尝试了各种方法,依然未能凑效。今天也是第一次在论坛上发帖,麻烦原子哥和各位大神们帮忙看看,指点一下,小弟不胜感激!谢谢。
|
|