我正在开发一个使用 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));
}
flags
Edit2:创建的请求的字段存在差异。在request2
它被初始化0x01
和 for request
with 0x7effb80
...不知道这是从哪里来的...但是明确地设置它来0x0
解决问题