(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 に変わっているのか、そもそも
初期化が行なわれていないのかよく分かりません。
どなたか、お分かりの方がいらっしゃれば、ご教授願えないで
しょうか。
*********************************************************
池内光雄 パナソニックファクトリーソリューションズ株式会社
*********************************************************