自作手パ(MPG)をワイヤレス化するのにアダプターを作製
し、後は、ケースに組む状態になってます。
ただ、念のデータの取りこぼしを調べたら、パルスジェネレータ
を早く回すと、約半分の取りこぼしがあったので、受信側の
プログラムにリングバッファーをいれました。
リングバッファーをいれることで、ほぼデーターの取りこぼし
がなくなりました。
多少、疑問が残ったので、送受信のデーターの取りこぼし
を調べるのに、ローコストLCDシリアル通信モニターを
作製しました。
これだけでは、ただデーターの表示をするだけなので、
カウントしたデータを計測してターミナルに表示できるように
基板とプログラムを作成しました。
基板といっても、PICにバスコンとICSPの端子をつけ
ただけのものです。
比較的短時間で、ほぼ動くようになりましたが、二つほど
ドツボにはまって、二日ほどもがくことになりました。
一つは、リングバッファーの操作でした。「s」のキャラクター
が入力された一つ前のデーターをカウントのキーにするのに、
リングバッファーの読み取りのポインターを「s」の一つ前に
もどせばいい、と思いこんでいました。これが、ドツボの始まり
でした。
いくら、やっても、思ったキーになりません。
読み込んだデータを、デバッグ用に表示してみて、やっと
分かりました。
データを取り込んだ後、ポインターを次の読み込みにそ
そなえて、一つ進めていたのです。
本来なら、ポインターを二つもどさないとだめなわけでした。
「-1」としていたところを「-2」にしてやっと解決です。
もう一つは、久しぶりに使ったprintf( )のフォーマットの間
違いでした。
「int」の「%4d」としなければならないところを、「char」の
「%c」としていました。当たり前に、表示されないので、
あれこれいじって、やっとprintf( )のフォーマットにたどり
つきました。
昔、PC用に、Cであれこれやっていたころは、printf( )が
大嫌いで、直接ビデオラムを操作して表示する関数等を作って
使ってました。
今回は、ターミナルへの表示位置を決めるのに、printf( )を
つかって、エスケープシーケンスの使いまくりでした。
とりあえずのプログラムです。
main.c
例によって、ゴミが沢山のこっています。表示をもうちょっと洗練
させたいなと思ってますが、計測中の表示をやめて、計測終了
後に表示させた方が、いいのかなと、思案中です。