Skip to content

[Bug] drv_can: RT_CAN_FILTER_STD_INIT和RT_CAN_FILTER_EXT_INIT的mask赋值疑问 #11576

Description

@RCSN

RT-Thread Version

master

Hardware Type/Architectures

all

Develop Toolchain

Other

Describe the bug

背景

我在阅读 RT_CAN_FILTER_STD_INIT / RT_CAN_FILTER_EXT_INIT 的实现时,注意到 filter 的 mask 被初始化为 0xFFFFFFFF

我的疑惑

根据 CAN 协议规范:

  • 标准帧(STD)ID 为 11 位,有效 mask 应不超过 0x7FF
  • 扩展帧(EXT)ID 为 29 位,有效 mask 应不超过 0x1FFFFFFF

因此我对 mask 使用 0xFFFFFFFF 有些困惑,想请教一下:

  1. 这里使用全 1 的 mask 是有意为之吗?如果是,这样设计是出于什么考虑(比如后续会被裁剪、或者硬件会自动忽略高位、或者作为"不过滤"的默认值)?
  2. 实际生效时,是否由底层驱动或硬件自动将超出位宽的 mask 位截断/忽略?
  3. 若不会自动截断,这里是否考虑限定为对应帧格式的有效位宽?

感谢!

Other additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions