如何计算软件验收Mask值

use*_*265 3 can-bus

我想知道我们如何计算一组标准 CAN id 的软件接受过滤器掩码。如果有人能用例子来解释这一点,那就太好了。并且还请建议一些链接/材料来学习 CAN 堆栈软件实现。

提前致谢。

sat*_*ats 5

让我用一个例子来解释这一点:

假设用户只想接收 ID 为 0x8Z(其中 Z = 1,3,5,7)的消息,那么这里是如何计算掩码寄存器和接受寄存器的值:

  • 0x81 = 1000 0001
  • 0x83 = 1000 0011
  • 0x85 = 1000 0101
  • 0x87 = 1000 0111

掩码寄存器 = 1111 1001

首先比较所有ID的第0位,如果相同则掩码寄存器对应的位为“1”,否则为“0”。然后比较第 1 位,然后比较第 2 位,依此类推...

在我们的例子中,所有 ID 中只有第 5 位和第 6 位不同。这解释了我们如何获得“掩码寄存器”值。

对于 Acceptance register value,取任何允许的消息 ID,这将是 Acceptance register value 的值。在我们的例子中,它可能是0x810x830x850x87

在编程时可以这样检查:

if((Incoming_ID && Mask_Register) == (Incoming_ID && Acceptance_Register))
{
    //Receive Message
}
else
{
     //Discard Message
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。