(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)を使用しております。
他に確認する点がありましたら、教えてください。
お忙しいこととは存じますが、是非ご協力の程よろしくお願いします。
失礼します。
山田健二