0

我正在开发一个使用 SocketCAN 库通过 CAN 发送一些消息的简单项目。但是现在我遇到了一个我自己无法解释的问题......当我write在自定义类中使用套接字命令时,它会因参数无效(errno:22 - EINVAL)而失败。为了找到我的问题,我公开了整个班级,并通过在我的main方法中使用与班级中相同的功能,它可以工作......

自定义类(不工作):

void Can::SendFrame(const can_frame &canFrame) const
{
bcm_message request = CreateSingleNonCyclicFrameTransmissionRequest(canFrame);
int result = write(canSocket, &request, sizeof(request));
}

主要(工作):

Can can;
bcm_message = can.CreateSingleNonCyclicFrameTransmissionRequest(canFrame);
int result = write(can.canSocket, &request, sizeof(request));

我正在使用 BCM 插座。套接字已连接并且工作正常(来自 main 方法)。

知道可能是什么问题吗?

编辑:如果我创建can_frame内部SendFrame() write()不会失败。

void Can::SendFrame(const can_frame &canFrame) const
{
can_frame testFrame;
testFrame.can_dlc = 1;
testFrame.can_id = 0x321;
testFrame.data[0] = 0xde;
auto request2 = CreateSingleNonCyclicFrameTransmissionRequest(testFrame);
int result2 = write(canSocket, &request2, sizeof(request2));
// as before:
bcm_message request = CreateSingleNonCyclicFrameTransmissionRequest(canFrame);
int result = write(canSocket, &request, sizeof(request));
}

flagsEdit2:创建的请求的字段存在差异。在request2它被初始化0x01和 for requestwith 0x7effb80...不知道这是从哪里来的...但是明确地设置它来0x0解决问题

4

0 回答 0