なんとかなるさね

マイコンをネタにブログを始めてみました


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

関連記事

2013/03/07   blog-entry-252   category: H8SX /* 32bit CISC */

go page top