アプリケーション内でグローバル宣言したデータ(変数)を,RH850に内蔵されているRAM領域へ配置し,より高速な参照(ロード,ストア)を実現するために用意されているポインタが「エレメント・ポインタ(ep)」です。
グローバル宣言し,かつ,内蔵RAMに配置するデータ(変数)はep相対で参照されます。
エレメント・ポインタ(ep)に設定するアドレス値は,エレメント・ポインタ・シンボル(epシンボル)の値をアドレス値として設定します。
- | epシンボルは,固定シンボル名“__ep_data”で扱います。 |
- | epシンボルは,スタートアップ・ルーチンで参照シンボル(.extern)として宣言してください。 |
- | epシンボルは,rlink内で外部定義シンボル(. public)を作成しアドレス値を決定します。 |
- | epシンボルの定義/参照に対する動作は以下のとおりです。 |
- | epシンボルが“.extern”宣言のみ存在している場合 |
rlinkが定義情報を作成し,自動でアドレス値を設定します。
定義されたアドレス値を使用します。
- | epシンボルが存在しない(使用されていない)場合 |
ep相対を参照するコードに対して,次のエラー・メッセージが出力されます。
Undefined external symbol "EP-symbol (__ep_data)" referenced in "FILE"
|
epシンボル値は,再配置属性がtdata,tdata4/5/7/8,tbss4/5/7/8,edata,ebss,edata23,およびebss23のセクションから以下の優先順位で決定します。
以下に,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(ゼロ)として設定します。