「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



例の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とでは、相性がよくないってこと
なのかな。

どうしたものやら…



コメント ( 2 )