質問編集履歴
2
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -116,7 +116,7 @@
|
|
116
116
|
|
117
117
|
*/
|
118
118
|
|
119
|
-
CAN.init_Mask(0, 0, 0x3ff);
|
119
|
+
CAN.init_Mask(0, 0, 0x3ff); // there are 2 mask in mcp2515, you need to set both of them
|
120
120
|
|
121
121
|
CAN.init_Mask(1, 0, 0x3ff);
|
122
122
|
|
@@ -231,3 +231,101 @@
|
|
231
231
|
<受信したID>
|
232
232
|
|
233
233
|
0x000~0x0ff、0x400~0x4ff
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
###追記2
|
238
|
+
|
239
|
+
マスクとフィルタの演算内容をC言語で書き直してみました。
|
240
|
+
|
241
|
+
こんな感じでしょうか?
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
```C
|
246
|
+
|
247
|
+
#include <stdio.h>
|
248
|
+
|
249
|
+
|
250
|
+
|
251
|
+
#define MASK0 0x3ff
|
252
|
+
|
253
|
+
#define MASK1 0x3ff
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
#define FILT0 0x004
|
258
|
+
|
259
|
+
#define FILT1 0x005
|
260
|
+
|
261
|
+
#define FILT2 0x006
|
262
|
+
|
263
|
+
#define FILT3 0x007
|
264
|
+
|
265
|
+
#define FILT4 0x008
|
266
|
+
|
267
|
+
#define FILT5 0x009
|
268
|
+
|
269
|
+
|
270
|
+
|
271
|
+
int main(void)
|
272
|
+
|
273
|
+
{
|
274
|
+
|
275
|
+
int cnt = 0;
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
printf("<受信可能CAN-ID>\n");
|
280
|
+
|
281
|
+
|
282
|
+
|
283
|
+
for (int id = 0x000; id <= 0x7ff; id++)
|
284
|
+
|
285
|
+
{
|
286
|
+
|
287
|
+
if (((MASK0 & FILT0) == (MASK0 & id)) || ((MASK0 & FILT1) == (MASK0 & id)))
|
288
|
+
|
289
|
+
{
|
290
|
+
|
291
|
+
printf("%.3x ", id);
|
292
|
+
|
293
|
+
cnt++;
|
294
|
+
|
295
|
+
}
|
296
|
+
|
297
|
+
else if (((MASK1 & FILT2) == (MASK1 & id)) || ((MASK1 & FILT3) == (MASK1 & id))
|
298
|
+
|
299
|
+
|| ((MASK1 & FILT4) == (MASK1 & id)) || ((MASK1 & FILT5) == (MASK1 & id)))
|
300
|
+
|
301
|
+
{
|
302
|
+
|
303
|
+
printf("%.3x ", id);
|
304
|
+
|
305
|
+
cnt++;
|
306
|
+
|
307
|
+
}
|
308
|
+
|
309
|
+
|
310
|
+
|
311
|
+
if (cnt == 0x10)
|
312
|
+
|
313
|
+
{
|
314
|
+
|
315
|
+
printf("\n");
|
316
|
+
|
317
|
+
cnt = 0;
|
318
|
+
|
319
|
+
}
|
320
|
+
|
321
|
+
}
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
char end = getchar();
|
326
|
+
|
327
|
+
return 0;
|
328
|
+
|
329
|
+
}
|
330
|
+
|
331
|
+
```
|
1
test
CHANGED
File without changes
|
test
CHANGED
@@ -211,3 +211,23 @@
|
|
211
211
|
*********************************************************************************************************/
|
212
212
|
|
213
213
|
```
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
###追記
|
218
|
+
|
219
|
+
CAN.init_Mask(0, 0, 0x300);
|
220
|
+
|
221
|
+
CAN.init_Mask(1, 0, 0x3ff);
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
マスク関数の引数を上記に変更したところ、受信したIDは以下のようになりました。
|
226
|
+
|
227
|
+
この関数の結果、どういった計算で受信できるIDが変化したのか教えてください。
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
<受信したID>
|
232
|
+
|
233
|
+
0x000~0x0ff、0x400~0x4ff
|