我想知道我们如何计算一组标准 CAN id 的软件接受过滤器掩码。如果有人能用例子来解释这一点,那就太好了。并且还请建议一些链接/材料来学习 CAN 堆栈软件实现。
提前致谢。
让我用一个例子来解释这一点:
假设用户只想接收 ID 为 0x8Z(其中 Z = 1,3,5,7)的消息,那么这里是如何计算掩码寄存器和接受寄存器的值:
掩码寄存器 = 1111 1001
首先比较所有ID的第0位,如果相同则掩码寄存器对应的位为“1”,否则为“0”。然后比较第 1 位,然后比较第 2 位,依此类推...
在我们的例子中,所有 ID 中只有第 5 位和第 6 位不同。这解释了我们如何获得“掩码寄存器”值。
对于 Acceptance register value,取任何允许的消息 ID,这将是 Acceptance register value 的值。在我们的例子中,它可能是0x81或0x83或0x85或0x87
在编程时可以这样检查:
if((Incoming_ID && Mask_Register) == (Incoming_ID && Acceptance_Register))
{
//Receive Message
}
else
{
//Discard Message
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。