页次: 1
CAN 过滤规则:
接收到的ID 与 (过滤器ID 和 mask) 匹配:
(接收ID & mask) == (过滤器ID & mask)mask 的某位=1 → 这一位必须匹配
mask 的某位=0 → 这一位忽略(不参与比较)
---
RT_CAN_FILTER_ITEM_INIT(0x100, 0, 0, 0, 0x700, RT_NULL, RT_NULL)| 参数 | 值 |
| ----- | ------- |
| 过滤 ID | 0x100 |
| 掩码 | 0x700 |
过滤 ID (0x100) = 001 0000 0000
Mask (0x700) = 111 0000 0000| bit | 10 | 9 | 8 | 7~0 |
| ---- | ---- | ---- | ---- | --------------- |
| mask | 1 | 1 | 1 | 0 0 0 0 0 0 0 0 |
| 含义 | 必须匹配 | 必须匹配 | 必须匹配 | 无需匹配 |
只匹配 ID 的前三位 bits(bit10~bit8)
001 *** *****0x100 ~ 0x1FF因为前三位固定为 001,后面 8 bits 任意。
---
RT_CAN_FILTER_ITEM_INIT(0x345, 0, 0, 0, 0x7FF, RT_NULL, RT_NULL)| 参数 | 值 |
| ----- | ------------- |
| 过滤 ID | 0x345 |
| 掩码 | 0x7FF(全部匹配) |
过滤 ID (0x345) = 011 0100 0101
Mask (0x7FF) = 111 1111 1111| mask 每一位都=1 → 每一位必须完全匹配 |
接收 ID 必须 == 0x345 才能通过。---
| 配置 | ID | 掩码 | 匹配范围 |
| -- | ----- | ----- | -------------------- |
| 1 | 0x100 | 0x700 | 区间 → 0x100 ~ 0x1FF |
| 2 | 0x345 | 0x7FF | 只匹配 → 0x345 |
| mask bit | 含义 |
| -------- | ----------- |
| 1 | 必须匹配 ID |
| 0 | 忽略此 bit,不关心 |
页次: 1