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
で、ビルドする事。
自分のシステムの、シリアルの設定をする。
わたしのは、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上でも、ビルドできます。
こんな構成にしておきます。
メニュから
option---compiler Linker optionを設定します。
Linker optionで、704x.xファイルを、マップのスクリプトとして、選択できるのです、超便利!
その他の設定は、そのままにしています。
こんなbatファイルを作っておくのも、便利ですね。(HEW3でビルドしない時)
一発でmotファイルが出来るし、ディスアセンブルのファイルもできるし
それに、HEW3上で、作業すると、
ファイルが変更されたら、「新しいファイルに書き換えるか?」と、聞いてくれるのです、これも超便利!
それに、HEW3 by KPIT には、FDT(Flash Development Toolkit)のAPIも入っているので
FDTそのものを探して来ると、
HEW3上でシリアルを通じて、プログラムをダウンロードできます。
他のものでも、勿論、構いません。
GDBSHV0401(KPIT)をダウンロードしておきます。
romに焼いたstubを作動させて、GDB始動。
デバッグするfileを、openしておきます。
そして、runさせると、多分、トラブルが起きると思います。
stopが赤く付いて、進みません。
stopを押して、停止します。
GDBのconsoleウィンドを出し、コマンドを入れます。
もし、こうならないなら、
set remotebaud ?????
と、してから
(SH側のリセットも必要かも。)
loadコマンドを入れます。
どうです!、loadされましたでしょう.
次に、continueコマンドをいれます。
メインウィンドは、こうなっています。
後は、GDBのInsightで、操作できます。
ブレークポイントを設定するなり、watchウィンドを表示したり、レジスタを表示させたりして下さい。
ブレークポイントを設定したら、continueコマンドで進めます。
runは、駄目なようですよ。
2.2これで完成だ!
GDBの接続設定の時、プログラムをロードすることを忘れていました。
(defaultでは、そうなっているのですが、私は、どこが悪いか調べるために
チェックを、外していました...)
Download Programのところに、チェックを入れます。
デバッグするファイルをロードして、runすると、今度は、うまくいきます。
これで、全て、Insightで、最初から操作できるようになりました、バンザーイ!
William A. Gatliffさんの、多大なご努力に感謝すると共に
KPIT Communityにも、御礼申し上げます。
尚、HEW3は、I/Oシミュレートもできますので、stubそのものをdebugする事も
可能です。
H.16.2.28
This document created by Scientific Notebook 4.1. この文書は次の製品で作成しました Scientific Notebook 4.1.