例のtiny2313とVBで作ったシリアル
MIDIモニター。とりあえず普通に動くことが
確認できたので、念のためと思ってもう1個の方の
MIDIマスターキーボードに接続してみたら、「F8」
(16進)がズラズラーーーーと。
timing clock信号みたい。そうかぁ。timing clock信号
を出力するMIDIマスターもあるのね…。
ということで、他にもそういう恒常的に出つづける
信号が有るのか無いのか調べてみることに。
…とりあえず無さそう。
VB2005を開いてプログラムを修正。F8(timing clock)
もomitできるように機能追加。
さて、さらに念のためということでシリアルi/fの
バリエーションとしてFT232RLも試してみることに。
これまではATEN製のシリアル-USB変換ケーブル
経由でテストしていたんだけど、これをFT232RL経由
に繋ぎ変えたらなんだか変なことに。
鍵盤を弾いてからモニターの画面上にMIDI
メッセージが表示されるまでに数秒のラグが出ちゃう。
入力処理側が間に合わなくなって、バッファが上手く
掃けないまま溜まってしまっている感じだなぁ。
プログラムの間違えとは考え難いんだけどなぁ。
ATEN製のシリアル-USB変換ケーブルでは動いて
いるわけだし。
FTDI社のドライバとVBプログラムの相性か?
何が悪いのかイマイチ良くわかんないんだけど、
とりあえずPCのハードのせいかもと思ってもう1台
のPCでも同様に実行してみる…
同じ結果だ。
どうやら個別事情というよりは、FTDI社のドライバ
と今回作ったプログラムでは相性が出るという理解を
したほうがよさそうだな?
大した処理はやってないんだけどなぁ…
シリアルポートにバイナリで1バイトデータが受信
する毎にDelegateで別スレッドでテキストボックスに
追記していくだけの処理なんだけど。
…あれかな?
1バイト分の処理が終る前にさらに次の1バイトが届いた
っていうDataReceivedのハンドルを拾って、
「1バイト分処理するスレッド」
が次々と生成されちゃって、その複数のスレッド同士
でリソース競合しちゃってるとか?
そのスレッド同士が一斉にテキストボックスに書き込もう
とするから、その調停(スレッドの再起動とか?)で
不要な処理時間を要しているとか…?
(DB更新とかで言うところのデッドロックね)
同じUSB経由でもATEN製ドライバと変換
ケーブルなら出ないのに、FT232RLだとダメなのは
何でだろうねぇ?
1バイト1バイトパラパラと疎らにデータ送信できることが
前提のシリアルi/fと、1パケット1パケットまとめて
i/fするUSBとでは、相性がよくないってこと
なのかな。
どうしたものやら…



|