(toppers-users 985) シリアルポート管理ブロック初期化はいつ ?

IKEUCHI Mitsuo (=?iso-2022-jp?B?GyRCQ1NGYjh3TTobKEI=?=) ikeuchi.mitsuo @ jp.panasonic.com
2003年 7月 15日 (火) 16:49:27 JST


池内です。

一ヶ月ほど前に「 (toppers-users 895) kz_sh4 でサンプル
プログラムが動きません」という投稿をしたものです。ほんの
少し進捗があり、また分からないところがでてきたので、また
質問させてください。

先の質問では、シリアル出力がうまくいってなかったのですが、
これは、シリアルポート管理ブロックの初期化フラグ
 ( SPCB.init_flag ) が -1 になっているのが原因のようです。

シリアル初期化関数 serial_initialize() → serial_open() で

	if (spcb->init_flag) {		/* 初期化済かのチェック */
		return(E_OK);
	}

という部分がありますが、値が -1 だと、ここで「初期化済み」
と判断されてしまいます。そのため、後々の処理がおかしく
なっているようです。

ところが、 SPCB 変数の初期化は

static SPCB spcb_table[NUM_PORT] = {
	{ 0, HWPORT1, SEM_SERIAL1_IN, SEM_SERIAL1_OUT },
#if NUM_PORT > 1
	{ 0, HWPORT2, SEM_SERIAL2_IN, SEM_SERIAL2_OUT },
#endif
};

というように行なわれており、最初は init_flag = 0 になって
いるはずなのです。どこかで -1 に変わっているのか、そもそも
初期化が行なわれていないのかよく分かりません。

どなたか、お分かりの方がいらっしゃれば、ご教授願えないで
しょうか。

*********************************************************
池内光雄 パナソニックファクトリーソリューションズ株式会社        
*********************************************************