调试能收到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大的那一个硬件对象,所以在调试的时候上层能收到对应的报文。

相关推荐
为何创造硅基生物15 小时前
ESP32S3的RGB屏幕漂移问题
网络
好运的阿财16 小时前
process 工具与子agent管理机制详解
网络·人工智能·python·程序人生·ai编程
周杰伦fans16 小时前
C# required 关键字详解
开发语言·网络·c#
洛水水16 小时前
深入理解网络编程核心:Reactor、IOCP 与异步 IO 模型详解
网络·iocp
favour_you___16 小时前
epoll惊群问题与解决
服务器·网络·tcp/ip·epoll
北方的流星16 小时前
华三网络设备的路由重定向配置
运维·网络·华三
.select.17 小时前
TCP 3
服务器·网络·tcp/ip
阿捏利17 小时前
详解网络协议(十六)UDP协议
网络·网络协议·udp
芯智工坊17 小时前
第13章 Mosquitto监控与日志管理
前端·网络·人工智能·mqtt·开源
派大星酷17 小时前
Cookie、Session、Token、JWT 原理 + 流程 + 区别 + 实战
java·网络