工具/软件:
根据 2838x 技术参考手册、在使用单个消息对象时、DCAN 块结束标志应设置为 1。
[EOB 值为 1 表示]消息对象是单个消息对象或 FIFO 缓冲块中的最后一个消息对象。
注意:此位用于连接多个消息对象以构建 FIFO 缓冲区。 适用于单个消息
对象(不属于 FIFO 缓冲器)、该位必须始终设置为 1。
在我们的应用程序中、每个邮箱都配置为发送或接收单个 CAN ID。 我对 MCAN 和 DCAN 的实现进行了压力测试、以了解当消息读取速度不如接收速度快时会发生什么情况、并注意到意外(显然未定义)行为。 以下是说明邮箱配置的代码片段:
frame = CAN_MSG_FRAME_STD;
filter = CAN_MSG_OBJ_USE_ID_FILTER;
filter |= CAN_MSG_OBJ_FIFO; // Toggle EoB here
CAN_setupMessageObject(obj->portHandle, aMailBox + 1, aId, frame,
CAN_MSG_OBJ_TYPE_RX, 0x1FFFFFFF, filter,
aLen);
-当 EOB = 0,我们读取发送的最重新发送的消息(旧消息似乎被覆盖)
-当 EOB = 1 时,我们读取自上次读取后发送的第一条消息(新消息被丢弃)
个人而言、我指的是第一种接收最新数据的选项。 我不想对过时的数据进行操作。 我们提供了一个通用工具、因此、如果用户配置了新数据的读取速率相对于消息传输速率不理想、我最好始终使用新数据作为默认值。 但是、文档似乎表明这是一个错误的配置、并且行为(在我的测试中似乎一致)似乎未定义。
您能否评论 EOB 对单个消息对象的使用? 如果我有任何期望、结果将与这些结果相反。
谢谢!
Zia