【发布时间】:2020-01-23 18:02:43
【问题描述】:
有没有办法用原始 socketcan 检查一个空的传输缓冲区?
编辑:或者有没有办法让socketcan阻塞,直到当前帧被发送,这将起到同样的作用......
(动机:我正在写一个单片机闪存工具。引导加载程序规范要求在发送一定数量的数据后等待一段时间,以便它写入闪存。根据总线加载发送的数据可能更快或更慢。)
【问题讨论】:
有没有办法用原始 socketcan 检查一个空的传输缓冲区?
编辑:或者有没有办法让socketcan阻塞,直到当前帧被发送,这将起到同样的作用......
(动机:我正在写一个单片机闪存工具。引导加载程序规范要求在发送一定数量的数据后等待一段时间,以便它写入闪存。根据总线加载发送的数据可能更快或更慢。)
【问题讨论】:
SocketCAN 套接字仅在帧被放入套接字缓冲区之前阻塞(尽管请参阅https://rtime.felk.cvut.cz/can/socketcan-qdisc-final.pdf 中的第 3.4 节了解一些微妙的复杂情况)。
如果您想发现帧是否发送成功,请启用CAN_RAW_RECV_OWN_MSGS 套接字选项并等待直到您收到设置了MSG_CONFIRM 标志的已发送帧。详情请见this answer。
【讨论】: