【问题标题】:Get CAN bitrate获取 CAN 比特率
【发布时间】:2016-09-05 14:35:29
【问题描述】:

我想在 C++ 中读取我的 socketcan 套接字的当前配置的 CAN 比特率。

我可以看到ip -det link show can0的比特率:

9: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0 
    can state ERROR-ACTIVE restart-ms 100 
    bitrate 1000000 sample-point 0.750 
    tq 125 prop-seg 2 phase-seg1 3 phase-seg2 2 sjw 1
    pcan_usb: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
    clock 8000000

比特率是通过/etc/network/interfaces设置的,但用户可以手动更改。

libsocketcan 好像只支持设置码率,不支持读取。

code of iproute2 that produces the output above 使用 rtnetlink。

如何使用 libnetlink 读取对应的属性?或者还有其他读取当前比特率的方法吗?

【问题讨论】:

    标签: c++ c++11 can-bus netlink socketcan


    【解决方案1】:

    目前,我将系统调用的输出解释为ip -det link show can0 | grep bitrate | awk '{print $2}',这很丑但有效。

    肯定有更优雅的解决方案吗?

    【讨论】:

    • 这至少是“无用的grep使用”。 ip -det link show can0 | awk '/bitrate/ {print $1}'。我在/sys/ 中也找不到比特率。
    • ip -det link show can0 | awk '/bitrate/ {print $1 "=" $2}'
    【解决方案2】:

    您可以使用can_get_bittiming() 获取设置的码率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2015-02-17
      • 1970-01-01
      • 2017-06-10
      相关资源
      最近更新 更多