问题标签 [socketcan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
545 浏览

c - 使用 linux socket-communication(通过 wifi)时 Socket-CAN 不起作用

这是服务器端代码(树莓派)

一旦开始使用这个 linux socket 通信程序(当客户端 mylaptop 连接到 linux 机器时),基于 socket-CAN 的程序(基于 CAN 通信开源库的 mcp 2515 ..)不起作用说“写:没有可用的缓冲空间”当我尝试在下面的图片中进行 candump 检查时

图片

我想这与我在上面代码中用于 linux 机器(raspberry,linux)和我的笔记本电脑(window)之间的套接字通信的 linux 套接字程序有关。但我不知道如何避免与“缓冲区空间”相关的问题以及导致它的原因。也许我每次得到套接字帧时都应该刷新缓冲区?任何人都知道我应该怎么做才能同时让 Socket-CAN 和 linux 套接字通信工作?

0 投票
2 回答
1998 浏览

socketcan - 以编程方式设置 SocketCAN 比特率

我在我的系统上使用 SocketCAN。有没有办法以编程方式而不是从命令行设置 CAN 接口比​​特率。一个例子会很有帮助。

谢谢你。

0 投票
2 回答
6607 浏览

linux - 使用 SocketCAN 发送一次性消息

是否可以使用 SocketCAN 发送“一次性”CAN 消息?这基本上是一条不期望接收者回复确认的消息。协议允许不设置该 ACK 位。

0 投票
1 回答
265 浏览

c++ - Boost asio async_write_some 泄漏?

我一直在搞乱一个使用 boost::asio 进行 UDP 和 SocketCAN 通信的应用程序。今天,我注意到一些奇怪的事情——它正在泄漏内存!

所以我抓住了我值得信赖的工具包,其中包括

和 Allinea DDT 并开始诊断这个问题。

我最终得到的是以下片段,它利用 boost::asio::posix::basic_stream_descriptor 作为它的基础:

在这里,datSend 只是一个 ping 看门狗的空函数。我也试过

但这出于某种原因给出了异常(无效数据)。

这段代码的后端看起来像这样:

}

之后我只运行 ioservice 就是这样:

我已经阅读了很多 stackoverflow 主题以及 boost 文档,但似乎无法找到为什么这个函数会泄漏内存。

Boost 版本 - 1.60 G++ - 6.30 操作系统:Ubuntu 17.04

0 投票
0 回答
906 浏览

ubuntu - 如何在 Ubuntu 的 SocketCAN 中创建虚拟 CAN 网络

我计划在 Ubuntu 中使用 SocketCAN 为我的项目创建一个虚拟 CAN 网络。到目前为止,我可以使用 ip link add dev can1 type vcan 命令创建多个 can 接口。但是,我无法让他们相互交流。非常感谢任何帮助。

0 投票
2 回答
3968 浏览

linux - cangen vcan0 命令返回 write: Network is Down

对此相当新,任何帮助/指导将不胜感激。尝试使用 can-utils 运行虚拟 CAN 网络,但是当我尝试执行 candump 或 cangen 时,我不断收到 Network down 消息。

这是一些一般的过程......

$: lsmod 显示我有这些....

接下来是这些命令:

$ sudo ip link add name vcan0 type vcan

$ ifconfig vcan

$ cangen vcan0

给我

这与设置chmod有关吗?

0 投票
1 回答
763 浏览

linux - 如何将 SocketCAN 配置为特定接口?

我正在使用带有两个 CAN 接口的 Beaglebone Black 作为 SocketCAN。如何将接口can0 连接到我的硬件DCAN0?我需要并行使用两个套接字,但没有找到配置接口。

0 投票
2 回答
3825 浏览

c - SocketCAN select() 和 write() 不会阻塞

我正在使用 SocketCAN 在嵌入式设备(SOC / ARM 内核 / Linux)上测试 CAN 接口,我想使用高效的代码尽可能快地发送数据进行测试。

我可以将 CAN 设备(“can0”)作为 BSD 套接字打开,并使用“write”发送帧。这一切都很好。

我的桌面显然可以比 CAN 传输速率更快地生成帧(我使用的是 500000 bps)。为了有效发送,我尝试在套接字文件描述符上使用“选择”来等待它准备好,然后是“写入”。但是,无论发送缓冲区的状态如何,“select”似乎都会立即返回,并且“write”也不会阻塞。这意味着当缓冲区填满时,我从“write”(返回值 -1)收到错误,并且 errno 设置为 105(“没有可用的缓冲区空间”)。

这意味着我必须等待任意时间,然后再次尝试写入,这似乎非常低效(轮询!)。

这是我的代码(C,为简洁而编辑):

当我将每帧 WAIT_TIME 设置为高值(例如 500 uS)以使缓冲区永远不会填满时,我看到以下输出:

哪个好!在 500 uS 时,我得到 54% 的 CAN 总线利用率(根据 canbusload 实用程序)。

但是,当我尝试延迟 0 以最大化我的传输速率时,我看到:

最初的点“。” 显示缓冲区已满;一旦缓冲区已满,“X”开始出现,这意味着“write”调用失败并出现错误 105。

跟踪逻辑,这意味着“select”必须返回并且“FD_ISSET(skt, &fds)”为真,尽管缓冲区已满!(或者我错过了什么?)。

SockedCAN 文档只是说“使用 write(2) 系统调用可以类似地编写 CAN 帧

这篇文章建议使用“选择”。

这篇文章建议“写”不会阻止 CAN 优先级仲裁,但不涵盖其他情况。

那么“选择”是正确的方法吗?我的“写”应该阻止吗?我可以使用哪些其他选项来避免轮询?

0 投票
0 回答
93 浏览

c++ - Socket Write() 在自定义类中失败,但在主类中失败

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

自定义类(不工作):

主要(工作):

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

知道可能是什么问题吗?

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

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

0 投票
2 回答
1104 浏览

can-bus - Candump 显示 29 位 ID 而不是 11 位 - 无法重播代码

尝试使用can-utils重放 2018 Dodge Promaster 的 CAN 代码。根据我的阅读,他们使用 11 位 CAN ID。但是,当我使用:

日志显示 29 位 ID

我在想这就是为什么用 canplayer 重播不起作用的原因。有谁知道我如何强制 candump 使用 11 位 ID?