CAN通信发送超时后程序会死

2019-07-14 14:31发布

小弟最近在用CAN通信,在开发过程中发现了用HAL_CAN_Transmit发送数据时,如果把CAN的通信线断开时,程序会死在HAL_CAN_Transmit函数中的if(timeout != HAL_MAX_DELAY)的判断中。我使用的是freertos,我也百度了一下,说是里面的_HAL_UNLOCK(hcan)的问题,看的有点一头雾水。或许也是我的CAN配置的问题吧,有哪位大侠知道麻烦告诉下小弟,感激不尽、、、

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
TOPCB
1楼-- · 2019-07-14 20:58
HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。
hu_wfllllllllfl
2楼-- · 2019-07-14 22:48
插上仿真器进一步跟踪后,发现死的位置是在if((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout))这一句里,还不是if里面的语句,也就是在判断的时候出现了卡死。所以应该是在运行HAL_GetTick()这个函数里出现的卡死,这是为什么呢?等大神、、、
hu_wfllllllllfl
3楼-- · 2019-07-14 23:05
TOPCB 发表于 2019-1-17 07:06
HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。

本帖最后由 电小龙 于 2017-11-27 11:41 编辑

好像是你说的hal_gettick方面的问题,我现在该怎样处理呢?修改为rtos中的计时器怎么改呢?
hu_wfllllllllfl
4楼-- · 2019-07-15 04:59
TOPCB 发表于 2019-1-17 07:06
HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。

uwTick没有增加
hu_wfllllllllfl
5楼-- · 2019-07-15 07:19
TOPCB 发表于 2019-1-17 06:54
我对RTOS不是很熟悉,我找了一下,返回的值应该改为xTaskGetTickCount这个函数。

太感谢了,刚刚试了是可以的,又学到了新知识了、、、
TOPCB
6楼-- · 2019-07-15 08:47
客气了,大家都是在实践中学习。

一周热门 更多>