H8マイコン基板(H8SX/1655) | GDBSTUBにDebug Console出力機能を追加する
3つ前のエントリと1つ前のエントリで、CubeSuite+のRX Simulatorのデバッグコンソール入出力やファイル
入出力を試してみましたが、GDB Remote Serial Protocolにも同様の機能を実現するプロトコルが定義されて
います。今回、「今すぐ使える!H8マイコン基板 増補版」のGDBSTUBのソースにデバッグコンソール出力を
行うgdb_debug_puts()関数を追加し、これを使って、以下のようにデバッグメッセージを出力するようにして
みたところ、Pleiades Junoのコンソールウィンドウにデバッグメッセージを表示することが出来ました。
PROG_01_LEDプロジェクトのgpio.cにデバッグメッセージ出力文を追加(赤色の部分)
void gdb_debug_puts(char *str);
void LED(UI32 control)
{
switch(control)
{
case LED_OFF :
{
PM.DR.BIT.B3 = 1;
gdb_debug_puts("LED_OFF\n");
break;
}
case LED_ON :
{
PM.DR.BIT.B3 = 0;
gdb_debug_puts("LED_ON\n");
break;
}
case LED_TOGGLE :
{
PM.DR.BIT.B3 = ~PM.DR.BIT.B3;
if(PM.DR.BIT.B3 == 1){
gdb_debug_puts("LED_OFF\n");
}
else{
gdb_debug_puts("LED_ON\n");
}
break;
}
default : // LED_OFF
{
PM.DR.BIT.B3 = 1;
break;
}
}
}

デバッグコンソール出力のGDB Remote Serial Protocolのパケット(GDBSTUB→GDB)は、以下の通りです。
今回、このパケットを送信する関数としてGDBSTUBのソースにgdb_debug_puts()関数を追加しました。
'$' + 'O' + <str[可変桁(16進化文字列)]> + '#' + <checksum>
PROG_01_LEDプロジェクトのstub.cにgdb_debug_puts()関数を追加(赤色の部分)
void gdb_mode (void)
{
ingdbmode = GDBCOOKIE;
breakpoint();
}
//---------------------------------------------
// send debug message.
//---------------------------------------------
static UI08 debugOutBuffer[BUFMAX];
void gdb_debug_puts(char *str)
{
UI08 *buf = debugOutBuffer;
*buf++ = 'O';
while(*str != 0){
*buf++ = highhex(*str);
*buf++ = lowhex(*str);
str++;
}
*buf = 0;
putpacket(debugOutBuffer);
}
追記 : メモ
[増刊] 今すぐ使えるH8マイコン基板の部屋
http://toragi.cqpub.co.jp/tabid/284/Default.aspx
入出力を試してみましたが、GDB Remote Serial Protocolにも同様の機能を実現するプロトコルが定義されて
います。今回、「今すぐ使える!H8マイコン基板 増補版」のGDBSTUBのソースにデバッグコンソール出力を
行うgdb_debug_puts()関数を追加し、これを使って、以下のようにデバッグメッセージを出力するようにして
みたところ、Pleiades Junoのコンソールウィンドウにデバッグメッセージを表示することが出来ました。
PROG_01_LEDプロジェクトのgpio.cにデバッグメッセージ出力文を追加(赤色の部分)
void gdb_debug_puts(char *str);
void LED(UI32 control)
{
switch(control)
{
case LED_OFF :
{
PM.DR.BIT.B3 = 1;
gdb_debug_puts("LED_OFF\n");
break;
}
case LED_ON :
{
PM.DR.BIT.B3 = 0;
gdb_debug_puts("LED_ON\n");
break;
}
case LED_TOGGLE :
{
PM.DR.BIT.B3 = ~PM.DR.BIT.B3;
if(PM.DR.BIT.B3 == 1){
gdb_debug_puts("LED_OFF\n");
}
else{
gdb_debug_puts("LED_ON\n");
}
break;
}
default : // LED_OFF
{
PM.DR.BIT.B3 = 1;
break;
}
}
}

デバッグコンソール出力のGDB Remote Serial Protocolのパケット(GDBSTUB→GDB)は、以下の通りです。
今回、このパケットを送信する関数としてGDBSTUBのソースにgdb_debug_puts()関数を追加しました。
'$' + 'O' + <str[可変桁(16進化文字列)]> + '#' + <checksum>
PROG_01_LEDプロジェクトのstub.cにgdb_debug_puts()関数を追加(赤色の部分)
void gdb_mode (void)
{
ingdbmode = GDBCOOKIE;
breakpoint();
}
//---------------------------------------------
// send debug message.
//---------------------------------------------
static UI08 debugOutBuffer[BUFMAX];
void gdb_debug_puts(char *str)
{
UI08 *buf = debugOutBuffer;
*buf++ = 'O';
while(*str != 0){
*buf++ = highhex(*str);
*buf++ = lowhex(*str);
str++;
}
*buf = 0;
putpacket(debugOutBuffer);
}
追記 : メモ
[増刊] 今すぐ使えるH8マイコン基板の部屋
http://toragi.cqpub.co.jp/tabid/284/Default.aspx
- 関連記事
-
- H8マイコン基板(H8SX/1655) | GDBSTUBにDebug Console出力機能を追加する
- H8マイコン基板(H8SX/1655) | Pleiades Juno上でビルドとデバッグを行う (KPIT GNU H8 v12.02編)
- H8マイコン基板(H8SX/1655) | Pleiades Juno上でビルドとデバッグを行う (KPIT GNU H8 v09.03編)
- H8マイコン基板(H8SX/1655) | V850基板(V850ES/JG2)を触った後でモヤモヤしていること
- H8マイコン基板(H8SX/1655) | Helios/IndigoからKPIT GNU H8ツールチェインを使う
- H8マイコン基板(H8SX/1655) | 環境変数変更時の落とし穴
- H8マイコン基板(H8SX/1655) | KPIT GNUツールチェインにCygwinは不要 (3)
- H8マイコン基板(H8SX/1655) | KPIT GNUツールチェインにCygwinは不要 (2)
- H8マイコン基板(H8SX/1655) | KPIT GNUツールチェインにCygwinは不要 (1)
- H8マイコン基板(H8SX/1655) | KPIT Eclipseのインストーラが引き起こしたトラブルへの対処 (2)
- H8マイコン基板(H8SX/1655) | KPIT Eclipseのインストーラが引き起こしたトラブルへの対処 (1)
- H8マイコン基板(H8SX/1655) | KPIT Eclipseのインストールエラーの対策
- H8マイコン基板(H8SX/1655) | Zylin Embedded CDT 4.9.1を入手してローカルからインストール
- H8マイコン基板(H8SX/1655) | Cygwinのインストールでのハングアップ回避
- H8マイコン基板(H8SX/1655) | Renesas USB1653 USB Boot Mode Deviceのインストール防止 (2)
2013/03/07 blog-entry-252 category: H8SX /* 32bit CISC */
| h o m e |