电小龙 发表于 2017-11-27 10:58:07

在CAN通信时发送超时后会出现堵死状况

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

发表于 2017-11-27 11:43:50

我对RTOS不是很熟悉,我找了一下,返回的值应该改为xTaskGetTickCount这个函数。

发表于 2017-11-27 11:04:09

HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。

电小龙 发表于 2017-11-27 11:34:46

插上仿真器进一步跟踪后,发现死的位置是在if((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout))这一句里,还不是if里面的语句,也就是在判断的时候出现了卡死。所以应该是在运行HAL_GetTick()这个函数里出现的卡死,这是为什么呢?等大神、、、

电小龙 发表于 2017-11-27 11:36:17

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

安 发表于 2017-11-27 11:04
HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。 ...
好像是你说的hal_gettick方面的问题,我现在该怎样处理呢?修改为rtos中的计时器怎么改呢?

电小龙 发表于 2017-11-27 11:38:32

安 发表于 2017-11-27 11:04
HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。 ...

uwTick没有增加

电小龙 发表于 2017-11-27 16:49:22

安 发表于 2017-11-27 11:43
我对RTOS不是很熟悉,我找了一下,返回的值应该改为xTaskGetTickCount这个函数。 ...

太感谢了,刚刚试了是可以的,又学到了新知识了、、、:victory:

发表于 2017-11-27 16:53:17

客气了,大家都是在实践中学习。

RegisEm 发表于 2017-12-9 15:35:07

楼主你好,你的问题描述中,把CAN的通信线断开是什么意思,还有最后您是怎么解决问题的?

电小龙 发表于 2017-12-14 22:13:30

RegisEm 发表于 2017-12-9 15:35
楼主你好,你的问题描述中,把CAN的通信线断开是什么意思,还有最后您是怎么解决问题的? ...

把通信线断开是我在CAN数据传输过程中一旦断开数据线,设备就死机了。然后最终解决的方法是在hal_gettick函数中用了frertos的函数来替代本来的Hal库里的自带的函数。
页: [1] 2
查看完整版本: 在CAN通信时发送超时后会出现堵死状况