,我看到了一个类似的 问题 ,但它没有回答我的问题。
我在我的程序中使用了canbus
通信和一个mask
,下面是一个从罐用获取的例子
struct can_filter {
canid_t can_id;
canid_t can_mask;
};
struct can_filter *rfilter;
setsockopt(s[i], SOL_CAN_RAW, CAN_RAW_FILTER, rfilter, numfilter * sizeof(struct can_filter));
/* try to switch the socket into CAN FD mode */
setsockopt(s[i], SOL_CAN_RAW, CAN_RAW_FD_FRAMES, &canfd_on, sizeof(canfd_on));
bind(s[i], (struct sockaddr *) &addr, sizeof(addr))
。。。
int ret = select(s[currmax - 1] + 1, &rdfs, NULL, NULL, timeout);
int nbytes = recvmsg(s[i], &msg, 0);
在这个例子中,我设置了mask
和than bind
,所以每次我将receive
来自socket
的消息时,都会使用相同的mask
。
是否可以在bind
之后和receive
之前更改receive
示例:
/* try to switch the socket into CAN FD mode */
setsockopt(s[i], SOL_CAN_RAW, CAN_RAW_FD_FRAMES, &canfd_on, sizeof(canfd_on));
bind(s[i], (struct sockaddr *) &addr, sizeof(addr))
。。。
setsockopt(s[i], SOL_CAN_RAW, CAN_RAW_FILTER, rfilter, numfilter * sizeof(struct can_filter));
int ret = select(s[currmax - 1] + 1, &rdfs, NULL, NULL, timeout);
int nbytes = recvmsg(s[i], &msg, 0);
发布于 2022-08-30 14:53:40
谢谢@RamyLebeau的SocketCAN推荐。
从文件中:
带有can_filters (SOCK_RAW)的原始协议套接字 使用CAN_RAW套接字与常用的套接字具有广泛的可比性。 对CAN字符设备的已知访问。去迎接新的可能性 多用户SocketCAN方法提供的一些合理的 默认设置为原始套接字绑定时间:
These default settings may be changed before or after binding the socket
我可以在mask
之前或之后更改binding
、socket
和每个can
消息receive
之前。
https://stackoverflow.com/questions/73542227
复制相似问题