2013-10-28 28 views
1

情景Linux可以总线传输超时

有连接到CAN总线一个Linux供电的设备。设备周期性地发送CAN消息。这个消息携带的数据的性质就像测量而不是命令,即只有最近一个实际上是有效的,并且如果一些消息丢失,只要最后一个消息成功接收,这不是问题。

然后,有问题的设备与CAN总线断开连接的时间要比后续消息传输之间的间隔长得多。设备逻辑仍在尝试传输消息,但由于总线断开,CAN控制器无法传输任何消息,因此消息正在TX队列中累积。

一段时间后,CAN总线连接恢复,并且所有累积的消息都在总线上被逐一踢。


问题

  1. 当恢复CAN总线连接,过时的消息的未定义量将被从TX队列发送。
  2. 虽然CAN总线连接仍然不可用,但TX队列已满,因此将丢弃一些最新消息(即唯一有效的消息)的传输。
  3. 一旦CAN总线连接恢复,在发送队列正在刷新期间会出现短时业务突发。这可以改变时间触发总线调度(如果使用的话)(这是我的情况)。

问题

我的应用程序使用SocketCAN驱动,所以基本上这个问题应适用于SocketCAN,但其他的选择被认为是太多,如果有任何。我看到了两种可能的解决方案:定义一个消息传输超时(如果消息在某个预定义数量的时间内没有传输,如果时间会自动丢弃),或者手动中止过期消息的传输(尽管我怀疑这是可能的完全用套接字API)。

因为第一选择似乎是最真实的我,问题是:

  1. 如何定义TX超时可以在Linux下的接口?
  2. 除了TX超时之外,还有其他选择可以解决上述问题吗?
+0

我会问这个问题[Linux的可邮件列表]上(http://vger.kernel.org/vger -lists.html#的linux-CAN)。 – yegorich

+0

确实。刚刚转贴。 –

+0

嗯。 'safety-critical'和'linux'标签... –

回答