调试能收到CAN报文,不调试不能收到

问题现象

调试能收到A报文,不调试不能收到。单板上就能够出现,这就比较好复现了。

问题分析

那就重点关注不调试时候的情况了,以下操作都是在不调试的情况下操作的。

在COM层接收回调函数打标志位发送到CAN上,默认值为0,收到变成1,超时丢失变成2,发现没有收到,直接从0变成2。

在canif层判断接收到的报文,如果是A报文,就把标志位置起来,发现并没有置起。

那问题肯定在MCAL层了。

就查询MCAL层的配置,初始化正常,能进入中断回调,中断回调当中有接收到A报文,就是报文分发的时候出问题。

问题结论

检查配置发现配置了两个一模一样的接收硬件对象,只是object ID不同。按照原理来说,报文进来之后会优先分配给object ID小的那一个硬件对象,结果canif层关联的是object ID大的那一个,在单板上面自然运行不起来。

调试的时候收发器一直在收报文,当object ID小的那一个硬件对象的缓存区满了,就会存入object ID大的那一个硬件对象,所以在调试的时候上层能收到对应的报文。

相关推荐
万象.1 天前
Linux数据链路层通信原理及报文格式
linux·网络·网络协议
victory04311 天前
Agent 面试知识树 + 高频追问答案库
网络·面试·职场和发展
Blurpath住宅代理1 天前
原生IP vs 广播IP:如何从网络层判断代理IP的“真实性”?
网络·静态ip·动态ip·代理·代理ip·住宅ip·住宅代理
chinesegf1 天前
DNS 验证验证SSL证书
linux·服务器·网络
猿饵块1 天前
python--websocket
网络·websocket·网络协议
taxunjishu1 天前
塔讯总线协议转换信捷 PLC 对接 TCP/IP 设备实战方案
网络·物联网·自动化
taxunjishu1 天前
半导体晶圆制造车间 SITRANS P 仪表与 V90 伺服系统精密控制应用
网络·物联网·自动化
雷帝木木1 天前
Flutter for OpenHarmony:Flutter 三方库 cbor 构建 IoT 设备的极致压缩防窃协议(基于标准二进制 JSON 表达格式)
网络·物联网·flutter·http·json·harmonyos·鸿蒙
齐齐大魔王1 天前
虚拟机网络无法连接
linux·网络·c++·python·ubuntu
ht巷子1 天前
boost.asio网络学习:Http Server
网络·c++·http