平林さん

質問者のいとうです。

From: Kouichi Hirabayashi <k...@mogami.com>
Subject: [FreeBSD-users-jp 94047] Re: umodem で PICC18F2550 にアクセスすると不安定
Date: Sun, 11 Nov 2012 18:18:14 +0900

> デバイスドライバを書く側から見たら、いつデータが来るか
> わからないときは「100回以上回しても平気」なほうの構造
> にするか、センサ側がデータ送出指令を待つようにすべきだ
> と思いますが、運がよければ、最初のプログラム構造でも、
> sleep() を close() の後に移動すると(完全ではないにして
> も)改善されるかもしれないですね。
> 
> 平林 浩一

close()の後ろに sleep()を入れると、確かに快調なようです。ありがとうござ
いました。

しかし、せっかく早速のお返事をいただいたんですが、飲み込めていません。
最初のメールでアプリケーション層プロトコルの説明を TriState のマニュア
ルに譲ったため、状況が正確にお伝えできていなかったかと思いますので、補
足させて下さい。

気圧計は USB ポート経由の接続を待ち受けており、気圧計側から能動的にデー
タを送ってくることはありません。例えばスクリプトの中にある BARH という
のは、その自転での気圧を hPa 単位で要求するコマンドですが、他に BARI(気
圧を inchHg 単位で要求する)、RYUP(リレーを動作させるしきい値の設定)など、
いくつかのコマンドがあり、それを USB ポート経由で送信すると、応答が返る、
という動作フローです。したがって、いただいたメールにある「いつデータが
くるかわからない」という状況ではないと理解していますが、いかがでしょうか?

例えば(送ったコマンドのエコーバックがないので書き加えていますが)

sh# cu -l /dev/ttyU0
Connected
BARH^M^J と打鍵しています
Error   これは応答
BARH^M^J と打鍵しています
>1003.6hPa      これは次の応答
>~
[EOT]

のような要領です。

実は本番の(というほど大げさな話じゃないんですけど :-)プログラムは Perl
じゃなくって C で書いているんですが、ともかく close()の後ろに sleep()を
入れると改善されることはわかりましたので、がんばってみます。

引き続き、何か情報がありましたら、よろしくお願いします。

kkdlabs.jp, featuring Koh-ichi Ito as just another DNS freak in town.

メールによる返信