(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
とすると、正常に動作はするものの、まったくブレークポイントを
無視して走りつづけてしまいます。

何か、勘違いをしているのでしょうか?もし、上記のような環境を
正常に動作させておられる方がいらっしゃいましたら、お知恵を貸して
いただけませんか?以上よろしく御願いします。