场景
[有一个Linux供电的设备连接到CAN总线。设备会定期发送CAN消息。该消息携带的数据的性质就像测量而不是命令,即实际上只有最新消息才有效,并且如果丢失了某些消息,只要成功接收到最新消息就不会成为问题。
然后,所讨论的设备与CAN总线断开连接的时间长于后续消息传输之间的时间间隔。设备逻辑仍在尝试发送消息,但是由于总线已断开,因此CAN控制器无法发送任何消息,因此消息被累积在TX队列中。
一段时间后,CAN总线连接恢复,所有累积的消息都被逐一踢到总线上。
问题
问题
我的应用程序使用SocketCAN驱动程序,所以基本上该问题应该应用于SocketCAN,但是如果有其他选择,也要考虑其他选项。
我看到了两种可能的解决方案:定义消息传输超时(如果消息未在预定的时间内传输,如果时间到了,它将被自动丢弃),或者手动中止过时的消息传输(尽管我怀疑是否有可能这样做)使用套接字API)。
由于第一种选择对我来说似乎是最真实的,所以问题是:
方案有一台Linux供电的设备连接到CAN总线。设备会定期发送CAN消息。该消息携带的数据的性质类似于度量,而不是...
Linux-can邮件列表提供了一些好的答案:http://thread.gmane.org/gmane.linux.can/4167
我不知道SocketCAN的内部原理,但我认为应该在更一般的逻辑层次上解决问题的大部分。