你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

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

代码1

代码1
收藏 1 评论12 发布时间:2017-11-27 10:58

举报

12个回答
废鱼 回答时间: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这个函数。 ...

太感谢了,刚刚试了是可以的,又学到了新知识了、、、
废鱼 回答时间: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库里的自带的函数。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

RegisEm 回答时间:2017-12-18 11:10:59
电小龙 发表于 2017-12-14 22:13
把通信线断开是我在CAN数据传输过程中一旦断开数据线,设备就死机了。然后最终解决的方法是在hal_gettick ...

谢谢!
xiao王 回答时间:2017-12-19 12:05:22
楼主,我在hal.c里把hal_gettick函数的返回值换成xTaskGetTickCount();但是添加task.h这个头文件不成功?要怎么添加好
liantianwoma 回答时间:2019-3-1 14:20:30
也解决了我的问题,谢谢大神们

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版