(toppers-users 328) デバッグ出力の件

K.S shinosan @ kitanet.ne.jp
2001年 11月 19日 (月) 21:54:13 JST


東京の篠崎といいます。

私もしばらく前からROMさせていただいておりました。
いろいろ勉強になり助かっております。

私も個人的に旭川の大柏さんにはメールしたこともありますので
その時私が意図した解決策に関してちょっと書かせていただきます。
ヒントのつもりで混乱させてしまったのかもしれませんので。
toppersは私も勉強中ですので、一般的な方法です。

デバッグ出力に関しては、私はこれまでtron系のOS上では、
シリアルを使用する場合には非常に単純な2種類の方法を
使っておりました。

その1)
まず、1キャラクタを割り込みなし、送信完了をポーリングする方法で送る関数を作
り
次に、固定長の文字列を送る関数を作ります。
更に、可変長の文字列を送る関数を作り、セマフォで排他制御します。
void OutTextSio(char* format, ...)
{
	va_list argptr;
	char msg[512];/*任意*/
	wai_sem(ID_SEM_D);
	va_start(argptr, format);
	vsprintf(msg, format, argptr);
	va_end(argptr);
	Dbg_Send_Str( msg ); /*文字列出力*/
	Dbg_Send_Char( (char)0x0d );
	sig_sem(ID_SEM_D);
}
こんな感じです。ROMレス品などの場合でしたのでスタックを食っても気にしていま
せんでした。
より汎用的には、スタックを食わない形で

char OutMsgBuf[512];
void OutTextSio(char* format, ...)
{
	va_list argptr;
	wai_sem(ID_SEM_D);
	va_start(argptr, format);
	vsprintf(OutMsgBuf, format, argptr);
	va_end(argptr);
	Dbg_Send_Str( OutMsgBuf ); /*文字列出力*/
	Dbg_Send_Char( (char)0x0d );
	sig_sem(ID_SEM_D);
}
などもありかなと考えます。

とはいえ、toppersで準備されている手段の方がリアルタイム制御の面で、
より深く考慮されていると教えていただいたため、今後はそれを試させていただこう
とは
思っております。

その2)送信完了割り込みを使用する方法
ちょっと面倒なのでリストはつけないのですが、基本的には
優先度によってつなぎ換えが行われるリストを割り込みハンドラが
みて、データがあれば送信する方法です。デバッグ出力側は
要求しか行いません。

以上ですが、誤りなどあればご指摘いただければ幸いです。