質問するログイン新規登録

質問編集履歴

2

追記

2019/11/18 12:29

投稿

Alyn
Alyn

スコア51

title CHANGED
File without changes
body CHANGED
@@ -57,7 +57,7 @@
57
57
  /*
58
58
  * set mask, set both the mask to 0x3ff
59
59
  */
60
- CAN.init_Mask(0, 0, 0x3ff); // there are 2 mask in mcp2515, you need to set both of them
60
+ CAN.init_Mask(0, 0, 0x3ff); // there are 2 mask in mcp2515, you need to set both of them
61
61
  CAN.init_Mask(1, 0, 0x3ff);
62
62
 
63
63
 
@@ -114,4 +114,53 @@
114
114
  この関数の結果、どういった計算で受信できるIDが変化したのか教えてください。
115
115
 
116
116
  <受信したID>
117
- 0x000~0x0ff、0x400~0x4ff
117
+ 0x000~0x0ff、0x400~0x4ff
118
+
119
+ ###追記2
120
+ マスクとフィルタの演算内容をC言語で書き直してみました。
121
+ こんな感じでしょうか?
122
+
123
+ ```C
124
+ #include <stdio.h>
125
+
126
+ #define MASK0 0x3ff
127
+ #define MASK1 0x3ff
128
+
129
+ #define FILT0 0x004
130
+ #define FILT1 0x005
131
+ #define FILT2 0x006
132
+ #define FILT3 0x007
133
+ #define FILT4 0x008
134
+ #define FILT5 0x009
135
+
136
+ int main(void)
137
+ {
138
+ int cnt = 0;
139
+
140
+ printf("<受信可能CAN-ID>\n");
141
+
142
+ for (int id = 0x000; id <= 0x7ff; id++)
143
+ {
144
+ if (((MASK0 & FILT0) == (MASK0 & id)) || ((MASK0 & FILT1) == (MASK0 & id)))
145
+ {
146
+ printf("%.3x ", id);
147
+ cnt++;
148
+ }
149
+ else if (((MASK1 & FILT2) == (MASK1 & id)) || ((MASK1 & FILT3) == (MASK1 & id))
150
+ || ((MASK1 & FILT4) == (MASK1 & id)) || ((MASK1 & FILT5) == (MASK1 & id)))
151
+ {
152
+ printf("%.3x ", id);
153
+ cnt++;
154
+ }
155
+
156
+ if (cnt == 0x10)
157
+ {
158
+ printf("\n");
159
+ cnt = 0;
160
+ }
161
+ }
162
+
163
+ char end = getchar();
164
+ return 0;
165
+ }
166
+ ```

1

2019/11/18 12:29

投稿

Alyn
Alyn

スコア51

title CHANGED
File without changes
body CHANGED
@@ -104,4 +104,14 @@
104
104
  /*********************************************************************************************************
105
105
  END FILE
106
106
  *********************************************************************************************************/
107
- ```
107
+ ```
108
+
109
+ ###追記
110
+ CAN.init_Mask(0, 0, 0x300);
111
+ CAN.init_Mask(1, 0, 0x3ff);
112
+
113
+ マスク関数の引数を上記に変更したところ、受信したIDは以下のようになりました。
114
+ この関数の結果、どういった計算で受信できるIDが変化したのか教えてください。
115
+
116
+ <受信したID>
117
+ 0x000~0x0ff、0x400~0x4ff