(toppers-users 2258) Aki3069FでGDBを利用する方法は?
M.Sugiyama
sugiyama @ ap.chugoku-pc.ac.jp
2006年 1月 16日 (月) 17:43:05 JST
本日より参加させていただきました。杉山 と申します。
早速ですが、表記のように
Aki3069F(mituiwaボード)を使ったデバッグ環境の整備をしております。
環境は
H/W Aki3069F
jsp 1.4.1
binutils-2.13.2
gcc-3.2.3
newlib-1.13.0
insight-6.1
を使って Release(ROM上)およびH8monでは、正常に動作を確認しております。
さらにGDBが利用できるように
リンカスクリプトはこのMLの過去の記事よりオリジナルのdebug.ldを
MEMORY {
/* for mode 5: 0x000000 -> 0xffffff */
vectors : o = 0x4fff00, l = 0x000100 /* for debug */
/* use 1M for .text and .rodata */
ex_ram : o = 0x400000, l = 0x050000
/* use 1M for .data and .bss */
ex_ram5 : o = 0x450000, l = 0x0Aff00
/* use 16k for .stack */
in_ram : o = 0x500000, l = 0x010000
}
ように変更して Makefile該当個所を REDBOOTにして実行ファイルを作成
し、sourceforgeより取得したredboot-aki3069net.motをフラッシュに
書き込みをしております。
#define P4DDR (*(volatile unsigned char *)0xfee003)
#define P4PCR (*(volatile unsigned char *)0xfee03e)
#define P4DR (*(volatile unsigned char *)0xffffd3)
void cyclic_handler(VP_INT exinf){
syslog(LOG_NOTICE, "led %d",P4DR);
if(P4DR ==128 ) P4DR=0;
else
P4DR=128;
}
void main_task(VP_INT exinf)
{
B c;
INT i;
P4DDR=0xff;
syscall(serial_ctl_por(TASK_PORTID,
(IOCTL_CRLF|IOCTL_FCSND|IOCTL_FCRCV)));
syslog(LOG_NOTICE, "start");
sta_cyc(CYCHDR1);
while(1){}
kernel_exit();
}
テスト用のソースは こんな感じです。
1.
redbootモニタ上で、
load -b 0x400000
go
を使うと正常に動作します。
2.
シリアル接続したPCから
h8300-hms-gdb jsp
<gdb>set remotebaud 38400
<gdb>target remote /dev/ttyUSB0
<gdb>c
で正常に動作しております。sys_config.hなどを書き直して
シリアル1からモニタ出力も得られることを確認しました。
3.
LEDを点滅させるだけの簡単なプログラム(非OS以下)を記述して、
同様にデバッガを起動し、breakポイントを設定すると、
一次停止をしてトレースなどが出来ます。
#define P4DDR (*(volatile unsigned char *)0xfee003)
#define P4DR (*(volatile unsigned char *)0xffffd3)
int main(void){
int i;
P4DDR = 0xc0;
while(1){
P4DR = 0x80;
i=1000000;
while(i>0)i--;
P4DR = 0x40;
i=1000000;
while(i>0)i--;
}
}
さて ここからが問題です。
4.
同様にして、先ほどのjspのソースをgdb経由で転送後breakpointを
設定し
<gdb>c
とすると、正常に動作はするものの、まったくブレークポイントを
無視して走りつづけてしまいます。
何か、勘違いをしているのでしょうか?もし、上記のような環境を
正常に動作させておられる方がいらっしゃいましたら、お知恵を貸して
いただけませんか?以上よろしく御願いします。