A.1.2.1 #pragma section指令を使用して配置領域を変更する

配置する領域(セクション)を変更するには,#pragma section指令で属性指定文字を指定します。

 

#pragma section指令記述

#pragma section gp_disp16 "mysdata"
int a = 1;              /*mysdata.sdataセクションに配置する*/
int b;                  /*mysdata.sbssセクションに配置する*/
#pragma section default

 

#pragma section指令の詳細な使用方法は,「4.2.6.1 関数とデータのセクション割り当て」を参照してください。

 

なお,#pragma section指令を使った変数を別のソース・ファイルの関数から参照する場合には,参照する側のファイルで,該当する変数を同じ#pragma section指令付きでextern宣言する必要があります。

定義と宣言で指定が異なり,指定したセクション属性ではアクセスできない場合に,以下のエラーを出力します。

E0562330 : Relocation size overflow : "ファイル"-"セクション"-"オフセット"

 

例 1.

変数を定義しているファイル

#pragma section zconst
const unsigned char table_data[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
                                                /*.zconstセクションに配置する*/
#pragma section default

 

例 2.

変数を参照するファイル

#pragma section zconst
extern  const unsigned char  table_data[];      /*.zconstセクションに配置する*/
#pragma section default

 

なお, SHファミリ用コンパイラのCソース移植性を考慮して,以下のような表記も記述可能です。

#pragma section指令記述

#pragma section mydata
int a = 1;              /*mydata.dataセクションに配置する*/
int b;                  /*mydata.bssセクションに配置する*/
#pragma section default