[Armadillo:02072] シリアル受信でデータ取りこぼし
Hiroki Nakamura
email@hidden
2007年 9月 22日 (土) 23:31:46 JST
お世話になります。
nakamuraと申します。
Armadillo-9を使用しております。
現在、シリアル送受信でデータを取りこぼす現象が出ております。
考えられる原因等あれば、教えて下さい。
(プログラムの話になってしまいますが、環境がArmadilloの場合だけ、
出ておりますので、参考までに質問させて頂きます。)
試験内容)
・PC側からシリアルt通信にて、Armadillo-9に対してデータ送信。
(データ数は、618byte)
環境)
・シリアル送受信を行うプログラムをPC <-> Armadillo-9両方に配置
・シリアルフレームは、下記構造としています。
データレングス(2byte)/ダミー(2byte)/データ(可変)/CRC(2byte)
・送信処理は、write関数で行い、戻り値をみて、送信データ数を
カウントして送信する処理としている。
・受信処理ではread関数で行い、戻り値をみて、データレングス分、
受信する処理とする。
現象)
・Armadilo-9が、受信データを10〜20byte取りこぼす。
・read関数の後で、受信したサイズ及び受信データをプリントで表示
させた所、あるタイミングで、データ(10〜20byte)を取りこぼしている。
(↑後述のシリアルモニタで確認した内容と比較した結果)
確認した内容)
・PCを受信側にした場合、現象が発生しない。
(Armadilo-9が受信側の時のみ現象発生)
・受信処理では、select関数を使用しているが、エラーは出ていない。
・read関数でエラーは出ていない。
・シリアルモニターで確認した所、送信側から送信したデータが
シリアル線に流れている事は確認済み。(送信側に問題はない。)
・データ数が120byte以下の場合は、現象が出ない。
(データが少ない時は正常に送受信する。)
・シリアルオープン時の設定は以下としています。(一部、抜粋)
#define BAUDRATE B19200
struct termios newtio;
newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0; /* 非カノニカル */
・Armadillo-9では、主なプロセスとして
Mysql
Apache2
PHP
を起動しています。
以上、
よろしくお願いします。
armadillo メーリングリストの案内