Can bus 如何计算软件验收掩码值
我想知道我们如何计算一些标准can id集的软件验收过滤器掩码。如果有人能举例说明这一点,那就太好了。 另外,请提供一些链接/资料,以了解CAN stack软件的实现Can bus 如何计算软件验收掩码值,can-bus,Can Bus,我想知道我们如何计算一些标准can id集的软件验收过滤器掩码。如果有人能举例说明这一点,那就太好了。 另外,请提供一些链接/资料,以了解CAN stack软件的实现 提前感谢。由于此过滤是在硬件中完成的,因此相当原始。通常计算涉及两个寄存器:掩码和过滤器。C中的等效逻辑为: /* dsPIC style; mask specifies "do care" bits */ if ((arbitrationId & mask) == filter) { /* Message acc
提前感谢。由于此过滤是在硬件中完成的,因此相当原始。通常计算涉及两个寄存器:掩码和过滤器。C中的等效逻辑为:
/* dsPIC style; mask specifies "do care" bits */
if ((arbitrationId & mask) == filter) {
/* Message accepted; rx interrupt triggered */
}
/* Accept all */
mask = 0;
filter = 0;
/* Accept CANopen default connection set (excluding SYNC and NMT) */
mask = 0x7F;
filter = node_id;
或
掩码的数量、过滤器的数量、过滤器是否启用以及如何启用,以及寄存器中ID位的排列都取决于硬件。要给你一个更具体的答案,需要关于所使用的特定硬件的详细信息
有关CANbus的基本信息可在此处找到:
- 0x81=1000 0001
- 0x83=1000 0011
- 0x85=1000 0101
- 0x87=1000 0111
- 让我用一个例子来解释这一点:
假设用户只希望接收ID为0x8Z(其中Z=1,3,5,7)的消息,那么下面是如何计算掩码寄存器和接受寄存器的值:
if((Incoming_ID && Mask_Register) == (Incoming_ID && Acceptance_Register))
{
//Receive Message
}
else
{
//Discard Message
}
希望能有帮助
if((Incoming_ID && Mask_Register) == (Incoming_ID && Acceptance_Register))
{
//Receive Message
}
else
{
//Discard Message
}