Renesas Synergy™

FAQ 1007962 : ep(エレメント・ポインタ)とは何ですか?

回答

アプリケーション内でグローバル宣言したデータ(変数)を、 V850マイクロコントローラにデフォルトでは内蔵されている RAM 領域へ配置し、 より高速な参照 (ロード、ストア) を実現するために用意されているポインタです。

グローバル宣言し、かつ、内蔵 RAM(推奨)に配置にするデータ (変数) は ep 相対で参照されます。
「ep と 1 命令」で参照することになりますが、その 1 命令が「sld / sst 命令」か 「ld / st 命令」かによってセクションの属性が分かれます。

「ep とsld / sst命令」で参照できるセクション

tidata 属性、tibss 属性、
tidata.byte 属性、tibss.byte 属性、tidata.word 属性、tibss.word 属性

「ep とld / st 命令」で参照できるセクション

sidata 属性、sibss 属性、sedata 属性、sebss 属性

ただしsedata 属性、sebss 属性は、内蔵 RAM ではなく、 ep 相対でアクセス可能な外部 RAM のセクション属性になります(推奨)。

一般的に内蔵 RAM の容量は少なく、多くのデータ (変数) を配置することはできませんが、 特に参照を速くしたいデータ (変数) を、上で示した領域に配置して 「ep と 1 命令」でアクセスできるようにすると、アプリケーションの速度の向上、 コード・サイズの縮小が見込めます。

リンク・ディレクティブのシンボル・ディレクティブで ep シンボルの生成を指示した場合、 リンカは使用するデバイスごとに用意されているデバイス・ファイルの情報を元に、 自動的に内蔵 RAM 領域の先頭に設定されます。

ep はアプリケーション内で1つだけ生成可能です。
複数生成はできません。

【 ep の設定 】

(シンボル・ディレクティブ内)
__ep_DATA @ %EP_SYMBOL;

(スタート・アップ・モジュール内)
mov #__ep_DATA, ep


上の例では、リンク・ディレクティブで ep シンボルを作成するように宣言します。
epシンボル名が "__ep_DATA " なので、リンカは内蔵 RAM の先頭アドレスを "__ep_DATA " にセットします。

この値を ep に設定するために、スタート・アップ・モジュール等で、変数 " ep " にこの "__ep_DATA" の値を代入する式 ( mov #__ep_DATA, ep) を記述することにより、 ep に正しくエレメント・ポインタの値が設定されます。

memo.gif
アプリケーションが外部 RAM はいっさい使用せず、内蔵 RAM だけを使用するような場合は、 gp シンボルを生成せず、ep シンボルだけを生成しても問題ありません。
ただし、ランタイム・ライブラリを使用している場合、ランタイム関数が gp 相対でデータ (変数)参照をしているので、必ず gp シンボルを生成する必要があります。

内蔵RAM以外にSIDATAセグメントを配置することが可能です。 

 

適用製品

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