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

山田健二 kenji.yamada00 @ gmail.com
2009年 3月 9日 (月) 11:21:40 JST


阿部先生

お世話になっております。山田です。
アドバイスありがとうございます。

> 返信が遅れました。また、TINET で、
> 問題が出ているようで申し訳ありません。

とんでもありません。
ありがたく使用させていただいております(感謝!)


> 私が把握している範囲では、H8/3069F のシリアル関係の
> 割り込み応答があまり早くなく、取りこぼしが発生するようです。

情報ありがとうございます。
そういった事情があったのですね。
それを踏まえて、酒匂さんがおっしゃるような処理を
組み込んでいきます。


> 完全な解決はできませんが、通信速度を落とすか、
> tinet/net/ppp_lcp.h のDEF_PPP_MTU の値を小さくしてみてください。
> 多少緩和されると思います。

先のメールでもご報告させていただきましたが、
シリアルの通信速度を19200bpsから9600bpsに落としたところ、
順調に動作する時間が伸びました。
これ以上は落とせませんので、プログラムでのエラー処理で
対応していきたいと思います。

DEF_PPP_MTU の値を小さくしての確認は、
明日にでもご報告させていただきます。

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

山田


2009/03/09 10:48 阿部 司 <abe @ jo.tomakomai-ct.ac.jp>:
> 山田さん
> CC: 酒匂さん
>
> 苫小牧高専の阿部です。
>
> 返信が遅れました。また、TINET で、
> 問題が出ているようで申し訳ありません。
>
> 私が把握している範囲では、H8/3069F のシリアル関係の
> 割り込み応答があまり早くなく、取りこぼしが発生するようです。
> 完全な解決はできませんが、通信速度を落とすか、
> tinet/net/ppp_lcp.h のDEF_PPP_MTU の値を小さくしてみてください。
> 多少緩和されると思います。
>
> いずれにしても、現在 PPP 周りの検証を行うことが困難なため、
> TINET リリース 1.5 から、一時的に PPP を外す予定です。
>
> よろしくお願いいたします。
>
>> 酒匂さん
>>
>> はじめまして。山田です。
>> アドバイスありがとうございました。助かります。
>> お蔭様で視点が変わりました。
>>
>> 現在不具合対象となっているコードですが、
>> まさに酒匂さんがご指摘されている「まずい」作り
>> になっていますので(ビンゴ!)、
>> 「 データ化け、データ抜けなどは発生する!」という
>> 前提に立ち返って、処理を組みなおしてみます。
>>
>> また、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 の組み込み方に
>>>> 問題があるのでしょうか?
>>>>
>>>> 申し訳ありませんが、皆様、ご教授の程よろしくお願いします。
>>>>
>>>>
>>>> 山田
>>>
>>>
>>
>>
>>
>
>
> --
> .\" 苫小牧工業高等専門学校 情報工学科 教授 阿部 司
> .\" 〒059-1275 北海道苫小牧市字錦岡443番地
> .\" E-mail: abe @ jo.tomakomai-ct.ac.jp  TEL/FAX: 0144-67-8937
>
>