362_CAN掩码以及过滤器的使用
这是我很早就需要补上的一课,工作因素,之前的代码基本能够满足要求,因此这方面也就一直没关注。看起来,工作还是不能太忙了,太忙了总会阻碍一个人的进步。时至今日,我依然感激曾经北京三年打酱油的日子,不加班让我有大量的时间可以去自我提升。
本来,在工作之中补上这个落下的功课是最好的。好巧不巧,还是到了我自己的自我学习过程中。而我这次的学习,竟然也有点返璞归真,没有采用工作中那么复杂的MCU,而是直接基于Arduino和一个扩展板。说白了,其实是基于MCP2515的CAN芯片。
最初,对于这个掩码以及过滤器的功能几乎是模糊的。或许看到的demo太好了,直接解决了我的所有问题。不过,这次在这个2515芯片中,我看到了让人一看就懂的一个总结,一个真值表。
总结太到位了:mask决定filter是否起作用,因此想要接收全部报文,直接mask设置为0就搞定。如果mask设置了,则相应位过滤器起作用。过滤器的作用就是:与我相同我才接收。这样,一组功能描述就够清楚了。
但是,从别人的代码中发现只有2组mask,却有6组filter,怎么办呢?其实,这里也有明确的绑定关系:
这样,一切都清楚了。
如果设置如下的测试代码:
出现的结果应该是0x100,0x101的报文,无论标准帧还是扩展帧都是可以被接收的,但是RXB1接收的是扩展帧。而0x5和0x1的报文,只能够接收扩展帧,自然也是RXB1接收。
接下来,一次发送0x100, 0x101, 0x5, 0x1几帧报文。都是先标准帧后扩展帧,看一下接收情况。
是否接收成功,其实我自己通过发送之后查看是看到了的,现象确实是跟我们预期一致。看起来,这一课补上还算是很轻松。