前提・実現したいこと
私は,エレクトーン(ELD-02C)と Nucleo F446RE を使用して,エレクトーンのMIDIデータを読み込んでいます.読み込んだ値によって,LEDを光らせています.一度にたくさんの鍵盤を押して,MIDIデータを読み込むと,取りこぼしてしまいます.
発生している問題・エラーメッセージ
一度にたくさんの鍵盤を押して,MIDIデータを読み込むと,取りこぼしてしまいます.ノイズということも考えて,フォトカプラと,抵抗を入れましたが,変わりません.Mbedでリングバッファを自作して確認したため,バッファ漏れということはないと思われます.
下記に自作リンバッファのプログラムを載せておきます.プログラムが汚くてすみません,試作中なので,コメントアウト等が多くあります.間違い等ありましたら指摘お願いします.
色々調べた結果,MIDIの割り込みすら起きていないと思います.
該当のソースコード
C++
1//省略 2RawSerial midi(A0,A1,31250); 3 4//省略 5 6volatile char getData__[256] = {0}; 7volatile int writePos__ = 0; 8volatile int readPos__ = 0; 9volatile int available__ = 0; 10 11 12void Midi_RX(); 13int getData(); 14int peekData(); 15 16//省略 17 18int main() 19{ 20 //省略 21 midi.attach(Midi_RX_, RawSerial::RxIrq); 22 //省略 23} 24 25char read_() 26{ 27 //while(midi.readable() == 0) {} 28 //return midi.getc(); 29 //while (available__ == 0) {} 30 readPos__++; 31 if (readPos__ > (BUFFER - 1)) readPos__ = 0; 32 char a_ = getData__[readPos__]; 33 //available__ = writePos__ - readPos__; 34 available__--; 35 //if (available__ < 0) available__ = writePos__ + ((BUFFER - 1) - readPos__); 36 //printf("++%d:%d:%d++\n\r",a_,readPos__,writePos__); 37 return a_; 38} 39 40char peek_() 41{ 42 //while(midi.readable() == 0) {} 43 //return midi.peekc(); 44 //while (available__ == 0) {} 45 //available__ = writePos__ - readPos__; 46 //if (available__ < 0) available__ = writePos__ + ((BUFFER - 1) - readPos__); 47 //printf("++%d:%d:%d++\n\r",readPos__,writePos__,available__); 48 int readPos__m = readPos__ + 1; 49 if (readPos__m > (BUFFER - 1)) readPos__m = 0; 50 return getData__[readPos__m]; 51} 52 53void write_(char *a_,int b_) 54{ 55 for (int i_ = 0 ; i_<b_; i_++) midi.putc(a_[i_]); 56} 57 58void Midi_RX_() 59{ 60 writePos__++; 61 if (writePos__ > (BUFFER - 1)) writePos__ = 0; 62 getData__[writePos__] = midi.getc(); 63 //printf("%d\n\r",getData__[writePos__]); 64 //available__ = writePos__ - readPos__; 65 //if (available__ < 0) available__ = writePos__ + ((BUFFER - 1) - readPos__); 66 available__++; 67 if (available__ > 100) printf("Over 100"); 68} 69 70//省略 71
補足情報(FW/ツールのバージョンなど)
使用器具
- エレクトーン(ELS-02C)
- Nucleo F446RE
- TLP2630F
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/19 00:09
2018/03/19 00:27
退会済みユーザー
2018/03/20 07:09