私はプロジェクトにシリアルデバイスを使用しており、PC側で実行しようとしているのは、シリアルデバイスから送信されたコマンドをリッスンし、クエリを解釈し、クエリに応じてコードを実行し、結果を送信することです。 。
正直に言って、リスナーとしてPHPを使用してみましたが、残念ながら、スクリプトをレシーバーとして機能させるために必要な無限ループは、CPUを25%までロードします。したがって、実際にはそうではありません。最良のオプション。
現在cygwinを使用していますが、Linuxのネイティブコマンドを使用してbashスクリプトを作成したいと思います。
以下を使用してデータを受信できます。
cat /dev/ttyS2
そして、次のように応答を送信します。
echo "command to send" > /dev/ttyS2
私の質問は、自動リスナーを作成してデータを送受信できるようにするにはどうすればよいですか?私が抱えている主な問題は、実際には、情報を受け取ったらcat/dev/ttyS2コマンドを停止し、それを変数に入れて、スイッチと比較したり、一連のifそれ以外の場合はブロックします。その後、応答を返送して、サイクルを最初からやり直しますか?
ありがとう
これはあなたが探しているものではありませんか?
while read -r line < /dev/ttyS2; do
# $line is the line read, do something with it
echo $result > /dev/ttyS2
done
適切なツールを使用すると、デバイスに出力がない場合でも、実際にはCPU使用率を正確に0にすることができます。
これを実現するには、高級言語(Perl、Python、C/C++で十分ですが、bashではありません)を使用し、シリアルデバイスのファイルハンドルの上でselectループを使用する必要があります。これはPerlの例です http://perldoc.Perl.org/IO/Select.html ですが、select()syscallをサポートしている限り、他の言語を使用できます。