MONIXとは? ライセンス ダウンロード ビルド コマンド 使用例 (HOS) 使用例 (TOPPERS/JSP) 参考
および$ h8300-elf-gcc -v Reading specs from c:/Program Files/Renesas/HEW30/Tools/KPIT Cummins/GNUH8-ELF/v0403/h8300-elf/bin/../lib/gcc/h8300-elf/3.4-GNUH8_v0403/specs Configured with: /home/kpit/fsfsrc/gcc-3.4-20040813/configure --build=i686-pc-linux-gnu --host=i386-pc-mingw32msvc --enable-languages=c,c++ --target=h8300-elf --with-newlib --prefix=/usr/share/mingwgnuh8300_v0403_elf-1 Thread model: single gcc version 3.4-GNUH8_v0403
$ h8300-elf-gcc -v Using built-in specs. Target: h8300-elf Configured with: /home/kpit/fsfsrc/gcc-4.2-20060812/configure --build=i686-pc-linux-gnu --host=i386-pc-mingw32msvc --enable-languages=c,c++ --target=h8300-elf --with-newlib --prefix=/usr/share/mingwgnuh8300_v0603_elf-1 Thread model: single gcc version 4.2-GNUH8_v0603
$ tar jxvf monix-YYYYMMDD.tbz2なお、YYYYMMDDは、ダウンロードしたファイルのものに読み換えてください。
$ cd monix $ makeこれにより、Motorola S-recordのファイル monix.mot ができます。
このファイルを適当な書き込みツールによりH8内蔵フラッシュメモリに書き込みます。
このアドレスは、リンカスクリプト (monix-aki_h8lan.x) で以下のように指定しています。
uservec : o = 0x400000, l = 0x100
ユーザベクタのアドレスを変えたい場合は、これを変更してください。
以下、主要なコマンドの説明です。
MONIX Ver.0.1 (Jan 18 2007, 23:41:08) BootMode: 0x00 1:
1:tftp 192.168.0.2 sample.bin EtherInit DONE. Ethernet Address : 00:02:cb:01:55:c2 BOOTP DONE. my_ip=192.168.0.3, bootfile=, server_ip(BOOTP)=192.168.0.1 ==> my_ip=192.168.0.3, bootfile=sample.bin, server_ip(TFTP)=192.168.0.2, loadaddr=0x400000 TFTP Start....(10 blocks) DONE. 1:
1:go HOS 00000:Task1 01002:Task1 →以降、1秒毎に表示を繰り返す。 02004:Task1 03006:Task1 04008:Task1等となればよい。
MONIX Ver.0.1 (Jan 18 2007, 23:41:08) BootMode: 0x00 1:
1:stub net 9999 EtherInit DONE. Ethernet Address : 00:02:cb:01:55:c2 BOOTP DONE. my_ip=192.168.0.3, bootfile=, server_ip(BOOTP)=192.168.0.1 Start GDB stub... StubNetDebugStart: call bind (port=9999)
gdbが起動したら、targetコマンドで、 ターゲットのIPアドレス (この例では192.168.0.3) とスタブのUDPポート (この例では9999) を指定します。
C:\work\hos-v4\sample\h83-akilan>h8300-elf-gdb sample.elf GNU gdb 6.0.0.90_20031231 Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "--host=i686-pc-cygwin --target=h8300-elf"... (gdb) target remote udp:192.168.0.3:9999 →ターゲットのIPアドレスとスタブのUDPポート warning: The remote protocol may be unreliable over UDP. warning: Some events may be lost, rendering further debugging impossible. Remote debugging using udp:192.168.0.3:9999 0x00006b8c in ?? () (gdb) load →ロードする Loading section .vectors, size 0x100 lma 0x400000 Loading section .text, size 0x1220 lma 0x400100 Loading section .data, size 0x20 lma 0x401320 Start address 0x400100, load size 4928 Transfer rate: 39424 bits in <1 sec, 62 bytes/write. (gdb) b main →ブレークポイント設定 Breakpoint 1 at 0x400146: file sample.c, line 25. (gdb) c →動かす Continuing. Breakpoint 1, main () at sample.c:25 25 Sci_Initialize(SCI_57600); (gdb) n 33 Sci_PutChar('H'); (gdb) n 34 Sci_PutChar('O'); (gdb) n 35 Sci_PutChar('S'); (gdb) n 36 Sci_PutChar('\r'); (gdb) n 37 Sci_PutChar('\n'); (gdb) n 39 sta_hos(); (gdb) s sta_hos () at ../../../src/kernel/hos/sta_hos.c:20 20 kernel_cfg_init(); (gdb) s kernel_cfg_init () at kernel_cfg.c:190 190 kernel_tcb_ram[i].tcb_rom = &kernel_tcb_rom[i]; (gdb) n 194 kernel_intcb_tbl[24].exinf = (VP_INT)(0); (gdb) n 195 kernel_intcb_tbl[24].isr = (FP)(OsTimer_TimerHandler); (gdb) n 196 kernel_intcb_tbl[57].exinf = (VP_INT)(0); (gdb) c Continuing. Interrupted while waiting for the program. →Ctrl-Cを入力 Give up (and stop debugging it)? (y or n) y (gdb) q C:\work\hos-v4\sample\h83-akilan>このときのターゲット側の表示
1:stub net 9999 EtherInit DONE. Ethernet Address : 00:02:cb:01:55:c2 BOOTP DONE. my_ip=192.168.0.3, bootfile=, server_ip(BOOTP)=192.168.0.1 Start GDB stub... StubNetDebugStart: call bind (port=9999) HOS 00000:Task1 01002:Task1 02004:Task1 03006:Task1 04008:Task1 05010:Task1 06012:Task1
使用例 (TOPPERS/JSP)
(HOSの場合と同様ですので、あわせてHOSの方の説明もご覧ください。)TOPPERS/JSP (http://www.toppers.jp/) を対象のプログラムとして、 BOOTP+TFTPダウンロード、および、GDBスタブの使用例を示します。
環境
- ホストPCでターミナルソフトを動かします。
- DHCPサーバが動いていることを想定しています。
- ホストPC(ビルド環境のPC)でTFTPサーバを動かすことを想定しています。
TFTPサーバの設定としては、 ロード対象のベタバイナリファイル (後述の jsp.bin) が存在する ディレクトリ (後述の jsp/MYSAMPLE) の指定ぐらいで済むと思います。TOPPERS/JSP Release 1.4.2 の入手、ビルド
こちらをご参照ください。ターゲットへのBOOTP+TFTPでのロード
ターゲット電源オン
シリアルポート(SCI1)にシリアルケーブル(ストレート)を接続して、電源を入れます。MONIX Ver.0.1 (Jan 18 2007, 23:41:08) BootMode: 0x00 1:ターゲットにBOOTP(DHCP) + TFTPでプログラムダウンロード
tftpコマンドで、 TFTPサーバを動かしているホストPC(以下の例では192.168.0.2)から、 ベタバイナリ(jsp.bin)をダウンロードします。1:tftp 192.168.0.2 jsp.bin EtherInit DONE. Ethernet Address : 00:02:cb:01:55:b1 BOOTP DONE. my_ip=192.168.0.3, bootfile=, server_ip(BOOTP)=192.168.0.1 ==> my_ip=192.168.0.3, bootfile=jsp.bin, server_ip(TFTP)=192.168.0.2, loadaddr=0x400000 TFTP Start....(55 blocks) DONE. 1:実行
等となればよい。1:go JSP Kernel Release 1.4 (patchlevel = 2) for AKI-H8/3069F (Jan 19 2007, 19:32:22) Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory Toyohashi Univ. of Technology, JAPAN Copyright (C) 2001-2005 by Industrial Technology Institute, Miyagi Prefectural Government, JAPAN Copyright (C) 2001-2004 by Dep. of Computer Science and Engineering Tomakomai National College of Technology, JAPAN Copyright (C) 2003-2004 by Katsuhiro Amano System logging task is started on port 1. Sample program starts (exinf = 0). task1 is running (001). | →以降、表示を繰り返す。 task1 is running (002). | task1 is running (003). | task1 is running (004). | task1 is running (005). | task1 is running (006). | task1 is running (007). | task1 is running (008). | task1 is running (009). | task1 is running (010). | task1 is running (011). | task1 is running (012). |GDBスタブ
ターゲット電源オン
MONIX Ver.0.1 (Jan 18 2007, 23:41:08) BootMode: 0x00 1:ターゲットでGDBスタブを動かす
以下の例では、デフォルトのUDPのポート9000でGDBスタブを動かします。1:stub net EtherInit DONE. Ethernet Address : 00:02:cb:01:55:c2 BOOTP DONE. my_ip=192.168.0.3, bootfile=, server_ip(BOOTP)=192.168.0.1 Start GDB stub... StubNetDebugStart: call bind (port=9000)
gdbが起動したら、targetコマンドで、 ターゲットのIPアドレス (この例では192.168.0.3) とスタブのUDPポート (この例では9000) を指定します。
C:\work\TOPPERS\jsp\MYSAMPLE>h8300-elf-gdb jsp.exe GNU gdb 6.0.0.90_20031231 Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "--host=i686-pc-cygwin --target=h8300-elf"... (gdb) target remote udp:192.168.0.3:9000 →ターゲットのIPアドレスとスタブのUDPポート warning: The remote protocol may be unreliable over UDP. warning: Some events may be lost, rendering further debugging impossible. Remote debugging using udp:192.168.0.3:9000 0x00006dba in ?? () (gdb) load →ロードする Loading section .vectors, size 0x100 lma 0x400000 Loading section .text, size 0x5ab6 lma 0x400100 Loading section .rodata, size 0x113e lma 0x405bb8 Loading section .data, size 0xe lma 0x406cf8 Start address 0x400100, load size 27906 Transfer rate: 37208 bits/sec, 63 bytes/write. (gdb) b main_task →ブレークポイント設定 Breakpoint 1 at 0x400474: file sample1.c, line 251. (gdb) c →動かす Continuing. Breakpoint 1, main_task (exinf=0x0) at sample1.c:251 251 ID tskid = TASK1; (gdb) list 246 * ・皈、・・ソ・ケ・ッ →EUCのコメントのため化けている 247 */ 248 void main_task(VP_INT exinf) 249 { 250 char c; 251 ID tskid = TASK1; 252 volatile UW i; 253 INT tskno = 1; 254 ER_UINT ercd; 255 PRI tskpri; (gdb) 256 SYSTIM stime1, stime2; 257 #ifndef OMIT_VGET_TIM 258 SYSUTIM utime1, utime2; 259 #endif /* OMIT_VGET_TIM */ 260 261 vmsk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG)); 262 syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (INT) exinf); 263 264 syscall(serial_ctl_por(TASK_PORTID, 265 (IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV))); (gdb) 266 267 /* 268 * ・・シ・ライソ、ホタ゜ト →EUCのコメントのため化けている 269 */ 270 task_loop = LOOP_REF; 271 get_tim(&stime1); 272 for (i = 0; i < task_loop; i++); 273 get_tim(&stime2); 274 task_loop = LOOP_REF * 400 / (stime2 - stime1); 275 tex_loop = task_loop / 5; (gdb) b 273 →273行にブレークポイント設定。 Breakpoint 2 at 0x400522: file sample1.c, line 273. (gdb) c Continuing. Breakpoint 2, main_task (exinf=0x0) at sample1.c:273 273 get_tim(&stime2); (gdb) p i →変数iの値を表示。 $1 = 100000 (gdb) n 274 task_loop = LOOP_REF * 400 / (stime2 - stime1); (gdb) p stime1 $2 = 23 (gdb) p stime2 $3 = 1350 (gdb) b syslog →syslog関数にブレークポイントを設定。 Breakpoint 3 at 0x401e52: file ../library/vasyslog.c, line 57. (gdb) c Continuing. Breakpoint 3, syslog (prio=5, format=0x405bd0 "task%d is running (%03d). %s") at ../library/vasyslog.c:57 57 log.logtype = LOG_TYPE_COMMENT; (gdb) where →スタックトレース表示。 #0 syslog (prio=5, format=0x405bd0 "task%d is running (%03d). %s") at ../library/vasyslog.c:57 #1 0x004001da in task (exinf=0x500614) at sample1.c:128 #2 0x004033de in can_act (tskid=5) at ../kernel/task_manage.c:150 #3 0x0040139e in serial_rea_dat (portid=1, buf=0x500614 "", len=1) at t_services.h:97 #4 0x0040058a in main_task (exinf=0x0) at t_services.h:88 #5 0x004033de in can_act (tskid=5) at ../kernel/task_manage.c:150 #6 0x00401960 in logtask (exinf=0x5) at t_services.h:97 #7 0x004033de in can_act (tskid=5) at ../kernel/task_manage.c:150 (gdb) c Continuing. Breakpoint 3, syslog (prio=5, format=0x405bd0 "task%d is running (%03d). %s") at ../library/vasyslog.c:57 57 log.logtype = LOG_TYPE_COMMENT; (gdb) c Continuing. Breakpoint 3, syslog (prio=5, format=0x405bd0 "task%d is running (%03d). %s") at ../library/vasyslog.c:57 57 log.logtype = LOG_TYPE_COMMENT; (gdb)