This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我有一位客户遇到以下问题。 请您给我们一些建议吗?
目前、我们使用的是所有 CAN 邮箱。 我们有18条 Tx 消息和14条 Rx 消息、每个消息当前都分配给专用对象 ID。 我们的目标是释放一些对象 ID、因为我们需要添加其他 Tx 和 Rx 消息。 我们希望通过对所有 Tx 消息仅使用1-2 (最好是1)个对象 ID 来实现此目的。 到目前为止、我们创建了自己的 FIFO 缓冲区、并调用 CANMessageSet 将数据写入总线。
我们遇到的问题是,通过这样做,我们需要等待~270us 才能再次使用邮箱。 这会导致任务超支和失败。 我们发现、清除 CAN_IF2CMD 的挂起中断使我们能够更快地进行传输(这很好)、但这会导致数据一致性问题(很可能是 FIFO 缓冲区末尾的逻辑问题)。
是否有更简单/更高效的方法来实现我们所寻求的目标? 就 TX FIFO 消息而言、它们是否需要任何特殊标志(即 MSG_OBJ_FIFO)? 每条消息为8个字节、与其它消息没有关系。 FIFO 只能在邮箱忙时使用、此时无法发送消息。
释放 Rx 邮箱相对容易、因为您可以通过使用筛选来接收同一邮箱中的任何 MSGID。 当然、这是假设应用程序能够足够快地读取接收到的消息、并且不会在不被读取的情况下导致消息被覆盖。
传输略有不同、因为邮箱每次都需要使用新的(唯一的) MSGID 进行写入。