SocketCAN linux没有可用的缓冲区空间

2024-06-02 06:17:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用socketCAN定期发送一条带有device的消息

我创建了一个小脚本,如下所示:

import os
import time

msg = "1FF#FFFFF00000000000"

os.system("sudo slcand -o -c -f -s6 /dev/serial/by-id/*CANtact* can0")
os.system("sudo ifconfig can0 up")
os.system("sudo ifconfig can0 txqueuelen 1000") # this does not help

start = time.time()
while True:
    if round(time.time() - start, 1) % 60 == 0.:
        print(str(int((time.time() - start) / 60)) + " minutes")
    os.system("cansend can0 " + msg)
    time.sleep(0.1)

我已经做了一些研究,发现对某些人来说设置txqueuelen是有效的。然而,这对我没有帮助。此脚本的输出如下所示:

^{pr2}$

在错误发生之前,设备停止发送这些消息。在错误消息出现之前,进出流量的指示灯LED停止闪烁大约10秒到几分钟。而且,我不能在接收端读取任何内容。缓冲区填满所需的时间变化很大,从几分钟到几小时不等。通常在10-20分钟内。在

我曾想过可能会有类似接收缓冲区的东西,因为我从没有读到它只是填满了。但我不知道这是否真的是这样,也不知道如何测试它,如何刷新缓冲区或重置它等等。我只需要发信息。我什么都不在乎。在

之后唯一的解决办法就是重启我的树莓皮,它为设备供电。在


Tags: import脚本消息timeos错误sudomsg
1条回答
网友
1楼 · 发布于 2024-06-02 06:17:00

在打开链接之前需要设置ifconfig参数,但是在设置参数之前需要先打开链接。所以我不确定运行脚本时txqueuelen是否为1000。您的ifconfig can0的输出可能会显示这一点。在

尝试切换ifconfig命令的顺序。在

而不是:

os.system("sudo ifconfig can0 up")
os.system("sudo ifconfig can0 txqueuelen 1000")`

执行:

^{pr2}$

我个人也会添加一个命令,在脚本结束时关闭can0。在

相关问题 更多 >