製品情報 | 機能 | 仕様 | 対応CPU | VerUP | FAQ | 解説テキスト | 接続図 | GNU/gcc | ルネサスC | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GNU/gccおよびKPIT使用に関する御承諾
■KPIT/GNU (2010/11/12記述)
・KPIT利用によりH-debuggerを使用する場合は、シンボルコンバータ「GCsymconv」が必要です。【VerUP】よりダウンロードして下さい。 ・KPIT利用によりH-debuggerを使用する場合は、DEFバージョンを「6.00A」以上にして下さい。 ・KPITで作成したソフトは、構造体・ローカル変数・配列等の対応が可能になります。 シンボル対応一覧表 【注意事項】 ・R8Cシリーズには対応していません。 ■KPIT使用においてのHowToTOP
■Cygwin/GNU
Cygwinについて | as(H8/300H & H8S)について | as(SH-2)について | gccについて | ldについて | makeについて | その他 弊社で用意したサービスパッケージのバージョンは、以下の通りです。 号外! SH版gcc(2.95.3)にてライン情報が正しく出力されていないことがわかりました。 製品版CDのVer2.00.A/2.00.Bをお持ちのユーザー様でお困りの方がいらっしゃいましたらcat-i@aone.co.jpまでご連絡ください。 製品版CDのgccについては、2002.10.24まで出荷していたgcc(2.95.2)に戻しました。
サービスパッケージのバージョンアップによりWindows xpでもGNU/gccを使用できるようになりました。 旧サービスパッケージをお持ちの方は、CygwinのサイトよりSetup.exe(2.249.2.5以降)をダウンロードしてCygwin1.3.12-4(またはこれ以上のバージョン)をインストールするだけでWindows xpで使用可能になります。 ■CygwinTOP
Cygwinって何ですか? Cygwinは、 RedHatで行われているプロジェクトで、GNUツール(gcc等)をWindows上で動かすことを可能にするものです。 Cygwin/TOP H-debuggerの勉強を始めたところですが、windows XPにインストールして、使おうとしてみたのですが、makeしたときに、"Couldn't reserve space for cygwin's heap xxxxxxx"というエラーメッセージがでます。 XPにインストールして使うことはできないのでしょうか? ご使用の"Cygwin"のバージョンが古い為、xpに対応していないようです。 "Cygwin"のバージョンアップによりWindows xpで使用できるようになります。 Cygwin1.3.12-4(またはこれ以上のバージョン)を使用してください。 Cygwin/TOP ■as(H8/300H & H8S)TOP
アセンブラのソース表示デバッグは可能ですか? GNUの場合は、ラインアドレス情報を得る方法がわかりません。弊社はC言語でのインラインASMでの方法を取っています。 サンプルをご覧下さい。 asH8/TOP ldc.w @er1,ccr をasでアセンブリると、コードがldc @er0,ccrになります。 as(アセンブラ)のバグです。ソースオペランド側が@er0の場合は、問題ないのですが@er1->@er7の場合、@er0のコードを発生してしまいます。対策は、機械語を直接入力するしかありません。 例 word 0x0140,0x6910 ; ldc.w @er1,ccr です。 なお、デスティネーションオペランドがexrの場合も同じ現象がでます。 asH8/TOP ldmac er0,maclをasで正しくアセンブリできません。 as(アセンブラ)のバグです。 対策は、機械語を直接入力するしかありません。 例 word 0x0320 ; ldmac er0,mach です。 なお、デスティネーションオペランドがmaclの場合も同じ現象がでます。 asH8/TOP stmac mach,er0をasで正しくアセンブリできません。 as(アセンブラ)のバグです。 対策は、機械語を直接入力するしかありません。 例 .word 0x0220 ; stmac mach,er0 です。 なお、デスティネーションオペランドがmaclの場合も同じ現象がでます。 asH8/TOP ■as(SH-2)TOP
アセンブラのソース表示デバッグは可能ですか? GNUの場合は、ラインアドレス情報を得る方法がわかりません。弊社はC言語でのインラインASMでの方法を取っています。 サンプルをご覧下さい。 asSH/TOP mov.l r0,@(15,r1)をasで正しくアセンブリできません。 as(アセンブラ)のバグです。 対策は、機械語を直接入力するしかありません。 例 .word 0x110f /* mov.l r0 ,@(15,r1 ) */ です。 なお、レジスタ名が違うパターンでも正しくアセンブリできません。 asSH/TOP mov.l @(2,r0),r1をasで正しくアセンブリできません。 as(アセンブラ)のバグです。 対策は、機械語を直接入力するしかありません。 例 .word 0x510f /* mov.l @(2,r0 ),r1 */ です。 なお、レジスタ名が違うパターンでも正しくアセンブリできません。 asSH/TOP ■gccTOP
#define文が複数行になる場合は、”\”記号でつないだ記述をしていましたが、最近OSを変えたらエラーがでます。 WindowsXpでこの現象がでてきました。Windows98/2000ではこの症状がでていませんでした。 対策としては、gcc(Ver2.95.2)をバージョンUPするか、下記のようにソースを書き換えて下さい。 <従来の記述> #define disable() asm(" mov.l r0,@-r15 "); \ asm(" stc sr,r0 "); \ asm(" and #0x0f,r0 "); \ asm(" or #0xe0,r0 "); \ asm(" ldc r0,sr "); \ asm(" mov.l @r15+,r0 ") <記述変更例> #define disable() asm("mov.l r0,@-r15;stc sr,r0;and #0x0f,r0;or #0xe0,r0;ldc r0,sr;mov.l @r15+,r0") gcc/TOP const Uchar S1cmd[] = {"\x02D1command\x03"}; このステートメントが正しくコンパイルできません。 文字列中の¥xnnn(16進数表記)は、gccでは桁数が決めてないようです。ですから、gccは¥x02D1cまで数値化しようとします。これを防ぐ方法は、 const Uchar S1cmd[] = {"\x02""D1command\x03"}; このような記述にして下さい。 gcc/TOP 関数のフレームポインタ部分を削除したいのですが、どうしたらいいですか? コンパイル時に"-fomit-frame-pointer"を指定して下さい。 gcc/TOP C言語用に作成した"#define"のマクロ名をインラインアセンブラでも使用したいのですが、どうしたらいいですか? このように記述して下さい 例 #define MONJMP 0x200 asm("jmp @%c0 ":: "g" (MONJMP)); /* jmp @0x200 */ になります。 gcc/TOP ある変数を単独で、別アドレスに指定したいのですが、どうしたらいいですか? その変数のセクション名を別に定義した後、ロケート用のスクリプトファイルにアドレスを定義して下さい。 例 const short TBL[0x20] __attribute__ ((section (".envtbl"))) = { }; [ロケート スクリプトファイル *.x] .envtabl 0xffe0a0 : { *(.envtbl) _eenv = . ;} これで、"TBL"は0xffe0a0番地に割り振られます。 gcc/TOP 関数と関数の間に、"nop"を4個挿入したいのですが、どうしたらいいですか? インラインアセンブラで対応して下さい。 例 #define Nop4() asm("nop\n nop\n nop\n nop\n"); // Pre facth Break 対策 /********************************************************/ void Aproc { } Nop4();<-----------ココ /********************************************************/ void Bproc { }gcc/TOP グローバル変数を直接レジスタに割り振りたいのですがどうしたら良いですか? このように宣言してください。 register long Moniter asm("r14"); これはSH−2の例ですが、Moniter変数をレジスタR14に割り振った事になります。 gcc/TOP ■ldTOP
GNU/gccでモニターエリア0x200〜0x7FF番地を空けるにはどうしたらいいですか? 下記ファイルは、セクションごとのグループ指定および、アドレスを指定する定義ファイルです。 このファイルは、LDコマンド(リンクエディタ)の時に使用します。
詳細説明は、弊社製”H8S用の実践解説テキスト”をお読みください。 ld/TOP link(ld)実行後の結合オブジェクトファイルをもとに、逆アセンブラ情報がほしいのですが? GNUツールの中の”objdump”を使ってください。
■makeTOP
makeを実行したのにMakefileを読込まない。 デフォルトMakefile名は、大文字,小文字を区別して必ず"Makefile"として下さい。 make/TOP ■その他TOP
Link(ld)実行後、不必要なアドレス部分を削除する方法がありますか? objcopyのスイッチ「-R セクション名」を指定することで実現できます。
|