GDBスタブ(stub)で、リモートデバッグするねん...

 

1.準備

1.1 スタブをビルドするのに必要なもの

 

gdbstubs-20030326-1117CDT.tar.bz2

を探してきて、展開します。

 

ビルドするのに必要なもの(on windows)

GNUSHV0401(KPIT)

又は、HEW3+GNUSHV0401 toolchain for HEW3(KPIT)

私は、HEW3上で、ビルドしました。

GNUSHV0401をコマンドラインで使う時は、Williamさんの指示通り

sh-elf-gcc -Wall -m2 -g -DSH2_7045EDK -DCRT0 -o sh2-stub -Wl,--script=sh2-704x.x -Wl,-Map,gdb.map -nostartfiles sh2-704x.c gdb.c sh2.c

で、ビルドする事。

 

1.2 スタブを改変する。

 

自分のシステムの、シリアルの設定をする。

わたしのは、sh2のsh7047用です。

 

SH704x.c のソースファイルのシリアル設定部分だけ変えます。

 

//ここのアドレスを、自分のシステムに合うように変える

#define SCI_SMR0 ((volatile char *)0xffff81d0L)

#define SCI_BRR0 ((volatile char *)0xffff81d1L)

#define SCI_SCR0 ((volatile char *)0xffff81d2L)

#define SCI_TDR0 ((volatile char *)0xffff81d3L)

#define SCI_SSR0 ((volatile char *)0xffff81d4L)

#define SCI_RDR0 ((volatile char *)0xffff81d5L)

#define MST_CR1 ((volatile short *)0xFFFF861CL)

#define PFC_PACRL3 ((volatile short *) 0xffff838aL)

#define PFC_PACRL1 ((volatile short *) 0xffff838cL)

#define PFC_PACRL2 ((volatile short *) 0xffff838eL)

#define PFC_PAIOR ((volatile short *) 0xffff8386L)

#define IO_PADR ((volatile short *) 0xffff8382L)

//変更点は、ここまで。PAIOR、IO_PADRは、LEDを付けた為なので、不要かも。

//ボーレートも、自分のシステムに合わせる

#define BAUD_115200 7

#define BAUD_57600 12

void gdb_startup (void)

{

volatile int i;

/* enable txd/rxd lines */

/*ルネサスの SH7047F ハードウェアマニュアルに従う*/

*MST_CR1 &=0xFFF7; /*MST.SCI_3=3bit目をクリア*/

*SCR=0;

*SMR=0;

*BRR=12; /*baud=57600 bp/s */

for(i=0;i<5000;i++);

*SCR &=0x37;

*PFC_PACRL3 |=0x0300;   //ORが¥に文字化けしていた..以下同じ

*PFC_PACRL1 | =0x0005; /*bit2,0を強制的に1にする*/

*PFC_PACRL1 &=0xfff5; /*bit3,1を強制的に0にする*/

for(i=0;i<5000;i++);

*SCR \=0x30;

/* for LED_0,1*/

*PFC_PAIOR | =0x0003; /*PAの0,1ビットにLED接続する =1(出力)*/

*IO_PADR |=0xfff3; /*LED all on*/

return;

}

以下は、参考まで

 

" mov #13, r13\n"

" mov #14, r14\n"

" mov.l gdbstartup_k, r0\n"

" jsr @r0\n"

" nop\n"

" trapa #33\n" //WIlliamさんの指示により、#32 →#33に変更。

" nop\n" //sh2.cより引用

/*

TRAPA #32 (breakpoint) isr.

Sends a SIGTRAP to gdb_handle_exception().

Because we always subtract 2 from the pc

stacked during exception processing, this

function won't permit compiled-in breakpoints.

If you compile a TRAPA #32 into the code, we'll

loop on it indefinitely. Use TRAPA #33 instead.*/

//#if 0 ← これは、GCCの -DSH2_7045EDK の部分と思われる。

// 私は、常に入れるようにした。

" mov.l gdbmonitor_k, r0\n"

" mov #5, r4\n"

" jsr @r0\n"

" nop\n"

" bra _start\n"

" nop\n"

//#endif #if 0との対。

以上で、変更は、お終いです。

後は、一気にビルドします。

HEW3上でも、ビルドできます。

こんな構成にしておきます。

MATH

 

メニュから

option---compiler Linker optionを設定します。

Linker optionで、704x.xファイルを、マップのスクリプトとして、選択できるのです、超便利!

MATH

MATH

その他の設定は、そのままにしています。

 

こんなbatファイルを作っておくのも、便利ですね。(HEW3でビルドしない時)

一発でmotファイルが出来るし、ディスアセンブルのファイルもできるし

MATH

それに、HEW3上で、作業すると、

ファイルが変更されたら、「新しいファイルに書き換えるか?」と、聞いてくれるのです、これも超便利!

 

それに、HEW3 by KPIT には、FDT(Flash Development Toolkit)のAPIも入っているので

FDTそのものを探して来ると、

HEW3上でシリアルを通じて、プログラムをダウンロードできます。

他のものでも、勿論、構いません。

MATH

2.愈々GDBで、デバッグ!

 

GDBSHV0401(KPIT)をダウンロードしておきます。

 

romに焼いたstubを作動させて、GDB始動。

デバッグするfileを、openしておきます。


dsp40__11.gif

そして、runさせると、多分、トラブルが起きると思います。


dsp40__12.gif

stopが赤く付いて、進みません。

stopを押して、停止します。

 

GDBのconsoleウィンドを出し、コマンドを入れます。


dsp40__13.gif

もし、こうならないなら、

set remotebaud ?????

と、してから

(SH側のリセットも必要かも。)

 

loadコマンドを入れます。

 


dsp40__14.gif

どうです!、loadされましたでしょう.

次に、continueコマンドをいれます。


dsp40__15.gif

メインウィンドは、こうなっています。


dsp40__16.gif

後は、GDBのInsightで、操作できます。

ブレークポイントを設定するなり、watchウィンドを表示したり、レジスタを表示させたりして下さい。

ブレークポイントを設定したら、continueコマンドで進めます。

runは、駄目なようですよ。

MATH

2.2これで完成だ!

 

   GDBの接続設定の時、プログラムをロードすることを忘れていました。

   (defaultでは、そうなっているのですが、私は、どこが悪いか調べるために

   チェックを、外していました...)

 

Download Programのところに、チェックを入れます。

 

デバッグするファイルをロードして、runすると、今度は、うまくいきます。

 

これで、全て、Insightで、最初から操作できるようになりました、バンザーイ!

 

 

William A. Gatliffさんの、多大なご努力に感謝すると共に

KPIT Communityにも、御礼申し上げます。

尚、HEW3は、I/Oシミュレートもできますので、stubそのものをdebugする事も

可能です。

MATH

H.16.2.28

This document created by Scientific Notebook 4.1. この文書は次の製品で作成しました Scientific Notebook 4.1.