c:socketCAN连接:read()不够快

时间:2016-06-03 07:16:42

标签: performance database-connection database-performance socketcan

socketCAN连接:read()不够快

您好,

我使用socket()连接进行CAN通信。

fd = socket(PF_CAN, SOCK_RAW, CAN_RAW);

我正在使用2个线程:一个周期性的1ms RT线程发送数据和一个 线程来读取传入的消息。 read函数如下所示:

void readCan0Socket(void){
   int receivedBytes = 0;
   do
   {
      // set GPIO pin low
      receivedBytes = read(fd ,
                           &receiveCanFrame[recvBufferWritePosition],
                           sizeof(struct can_frame));
      // reset GPIO pin high

      if (receivedBytes != 0)
      {
         if (receivedBytes == sizeof(struct can_frame))
         {
            recvBufferWritePosition++;
            if (recvBufferWritePosition == CAN_MAX_RECEIVE_BUFFER_LENGTH)
            {
               recvBufferWritePosition = 0;
            }
         }
         receivedBytes = 0;
      }

   } while (1);
 }

套接字配置为阻塞模式,因此读取功能保持打开状态 直到收到消息。目前的实施工作正在进行,但何时 我测量读取消息和下一个等待状态之间的时间 读取功能(参见设置/复位GPIO注释)时间在30 us之间变化 (平均值)和> 200我们超过200us的值意味着 (CAN的波特率为1000 kBit / s),包时无法识别 read()处理上一条消息。 read()函数必须在其中准备就绪 134我们。

如何加快实施?我尝试使用两个线程 用Mutexes分隔(在read()函数之前锁定并在a之后解锁 消息接收),但这并没有解决我的问题。

0 个答案:

没有答案
相关问题