(toppers-users 2890) Re: AKIH8-3069FでTCP/IPとシリアルを使ったタスクの不具合#2

山田健二 kenji.yamada00 @ gmail.com
2009年 3月 9日 (月) 09:47:53 JST


酒匂さん

はじめまして。山田です。
アドバイスありがとうございました。助かります。
お蔭様で視点が変わりました。

現在不具合対象となっているコードですが、
まさに酒匂さんがご指摘されている「まずい」作り
になっていますので(ビンゴ!)、
「 データ化け、データ抜けなどは発生する!」という
前提に立ち返って、処理を組みなおしてみます。

また、tinetの割り込み中の処理とシリアル受信処理の
関係についても試験してみたいと思っています。

今後ともよろしくお願いします。

山田




2009/03/06 17:38 nob_sakawa <nob @ sakawa.ota.tokyo.jp>:
> 酒匂です。
> 事情がよくわかっていませんが、
> 思うに、
> tinet関連を組み込まなければ動くということであれば、
> tinet関連の優先度を下げれば、改善されそうですね?
> 一般的に伝送関連のソフトはイサーでもシリアルでも
> データ化け、データ抜けなどは発生する!
> という前提で作らないとまずいとおもいます。
> 固定長だから、決められたデーター数を受信できるまでづっと待ってるとか、
> 決められたストップコードを受信できるまで待っているとか、
> そんな作りかたをすると、受信処理で黙り!
> みたいなことは容易に発生すると思います。
> ですが、
> 今回の場合はtinetの割り込みハンドラー等のプログラムが
> シリアル受信処理より高い優先度で予想以上に長い時間走ってしまい、
> シリアルの受信割り込みに対応したハンドラー等が動けない時がある。
> というのが現実のように思えます、
> tinetなどの中身を見たことがあるわけではないので全くの憶測です。
>
> On 2009/03/06, at 11:02, 山田健二 wrote:
>
>> お世話になっております。
>> 昨年10月に下記シリアル通信の不具合の件でご相談させて
>> 頂きました山田と申します。
>>
>>  (toppers-users 2816) AKIH8-3069FでTCP/IPとシリアルを使ったタスクの不具合
>>  http://www.toppers.jp/TOPPERS-USERS/200810/msg00005.html
>>
>> 半年近く経ってしまっており恐縮ですが、その後不具合箇所の
>> 特定ができましたのでご報告いたします。
>> (以前のメールを削除しており、別スレッドになるかと思いますが
>>  ご勘弁ください)
>>
>> ■開発環境
>>  AKIH8-3069F + jsp-1.4.2 + tinet-1.4
>>  PizzaFactory2評価キットTOPPERS教材対応版
>>
>> ■実行環境
>>
>>  WEBサーバ ------------ AKIH8-3069F ------------ 装置A
>>             Ethernet                  RS232C
>>                                19200bps、フロー制御なし
>>
>>
>> (問題点)
>> AKIH8-3069Fと「装置A」間において、シリアル通信処理のタスクが
>> 止まるような現象が発生する。
>>
>> (不具合箇所)
>> シリアルデータ受信時に serial_rea_dat() 内の
>> _syscall(wai_sem(spcb->spinib->rcv_semid)) で止まって
>> いることが分かりました。
>>
>> ※当初は 19200bps で通信しており、9600bps に下げた
>>  ところ不具合現象はかなり発生しなくなりました。
>>
>> 装置A から送信されるデータは、確認した範囲では
>> 欠落は無いようなので、AKIH8-3069F 側でのデータ受信時に
>> 取りこぼしが起こっているのでは?と推察しているところですが、
>> 問題が発生するシリアル通信処理タスクは、tinet を組み込まないと
>> 止まることなく動作しますので、やはり tinet の組み込み方に
>> 問題があるのでしょうか?
>>
>> 申し訳ありませんが、皆様、ご教授の程よろしくお願いします。
>>
>>
>> 山田
>
>
>