[Armadillo:02086] Re: シリアル受信でデータ取りこぼし

Yasushi SHOJI email@hidden
2007年 9月 26日 (水) 11:02:47 JST


At Sat, 22 Sep 2007 23:31:46 +0900,
Hiroki Nakamura wrote:
> 
> 現在、シリアル送受信でデータを取りこぼす現象が出ております。
> 考えられる原因等あれば、教えて下さい。
> (プログラムの話になってしまいますが、環境がArmadilloの場合だけ、
>  出ておりますので、参考までに質問させて頂きます。)

a9の com2はフロー制御できませんが、だいじょうぶですか?

[...]
> ・受信処理ではread関数で行い、戻り値をみて、データレングス分、
>  受信する処理とする。
[...]
> ・データ数が120byte以下の場合は、現象が出ない。
>  (データが少ない時は正常に送受信する。)

大量のデータを受け取るときだけでているので、overflowしているような気が
します。データを受ける方が

while() {
    length = read_data_length();
    ok = read_nr_bytes(fd, buf, length);
    if (ok)
        do_something();
    else
        do_error();
}

としていると思うのですが、大量のデータの場合 do_something()に時間がか
かり、次のフレームを読み込めず fifoがあふれたりしませんか?
プログラムを「ただ読み捨てる」ように変更すると受信データ量が
送信側と同じになりませんか?
-- 
            yashi



armadillo メーリングリストの案内