[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(toppers-users 1207) Re: tinet h8 3068f_lan のAKI_MONITOR
- To: <users at toppers jp>
- From: "Katsuhiro Amano" <amano at toyotamacs co jp>
- Date: Thu, 11 Sep 2003 08:45:41 +0900
高橋さん、谷本さん、こんにちは。
トヨタマックス 天野です。
h8300-elf環境でデバックが出来る(?)ようになりました。
#まだ問題点はありそうですが。。
| ところで、Redbootは以下のところからゲットしたのでは?
| http://sourceforge.jp/projects/ecos-h8/files/
|
| そうだとすれば、elf形式です。
| gccなどのソースをゲットして上記よりのパッチを当てて
| ツールを作成するか
開発環境ですが、ご教授いただいた所で、パッチをあてて構築しました。
普通にToppers開発環境を作るのと同じでした。h8300-elfにしただけです。
|
/usr/local/bin/h8300-elf-gcc -S -mh -mint32 -mrelax -O2 -DLABEL_ASM -DCPU_C
LOCK
|
=20000000 -DGDB_STUB -DSUPPORT_INET4 -DSUPPORT_TCP -DSUPPORT_ETHER -DIF_ETH
ER_C
|
FG_ED -I. -I../include -I../config/h8net -I../config/h8net/akih8_3068f_lan -
I../
| tinet/include -g -Werror -I../kernel ../config/h8net/makeoffset.c
| ../utils/genoffset makeoffset.s > offset.h
| genoffset: cannot parse: .type _ref_4, @object
| genoffset: cannot parse: .size _ref_4, 4
| genoffset: cannot parse: .type _ref_2, @object
| genoffset: cannot parse: .size _ref_2, 2
| genoffset: cannot parse: .type _ref_1, @object
| genoffset: cannot parse: .size _ref_1, 1
| genoffset: cannot parse: .type _TCB_enatex, @object
| genoffset: cannot parse: .size _TCB_enatex, 32
| genoffset: unknown directive: .long 0
| make: *** [offset.h] Error 1
|
| しばらくは、COFFでやっていくので、あまり追いかけませんが、もしこの
| 件に関してヒントになることがあれば、ご返信いただければ幸いです。
同様の症状が発生しました。対策は2点です。
対策1:","の後のスペースを認める
utils/genoffset
113:
# elsif ($line =~ /[ \t]*\.([a-zA-Z0-9]+)[ \t]*([^ \t]*)$/
elsif ($line =~ /[ \t]*\.([a-zA-Z0-9]+)[ \t]*([^\t]*)$/
217:
# elsif ($line =~ /[ \t]*\.([a-zA-Z0-9]+)[ \t]*([^ \t]*)$/
elsif ($line =~ /[ \t]*\.([a-zA-Z0-9]+)[ \t]*([^\t]*)$/
対策2:longが下記アセンブラコードでサイズ解決されないので
(.zero が吐かれる)"=1"にするとアセンブラコードが変わるのでサイズがわかるら
しい。
config/h8/makeoffset.c
//asm("! BIT_REF");
//UW ref_4 = 0;
//UH ref_2 = 0;
//UB ref_1 = 0;
//asm("! END");
asm("! BIT_REF");
UW ref_4 = 1;
UH ref_2 = 1;
UB ref_1 = 1;
asm("! END");
| (その先 make で止まってますが・・・)
| コンフィグレータ1.3に変更してますか?
make dependするとmake.dependedができますが、
ここで<commnd line> <bin-->と言う文字が入ってしまう。
それをはじいてmake.dependファイルを作成する様に変更。
utils/makedep
# if ($line =~ /^\#\s*([0-9]+)\s*\"([^\"]+)\"/) {
if ($line =~ /^\#\s*([0-9]+)\s*\"([^\"<>]+)\"/) {
あとチェッカーでエラーが連発する。とりあえずコメントアウト
チェッカーが走らないけど、この際無視。
# $(JSPDIR)/cfg/$(TARGET_PREFIX)chk $(JSPOBJ) -cs jsp.chk \
# -cpu $(CPU) -system $(SYS) -obj
下記がないと.vectors セクションがSレコードになったときに
消えてしまう。オブジェクト形式になった時に、ALLOC LOADフラグがないため。
sys_support.S
.section ".vectors","ax"
/* .section .vectors */
下記があるとデバッガのTRAP命令で例外が発生してしまう。
/* .long _no_reg_exception */ /* 8, 0x0020: trap */
/* .long _no_reg_exception */ /* 9, 0x0024: trap */
/* .long _no_reg_exception */ /* 10, 0x0028: trap */
/* .long _no_reg_exception */ /* 11, 0x002c: trap */
.long 0 /* 8, 0x0020: trap */
.long 0 /* 9, 0x0024: trap */
.long 0 /* 10, 0x0028: trap */
.long 0 /* 11, 0x002c: trap */
(toppers-users 1074) にある部分の変更。
#define VECTOR_TABLE_ADDR 0x00fffd20
#define JMP_OPECODE 0x5a000000
extern void vectors(void);
void vector_table_copy(void)
{
unsigned int n = 0x100/sizeof(unsigned int); /* ベクタテーブルサイズ
*/
unsigned int *o = (unsigned int *)VECTOR_TABLE_ADDR; /* ベクタテーブルコ
ピー先 */
unsigned int *i = (unsigned int *)vectors; /* ベクタテーブルコピー元
*/
while (n -- > 0) {
if (*i != 0) { /* NOPはなにもしない */
*o = JMP_OPECODE | *i; /* jmp命令の付加 */
}
o++; i++;
}
}
スタックの位置変更
//#define STACKTOP 0x00ffff20 /* タスク独立部用スタックの初期値 */
#define STACKTOP 0x005b0000 /* タスク独立部用スタックの初期値 */
あとはシリアルの出力をSCI0にしたぐらいです。
このぐらいの変更で、とりあえずデバックできるようになりました。
かなり間違っていることをやっているかもしれませんので
つっこみをいれていただけると幸いです。