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之后解锁 消息接收),但这并没有解决我的问题。