回答編集履歴

2

回答の修正

2018/03/14 23:48

投稿

y_waiwai
y_waiwai

スコア87749

test CHANGED
@@ -10,9 +10,13 @@
10
10
 
11
11
  これは、他の処理で受信操作の実行が遅れると取りこぼしが発生します
12
12
 
13
+ まず、他の処理をコメントアウトし、MIDI_RXルーチンだけを無限ループで実行させ、取りこぼしが出るかどうかを見てみてください。
13
14
 
14
15
 
16
+
17
+ これで取りこぼしがなく、その他の処理を入れると取りこぼしが発生するという場合は、
18
+
15
- 対策としては、他の時間のかかる処理を分割して、取りこぼしが発生する時間間隔より早い周期で受信操作(リングバッファの格納)を行う必要があります
19
+ の処理を分割して、取りこぼしが発生する時間間隔より早い周期で受信操作(リングバッファの格納)を行う必要があります
16
20
 
17
21
  そこらへんの対策はオシロスコープなどで、どこで時間がかかるか、どこで分割するかというのを見ていく必要があります
18
22
 

1

回答の修正

2018/03/14 23:48

投稿

y_waiwai
y_waiwai

スコア87749

test CHANGED
@@ -1,6 +1,6 @@
1
- ちと気になるところとしては、
1
+ 取りこぼしとは関係ないですが、ちと気になるところとしては、
2
2
 
3
- これとは別に、MIDI_Rxルーチンで、いきなりmidi.getcを呼んでいますが、受信データが来ていない場合はここで待ちに入ってしまいます
3
+ MIDI_Rxルーチンで、いきなりmidi.getcを呼んでいますが、受信データが来ていない場合はここで待ちに入ってしまいます
4
4
 
5
5
  ここはまず、受信データが有るかどうかを判断し、ない場合は以下の処理をパスするようにするほうがベストですね
6
6