製品情報 機能 仕様 MCU制限 VerUP FAQ 解説テキスト 接続図 GNU/gcc ルネサスC
 


gccおよびKPIT使用における承諾事項 KPIT/GNU KPIT使用におけるHow to
Cygwin as(H8/300H & H8S) as(SH-2)
gcc link(ld) make or その他

gccおよびKPIT使用における承諾事項
GNU/gccおよびKPITに関するTel/Faxでのご質問に関してはお受けできませんが、メールでのご質問に関してはお答えするよう努力はします。ただし都合によりお答えできない場合もありますので予めご了承願います。
GNU/gccおよびKPIT関連ソフトの不具合が発見された場合の対応義務はありません。また、この関連ソフトの使用方法に関する質問の回答義務もありませんので承知の上ご利用下さい。
ソースデバッグ可能にする為のツール(シンボルコンバータ)は、GNUおよびKPITより公開された資料を参考にして作成しましたが、資料に記述されていないDwarfコードもありました。弊社としては出来る限りシンボルデバッグ可能にする為、分析により対応させていますが、C記述の書式の相違により、更に資料外のDwarfコードが出力される可能性があります。この場合、当ソフトの利用ユーザはシンボル不可の部分を抽出したソース及び結合オブジェクト(*.x/*.coff/*.elf)を提出して頂く協力を希望します。
より良いデバッガにする為、解決に出来る限りの努力をしますので協力の程よろしくお願い致します。


KPIT/GNU
KPITバージョンについてのお知らせ
バージョン 備考 GCsymconv
v0702 確認済み Ver1.50Cまでの対応
v0703 確認済み Ver1.50Cまでの対応
v0801 確認済み Ver1.50Cまでの対応
v0802 確認済み Ver1.50Cまでの対応
v0803 確認済み(ELF/Dwarf2の吐き出しコードが一部変更される) Ver1.60Aからの対応(2010/11/12up)
v0903 確認済み(ELF/Dwarf2の吐き出しコードが一部変更される) Ver1.60Aからの対応(2010/11/12up)
v1002 確認済み(ELF/Dwarf2の吐き出しコードが変更されている) Ver1.70Aからの対応(2010/11/15up)
v1003 確認済み(ELF/Dwarf2の吐き出しコードが変更されている) Ver1.70Aからの対応(2010/11/15up)
v1101 確認済み(ELF/Dwarf2の吐き出しコードが追加されている) Ver2.00Aからの対応(2011/08/18up)
v1102 確認済み(2012/03/16) Ver2.00Aからの対応(2011/08/18up)

KPITに関するHow to
資料内容 Rev. 更新日 ファイル
シンボルコンバータのスイッチi説明と登録方法の説明
重複モジュール情報に対応する。
1.50 2008.04.18 SymConvHEW.pdf
Hew2のパフォーマンス向上と安定させる設定(HowTo) 1.00 2007.01.24 Hew_Perform.pdf
アセンブラソースでのデバッグについての説明とサンプル 1.00 2008.04.08 AsmKpit.pdfサンプル(H8S/2612)
アブソリュートファイル(*.x)指定でダウンロードする説明 1.20 2008.09.09 ABS_Dwnload.pdf 
Inline関数の対応についての説明 1.00 2008.04.10 Inline_Kpit.pdf
View画面より、外部エディタJump機能を使用する。
1.00 2010.02.24 ExtEditer.pdf
View画面より、「make.exe」を使用する。
1.00 2010.02.24 DEF_Make.pdf

アブソリュートファイル指定方式のダウンロード
シンボルコンバータ(GCsymconv)を統合環境に登録しないタイプ
参考例 備考 Rev 更新日 ファイル
HEW4 H8/3664F
(E8仕様)
DEF6.80A追加説明 1.00 2008.03.10 KPIT3664_ABS_v0801.pdf
サンプル(v0901以上使用不可) v0801 2008.03.10 KPIT3664_ABS_v0801.LZH
サンプル(v0901以上使用可能) v1003 2010.11.15 KPIT3664_ABS_v1003.LZH
H8/3048F-ONE
(E10T仕様)
DEF6.80A追加説明 1.00 2008.03.10 KPIT3048_ABS_v0801.pdf
サンプル(v0901以上使用不可) v0801 2008.03.10 KPIT3048_ABS_v0801.LZH
サンプル(v0901以上使用可能) v1003 2010.11.15 KPIT3048_ABS_v1003.LZH
H8S/2612F
(ブート仕様)
DEF6.80A追加説明 1.00 2008.03.10 KPIT2612_ABS_v0801.pdf
サンプル(v0901以上使用不可) v0801 2008.03.10 KPIT2612_ABS_v0801.LZH
サンプル(v0901以上使用可能) v1003 2010.11.15 KPIT2612_ABS_v1003.LZH
SH7051F
(ブート仕様)
DEF6.80A追加説明 1.00 2008.03.10 KPIT7051_ABS_v0801.pdf
サンプル(v0901以上使用不可) v0801 2008.03.10 KPIT7051_ABS_v0801.LZH
サンプル(v0901以上使用可能) v1003 2010.11.15 KPIT7051_ABS_v1003.LZH
H8S/2378F
(H-UDI仕様)
DEF6.80A追加説明 1.00 2008.03.10 KPIT2378_ABS_v0801.pdf
サンプル(v0901以上使用不可) v0801 2008.03.10 KPIT2378_ABS_v0801.LZH
サンプル(v0901以上使用可能) v1003 2010.11.15 KPIT2378_ABS_v1003.LZH
H8SX/1653F
(H-UDI仕様)
DEF6.80A追加説明 1.00 2008.03.10 KPIT1653_ABS_v0801.pdf
サンプル(v0901以上使用不可) v0801 2008.03.10 KPIT1653_ABS_v0801.LZH
サンプル(v0901以上使用可能) v1003 2010.11.15 KPIT1653_ABS_v1003.LZH
SH7145F
(H-UDI仕様)
DEF6.80A追加説明 1.00 2008.03.10 KPIT7145_ABS_v0801.pdf
サンプル(v0901以上使用不可) v0801 2008.03.10 KPIT7145_ABS_v0801.LZH
サンプル(v0901以上使用可能) v1003 2010.11.15 KPIT7145_ABS_v1003.LZH

HEXファイル指定方式のダウンロード
シンボルコンバータ(GCsymconv)を統合環境に登録するタイプ
参考例 備考 Rev 更新日 ファイル
HEW4 H8/3664F
(E8仕様)
DEF6.80C追加説明 1.23 2008.04.18 KPIT3664_v0703_1.pdf
サンプル(v0901以上使用不可) v0703 2008.03.07 KPIT3664_v0703_1.LZH
H8/3048F-ONE
(E10T仕様)
DEF6.80C追加説明 1.23 2008.04.18 KPIT3048_v0703_1.pdf
サンプル(v0901以上使用不可) v0703 2008.03.07 KPIT3048_v0703_1.LZH
H8S/2612F
(ブート仕様)
DEF6.80C追加説明 1.23 2008.04.18 KPIT2612_v0703_1.pdf
サンプル(v0901以上使用不可) v0703 2008.03.07 KPIT2612_v0703_1.LZH
SH7051F
(ブート仕様)
DEF6.80C追加説明 1.23 2008.04.18 KPIT7051_v0703_1.pdf
サンプル(v0901以上使用不可) v0703 2008.03.07 KPIT7051_v0703_1.LZH
H8S/2378F
(H-UDI仕様)
DEF6.80C追加説明 1.23 2008.04.18 KPIT2378_v0703_1.pdf
サンプル(v0901以上使用不可) v0703 2008.03.07 KPIT2378_v0703_1.LZH
H8SX/1653F
(H-UDI仕様)
DEF6.80C追加説明 1.23 2008.04.18 KPIT1653_v0703_1.pdf
サンプル(v0901以上使用不可) v0703 2008.03.07 KPIT1653_v0703_1.LZH
SH7145F
(H-UDI仕様)
DEF6.80C追加説明 1.23 2008.04.18 KPIT7145_v0703_1.pdf
サンプル(v0901以上使用不可) v0703 2008.03.07 KPIT7145_v0703_1.LZH
・KPITのインストール方法に関する資料は作成しておりません。
・KPIT利用によりH-debuggerを使用する場合は、シンボルコンバータ「GCsymcon」が必要です。【VerUP】よりダウンロードして下さい。
・KPIT利用によりH-debuggerを使用する場合は、DEFバージョンを「6.00A」以上にして下さい。
・KPITで作成したソフトは、構造体・ローカル変数・配列等の対応が可能になります。
【注意事項】
・R8Cシリーズには対応していません。


KPIT使用におけるHow to
「long long」64bit宣言における注意事項(GCsymconv.exe[Ver2.00Aより対応]) KPIT-v1101までの確認事項
関数の引数に「long long a」等の数値を渡した場合、シンボル情報のフレームベースのオフセット値に不具合があるため、関数内部のローカル変数を正しく評価できません。対策として「long long *a」のポインタ変数で渡すようにすれば正しく評価できます。

初期値のROM−>RAMへのコピーする設定方法が判りましたので、全説明書を改訂する。(Rev1.10)
1)「char string[]="Hello"」の場合は、RAM側に割り振られる。
2)「const char string[]="Hello"」の場合は、ROM側に割り振られる。

ビルド実行時に時々ライブラリが存在しているにも関わらず「NotFound」とエラー判定してしまう時がありました。
結果論的ですが、どうもWinFM等のファイラーが常駐しているとエラー判定してしまうようです。

関数内のローカル変数を参照する場合は、関数内の第一行目以降まで実行させてから参照して下さい。
関数内で2次元以上のローカル構造体を宣言するとシンボル情報が消滅する場合がありました。
例)
typedef struct {
 char dt1;
 short dt2;
} TEST;
// function
void func() {
TEST test[2][10];
 ......
}


Cygwin
Cygwin+gccに関するHow to & FAQ
付属CDのGNU/gccインストール方法

サービスパッケージのバージョンは、以下の通りです。
Cygwin関係
Setup
Cygwin
ash
make
2.249.2.5
1.3.12-4
20020731-1
3.79.1-7
GNU/gcc関係
binutils
gcc
newlib
2.11.2
2.95.2
1.9.0

Cygwinは、 RedHatで行われているプロジェクトで、GNUツール(gcc等)をWindows上で動かすことを可能にするものです。


as(H8/300H & H8S)
アセンブラのソース表示デバッグは可能ですか?
GNUの場合は、ラインアドレス情報を得る方法がわかりません。弊社はC言語でのインラインASMでの方法を取っています。
サンプルをご覧下さい。
ldc.w @er1,ccr をasでアセンブリると、コードがldc @er0,ccrになります。
as(アセンブラ)のバグです。ソースオペランド側が@er0の場合は、問題ないのですが@er1->@er7の場合、@er0のコードを発生してしまいます。対策は、機械語を直接入力するしかありません。

word 0x0140,0x6910 ; ldc.w @er1,ccr
です。
なお、デスティネーションオペランドがexrの場合も同じ現象がでます。
dmac er0,maclをasで正しくアセンブリできません。
as(アセンブラ)のバグです。
対策は、機械語を直接入力するしかありません。


word 0x0320 ; ldmac er0,mach
です。
なお、デスティネーションオペランドがmaclの場合も同じ現象がでます。
・  stmac mach,er0をasで正しくアセンブリできません。
as(アセンブラ)のバグです。
対策は、機械語を直接入力するしかありません。


.word 0x0220 ; stmac mach,er0
です。
なお、デスティネーションオペランドがmaclの場合も同じ現象がでます。


as(SH-2)
アセンブラのソース表示デバッグは可能ですか?
GNUの場合は、ラインアドレス情報を得る方法がわかりません。弊社はC言語でのインラインASMでの方法を取っています。
サンプルをご覧下さい。
mov.l r0,@(15,r1)をasで正しくアセンブリできません。
as(アセンブラ)のバグです。
対策は、機械語を直接入力するしかありません。

.word 0x110f /* mov.l r0 ,@(15,r1 ) */です。
なお、レジスタ名が違うパターンでも正しくアセンブリできません。
mov.l @(2,r0),r1をasで正しくアセンブリできません。
as(アセンブラ)のバグです。
対策は、機械語を直接入力するしかありません。

.word 0x510f /* mov.l @(2,r0 ),r1 */です。
なお、レジスタ名が違うパターンでも正しくアセンブリできません。


gcc
How to
H8
CPUは以下のスイッチで選択されます。

H8/300 -------> 無し
H8/300H ------> -mh

H8S ----------> -ms
浮動小数点演算は、スタックエリアを使用しています。256byteぐらい確保して下さい。
long double/doubleで変数宣言しても4Byteのfloating pointにまとめられてしまいますので注意してください。
SH-2
CPUは以下のスイッチで選択されます。

SH-2 ------> -m2
浮動小数点演算は、スタックエリアを使用しています。512byteぐらい確保して下さい。
long doubleで変数宣言しても8Byteのdoubleにまるめられますので注意してください。
#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")
const Uchar S1cmd[] = {"\x02D1command\x03"}; このステートメントが正しくコンパイルできません。
文字列中の¥xnnn(16進数表記)は、gccでは桁数が決めてないようです。ですから、gccは¥x02D1Cまで数値化しようとします。これを防ぐ方法は、
const Uchar S1cmd[] = {"\x02""D1command\x03"};
このような記述にして下さい。
関数のフレームポインタ部分を削除したいのですが、どうしたらいいですか?
コンパイル時に"-fomit-frame-pointer"を指定して下さい。
・  C言語用に作成した"#define"のマクロ名をインラインアセンブラでも使用したいのですが、どうしたらいいですか?
このように記述して下さい

#define MONJMP 0x200
asm("jmp @%c0 ":: "g" (MONJMP)); /* jmp @0x200 */
になります。
・  ある変数を単独で、別アドレスに指定したいのですが、どうしたらいいですか?
その変数のセクション名を別に定義した後、ロケート用のスクリプトファイルにアドレスを定義して下さい。

const short TBL[0x20] __attribute__ ((section (".envtbl"))) =
{
};
[ロケート スクリプトファイル *.x]
.envtabl 0xffe0a0 : { *(.envtbl) _eenv = . ;}
これで、"TBL"は0xffe0a0番地に割り振られます。
・  関数と関数の間に、"nop"を4個挿入したいのですが、どうしたらいいですか?
インラインアセンブラで対応して下さい。

#define Nop4() asm("nop\n nop\n nop\n nop\n"); // Pre facth Break 対策

/********************************************************/
void Aproc {
}
Nop4();<-----------ココ
/********************************************************/
void Bproc {

}
・  グローバル変数を直接レジスタに割り振りたいのですがどうしたら良いですか?
このように宣言してください。

register long Moniter asm("r14");

これはSH-2の例ですが、Monitor変数をレジスタR14に割り振った事になります。


link(ld)
How to
H8
CPUのアーキテクチャの指定が必要です。

H8300 -------> OUTPUT_ARCH(h8300)
H8300s ------> OUTPUT_ARCH(h8300s)
H8300h ------> OUTPUT_ARCH(h8300h)
SH-2
CPUのアーキテクチャの指定が必要です。

SH-2 -------> OUTPUT_ARCH(sh)
GNU/gccでモニターエリア0x200〜0x7FF番地を空けるにはどうしたらいいですか?
下記ファイルは、セクションごとのグループ指定および、アドレスを指定する定義ファイルです。
このファイルは、LDコマンド(リンクエディタ)の時に使用します。

file "h8s261x.x"
1: OUTPUT_FORMAT("coff-h8300")
2: OUTPUT_ARCH(h8300S)
3:
4: SECTIONS
5: {
6: .vect 0x0 : { *(.vector) ; }
7: .rom 0x800 : { *(.text) *(.rodata) *(.string) _etext = . ; }
8: .const . : { *(.data) _edata = . ;}
9: .bss 0xffe000 : { *(.bss) *(COMMON) *(.stack) _end = . ; }
10: }
11:
このように、”. rom 0x800”と指定するだけでモニタエリアの確保ができます。
詳細説明は、弊社製”H8S用の実践解説テキスト”をお読みください。
link(ld)実行後の結合オブジェクトファイルをもとに、逆アセンブラ情報がほしいのですが?
GNUツールの中の”objdump”を使ってください。
例)
オブジェクトファイルを”abc.coff”
逆アセンブラファイルを”abc.uasm”としますと、
h8300-hms-coff-objdump -d -S -l abc.coff > abc.uasm
です。


make
makeを実行したのにMakefileを読込まない。
デフォルトMakefile名は、大文字,小文字を区別して必ず"Makefile"として下さい。


その他
link(ld)実行後、不必要なアドレス部分を削除する方法がありますか?
objcopyのスイッチ「-R セクション名」を指定することで実現できます。
例)
objcopy -R .bss0 -Osrec $A.coff $*.mot

この例ですと、「.bss0」セクション名(0x400000番地に割付)の部分がHEXファイルより削除されます。
























 
H-デバッガAH7000のページ H-デバッガAH6000のページ バグファインダーBF3000のページ ミドルウェアとユーティリティのご紹介 川崎マイクロのKC80のサポートページ 資料請求・技術情報のお問い合わせ 関係会社へのリンク トップページ