質問編集履歴

2

追記

2019/11/18 12:29

投稿

Alyn
Alyn

スコア50

test CHANGED
File without changes
test CHANGED
@@ -116,7 +116,7 @@
116
116
 
117
117
  */
118
118
 
119
- CAN.init_Mask(0, 0, 0x3ff); // there are 2 mask in mcp2515, you need to set both of them
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

2019/11/18 12:29

投稿

Alyn
Alyn

スコア50

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