8.4.2 エレメント・ポインタ(ep)

アプリケーション内でグローバル宣言したデータ(変数)を,RH850に内蔵されているRAM領域へ配置し,より高速な参照(ロード,ストア)を実現するために用意されているポインタが「エレメント・ポインタ(ep)」です。

グローバル宣言し,かつ,内蔵RAMに配置するデータ(変数)はep相対で参照されます。

(1)

エレメント・ポインタ(ep)の設定

エレメント・ポインタ(ep)に設定するアドレス値は,エレメント・ポインタ・シンボル(epシンボル)の値をアドレス値として設定します。

-

epシンボルは,固定シンボル名“__ep_data”で扱います。

-

epシンボルは,スタートアップ・ルーチンで参照シンボル(.extern)として宣言してください。

-

epシンボルは,rlink内で外部定義シンボル(. public)を作成しアドレス値を決定します。

-

epシンボルの定義/参照に対する動作は以下のとおりです。

-

epシンボルが“.extern”宣言のみ存在している場合

rlinkが定義情報を作成し,自動でアドレス値を設定します。

-

epシンボルが定義されている場合

定義されたアドレス値を使用します。

-

epシンボルが存在しない(使用されていない)場合

ep相対を参照するコードに対して,次のエラー・メッセージが出力されます。

Undefined external symbol "EP-symbol (__ep_data)" referenced in "FILE"

(2)

epシンボル値の決定規則

epシンボル値は,再配置属性がtdata,tdata4/5/7/8,tbss4/5/7/8,edata,ebss,edata23,およびebss23のセクションから以下の優先順位で決定します。

図 8.2

エレメント・ポインタ値の決定規則

 

以下に,epシンボル値の決定例を示します。

(a)

再配置属性がtdata,tdata4/5/7/8,およびtbss4/5/7/8のセクションが存在する場合

tdata→tdata4,またはtbss4→・・・→tdata8, またはtbss8の優先順位で,存在するセクションの開始アドレスをepシンボルに設定します。

(b)

再配置属性がedata,またはebssのセクションが存在する場合

edata,またはebssセクションに対して“1番小さいアドレスに配置されたセクションの開始アドレス”と“1番大きいアドレスに配置されたセクションの終了アドレス”の真ん中(2の倍数値,奇数の場合は最初の2の倍数値)をepシンボルのアドレス値として設定します。

<1>

アドレスの小さい方から,edata,ebssセクションの順で配置されている場合

<2>

アドレスの小さい方から,ebss,edataセクションの順で配置されている場合

<3>

アドレスの小さい方から,edata,ebssセクションの順で配置し,edata,ebssセクションの間に対象外のセクションが存在している場合

(c)

再配置属性がedata23,またはebss23のセクションが存在する場合

edata23,またはebss23セクションに対して“1番小さいアドレスに配置されたセクションの開始アドレス”と“1番大きいアドレスに配置されたセクションの終了アドレス”の真ん中(2の倍数値,奇数の場合は最初の2の倍数値)をepシンボルのアドレス値として設定します。

以下に,epシンボル値の決定例を示します。

<1>

アドレスの小さい方から,edata23,ebss23セクションの順で配置されている場合

<2>

アドレスの小さい方から,ebss23,edata23セクションの順で配置されている場合

<3>

アドレスの小さい方から,edata23,ebss23セクションの順で配置し,edata23,ebss23セクションの間に対象外のセクションが存在している場合

(d)

再配置属性がtdata,tdata4/5/7/8,tbss4/5/7/8,edata,ebss,edata23,およびebss23セクションが存在しない場合

tdata,tdata4/5/7/8,tbss4/5/7/8,edata,ebss,edata23,およびebss23セクションが存在しない場合は,epシンボルのアドレス値を0(ゼロ)として設定します。