在CAN通信时发送超时后会出现堵死状况
小弟最近在用CAN通信,在开发过程中发现了用HAL_CAN_Transmit发送数据时,如果把CAN的通信线断开时,程序会死在HAL_CAN_Transmit函数中的if(Timeout != HAL_MAX_DELAY)的判断中。我使用的是freertos,我也百度了一下,说是里面的_HAL_UNLOCK(hcan)的问题,看的有点一头雾水。或许也是我的CAN配置的问题吧,有哪位大侠知道麻烦告诉下小弟,感激不尽、、、我对RTOS不是很熟悉,我找了一下,返回的值应该改为xTaskGetTickCount这个函数。 HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。 插上仿真器进一步跟踪后,发现死的位置是在if((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout))这一句里,还不是if里面的语句,也就是在判断的时候出现了卡死。所以应该是在运行HAL_GetTick()这个函数里出现的卡死,这是为什么呢?等大神、、、 本帖最后由 电小龙 于 2017-11-27 11:41 编辑
安 发表于 2017-11-27 11:04
HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。 ...
好像是你说的hal_gettick方面的问题,我现在该怎样处理呢?修改为rtos中的计时器怎么改呢? 安 发表于 2017-11-27 11:04
HAL_GetTick这个函数里面的计数器是否在增加,如果没有,修改为rtos中的计数器。 ...
uwTick没有增加 安 发表于 2017-11-27 11:43
我对RTOS不是很熟悉,我找了一下,返回的值应该改为xTaskGetTickCount这个函数。 ...
太感谢了,刚刚试了是可以的,又学到了新知识了、、、:victory: 客气了,大家都是在实践中学习。 楼主你好,你的问题描述中,把CAN的通信线断开是什么意思,还有最后您是怎么解决问题的? RegisEm 发表于 2017-12-9 15:35
楼主你好,你的问题描述中,把CAN的通信线断开是什么意思,还有最后您是怎么解决问题的? ...
把通信线断开是我在CAN数据传输过程中一旦断开数据线,设备就死机了。然后最终解决的方法是在hal_gettick函数中用了frertos的函数来替代本来的Hal库里的自带的函数。
页:
[1]
2