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

山田健二 kenji.yamada00 @ gmail.com
2008年 10月 17日 (金) 22:52:22 JST


阿部先生

拝復
福岡の山田です。
お忙しいところ、リプライありがとうございます。
こちらこそ今後ともよろしくお願いします。
私の、TOPPERS+TINETの理解が不十分でご迷惑をおかけすみません。
調べあぐねて困っておりました。

早速ですが、以下に現状をお知らせさせていただきます。
必要の無い部分、意味不明な点が多々あるかとは思いますが、
どうぞご指導のほどよろしくお願いします。


> (1) TINET のコンパイル時のコンィギュレーションパラメータの設定は、
>     どうなっているでしょうか?

「TCP_CLIENT」の設定を流用させていただいておりまして、次の通りです。

---------------------------------------------------------------------------
■tinet_kern.cfg
---------------------------------------------------------------------------
  CRE_SEM(SEM_TCP_CEP_LOCK1,{ TA_TPRI, 1, 1 });
  CRE_FLG(FLG_TCP_CEP_EST1,{ TA_TFIFO|TA_WSGL, CEP_EVT_CLOSED });
  CRE_FLG(FLG_TCP_CEP_SND1,{ TA_TFIFO|TA_WSGL, CEP_EVT_SWBUF_READY });
  CRE_FLG(FLG_TCP_CEP_RCV1,{ TA_TFIFO|TA_WSGL, 0 });


---------------------------------------------------------------------------
■tcp_client.h
---------------------------------------------------------------------------
#ifndef _TCP_CLIENT_H_
#define _TCP_CLIENT_H_

#include <t_services.h>

/* クライアントプログラム */
#define TCP_CLIENT_STACK_SIZE		(1024*50) /* タスクのスタックサイズ	*/

/* 各タスクの優先度の定義 */
#define MAIN_PRIORITY	5		/* メインタスクの優先度 */
                                /* HIGH_PRIORITY より高くすること */
#define HIGH_PRIORITY	9		/* 並列に実行されるタスクの優先度 */
#define MID_PRIORITY	10
#define LOW_PRIORITY	11
#define TCP_CLIENT_MAIN_PRIORITY	5		 /* タスクの優先度			*/

#ifndef TASK_PORTID
#define	TASK_PORTID	1		/* 文字入力するシリアルポートID */
#endif

/* TCP 送受信バッファサイズ */
#define TCP_CLIENT_CEP_SBUF_SIZE	(1024*10)
#define TCP_CLIENT_CEP_RBUF_SIZE	(1024*10)

#define DEST_ADDR 0xC0A80102 /* 192.168.1.2 HOME */
#define DEST_PORT 0x50       /* 80 */
#endif

#ifndef _MACRO_ONLY

/* TCP 送受信バッファ */
extern UB tcp_client_cep_sbuf[];
extern UB tcp_client_cep_rbuf[];

(以下省略)




---------------------------------------------------------------------------
■tinet_cfg.c
---------------------------------------------------------------------------
#include "tcp_client.h"

#define TNUM_TCP_CREPID	1

const ID tmax_tcp_crepid = (TMIN_TCP_CREPID + TNUM_TCP_CREPID - 1);

T_TCP_CREP tcp_crep[TNUM_TCP_CREPID] = {
	{
		0,
		{ IPV4_ADDRANY, 80 },
		},
	};

#define TNUM_TCP_CCEPID	1

const ID tmax_tcp_ccepid = (TMIN_TCP_CCEPID + TNUM_TCP_CCEPID - 1);

T_TCP_CCEP tcp_ccep[TNUM_TCP_CCEPID] = {
	{
		0,
		(VP)tcp_client_cep_sbuf,
		( 1024 * 10 ),
		(VP)tcp_client_cep_rbuf,
		( 1024 * 10 ),
		(FP)NULL,
		SEM_TCP_CEP_LOCK1,
		FLG_TCP_CEP_EST1,
		FLG_TCP_CEP_SND1,
		FLG_TCP_CEP_RCV1,
		},
	};


> (2) タスク A と タスク B の同期はどのように行っているのでしょうか?

並列にはタスクを動かしていないつもりです。
希望としては同時に動かしたいのですが、
とりあえず、タスク A を実行し、次に タスク B を実行させています。
タスク A は「TCP_CLIENT」を流用させていただいています。
タスクの関係は次の通りです。


char buf[4096];

void task_main( VP_INT exinf )
{
    act_tsk( タスク A );
    act_tsk( タスク B );
}

タスク A ()
{
    1. 端点への接続    tcp_con_cep()
    2. WEBサーバからhtmlファイルを読み込み    tcp_snd_dat()
       buf へ格納する。
      (格納するテストデータは約400Byte)
    3. ext_tsk();
}

タスク B ()
{
    1. buf からデータを取り出す。

  while( 1 )
    {
        2. 装置 A へのデータ送信
        3. 装置 A からの応答受信
    }
}


> (3) WEBサーバ(HTTP サーバ)が、TIME WAIT 状態になっていませんか?

申し訳ありません、TIME WAIT 状態 かどうか調べ方がわかりません。
どのようにすれば調べることができますでしょうか?
尚、WEBサーバは Windows PC(Apache)を使用しております。


他に確認する点がありましたら、教えてください。
お忙しいこととは存じますが、是非ご協力の程よろしくお願いします。
失礼します。

山田健二