Renesas Synergy™

FAQ 1008278 : リンク・ディレクティブの記述例はありますか?

回答

サンプルのリンク・ディレクティブを提供しています。
それを参考にして、各ターゲット・システムにあわせてカスタマイズして利用してください。

  • インストール・ディレクトリ\smp850\ca850\v850def.dir
  • インストール・ディレクトリ\smp850\ca850\v850def2.dir
  • インストール・ディレクトリ\smp850\ca850\v850def3.dir

memo.gif
PM+ 使用時は、ワークスペース新規作成時/新規プロジェクト作成時の [リンク・ディレクテイブ・ファイルの指定]で、次から選択します。

  • サンプルを作成して使用する(内蔵メモリのみ or 外部メモリあり)
  • 既存のファイルを使用する
  • 既存のファイルをコピーして使用する
  • 指定しない

以下に、サンプルを(μPD70F3715)使って、リンク・ディレクティブを説明します。


button5.gifファイル構成
サンプルでは、次のようなファイルを扱うものとします。

main.c メイン・モジュール
sub.c サブ・モジュール
startup.s スタート・アップ・モジュールのソース・ファイル
sample.dir リンク・ディレクティブ


button5.gifメモリ・イメージ
memory.gif


button5.gif生成されるセクション
ロード・モジュールを構成するmain.o、sub.o、startup.oの各モジュールでは、 コンパイル、アセンブルによって、次のセクションが生成されるものとします。

 

ファイル名 セクション名
main.o INTPO
.text
.sconst
.sdata
.sbss
.tidata
sub.o .text
startup.o RESET
.text
.bss


memo.gif
生成されるセクションのうち、“INTPO”と“RESET”は、デバイス・ファイルで定義されている割り込み要求名で、割り込みハンドラ用のセクションであることを示しています。
次のような記述により、Cコンパイラとアセンブラが生成するものです。

(main.c)-----------------------------------#pragma interrupt INTP0 func1__interrupt void func1(void){        ...        return;}-----------------------------------(startup.s)------------------------------        .section "RESET"        jr __start------------------------------


button5.gifリンク・ディレクティブ-sample.dir

------------------------------------------------------------#内蔵ROMへ置く.sconstセクションは、0x160番地から始まるSCONST :  !LOAD ?R V0x160{        .sconst = $PROGBITS ?A .sconst;};#テキストは、.sconstの固まり(SCONSTセグメント)の直後に続けて置かれるTEXT : !LOAD ?RX {        .pro_epi_runtime    = $PROGBITS     ?AX .pro_epi_runtime;        .text               = $PROGBITS     ?AX .text;};#外部RAMデータは、0x100000番地から始まるDATA : !LOAD ?RW V0x100000{        .data   = $PROGBITS     ?AW  .data;        .sdata  = $PROGBITS     ?AWG .sdata;        .sbss   = $NOBITS       ?AWG .sbss;        .bss    = $NOBITS       ?AW  .bss;};#内蔵RAMデータは、0x3ffc000番地から始まるSIDATA :	!LOAD ?RW V0x3ffc000 {        .tidata.byte    = $PROGBITS     ?AW .tidata.byte;        .tibss.byte     = $NOBITS       ?AW .tibss.byte;        .tidata.word    = $PROGBITS     ?AW .tidata.word;        .tibss.word     = $NOBITS       ?AW .tibss.word;        .tidata         = $PROGBITS     ?AW .tidata;        .tibss          = $NOBITS       ?AW .tibss;        .sidata         = $PROGBITS     ?AW .sidata;        .sibss          = $NOBITS       ?AW .sibss;};__tp_TEXT @ %TP_SYMBOL;__gp_DATA @ %GP_SYMBOL &__tp_TEXT;__ep_DATA @ %EP_SYMBOL;------------------------------------------------------------

リンク・ディレクティブでは、“#”で始まる行はコメント行です。


このリンク・ディレクティブでリンクすると、 各ファイルのセクションは、次のようにメモリに割り付けられます。

  • main.oの.sconstセクションは0x160番地に配置
  • main.o、sub.o、startup.oの.textセクションは1つにまとめられ、SCONSTに連続して配置
  • main.oの.sdataと.sbssセクション、startup.oの.bssセクションは1つにまとめられ、 外部ROM領域の0x100000番地に配置
  • main.oのtidataセクションは内蔵RAM領域の0x3ffc000番地に配置


なお、INTPOセクションとRESETセクションは、デバイス・ファイルで定義された割り込み用セクションなので、これらに対しては、リンク・ディレクティブに記述する必要はありません。
リンク時に、リンカが自動的にハンドラ・アドレスへ割り付けます。


期待したとおりになっているかどうかは、リンク時にリンク・マップを出力して確認できます。
リンク・マップは、リンカのオプション(-m)で出力します。

リンク・マップの例)
-------------------------------------------------------------------------------------
******** LINK EDITOR ALLOCATION MAP ********

OUTPUT INPUT VIRTUAL    SIZE    INPUT
SECTION   SECTION ADDRESS FILE

RESET 0x00000000 0x00000004
RESET 0x00000000 0x00000004 startup.o

SECURITY_ID 0x00000070 0x0000000a
SECURITY_ID 0x00000070 0x0000000a *(nil)*

INTP0 0x00000090 0x00000004
INTP0 0x00000090 0x00000004 main.o

.sconst 0x00000160 0x00000004
.sconst 0x00000160 0x00000004 main.o

.pro_epi_run 0x00000168 0x000001e0
.pro_epi_run 0x00000168 0x000001e0 callt.o(C:\Program Files\
NEC Electronics Tools\CA850\V3.10\lib850\r32\libc.a)

.text 0x00000348 0x000000ce
.text 0x00000348 0x0000007a startup.o
0x000003c2 0x00000002 *(align-hole)*
.text 0x000003c4 0x00000044 main.o
.text 0x00000408 0x0000050e sub.o

.data 0x00100000 0x0000000c
.data 0x00100000 0x0000000c startup.o

.sdata 0x0010000c 0x00000004
.sdata 0x0010000c 0x00000004 main.o

.sbss 0x00100010 0x00001004
.sbss 0x00100010 0x00000000 startup.o
.sbss 0x00100010 0x00001004 *(nil)*

.bss 0x00101014 0x00000200
.bss 0x00101014 0x00000200 startup.o

.tidata.word 0x03ffc000 0x00000034
.tidata.word 0x03ffc000 0x00000034 main.o
-------------------------------------------------------------------------------------

 

適用製品

V850用コンパイラパッケージ [CA850]
他にご質問がございましたら、リクエストを送信してください