デフォルトの配置セクションは,次のとおりになります
配置する領域(セクション)を変更するには,#pragma section指令で属性指定文字を指定します。
属性指定文字と生成されるセクションの関係は次のとおりです。
|
|
|
|
|
|
r0_disp16
|
あり
|
.zdata
|
可
|
r0
|
ld/st 1命令
|
なし
|
.zbss
|
可
|
r0
|
ld/st 1命令
|
r0_disp23
|
あり
|
.zdata23
|
可
|
r0
|
ld23/st23 1命令
|
なし
|
.zbss23
|
可
|
r0
|
ld23/st23 1命令
|
r0_disp32
|
あり
|
.data
|
可
|
r0
|
movhi+ld/st 2命令
|
なし
|
.bss
|
可
|
r0
|
movhi+ld/st 2命令
|
ep_auto
|
あり/なし
|
.tdata4/.tdata5/.tdata7/.tdata8から自動選択
|
不可
|
ep
|
sld/sst 1命令
|
ep_disp4
|
あり
|
.tdata4
|
可
|
ep
|
sld/sst 1命令
|
なし
|
.tbss4
|
可
|
ep
|
sld/sst 1命令
|
ep_disp5
|
あり
|
.tdata5
|
可
|
ep
|
sld/sst 1命令
|
なし
|
.tbss5
|
可
|
ep
|
sld/sst 1命令
|
ep_disp7
|
あり
|
.tdata7
|
可
|
ep
|
sld/sst 1命令
|
なし
|
.tbss7
|
可
|
ep
|
sld/sst 1命令
|
ep_disp8
|
あり
|
.tdata8
|
可
|
ep
|
sld/sst 1命令
|
なし
|
.tbss8
|
可
|
ep
|
sld/sst 1命令
|
ep_disp16
|
あり
|
.edata
|
可
|
ep
|
ld/st 1命令
|
なし
|
.ebss
|
可
|
ep
|
ld/st 1命令
|
ep_disp23
|
あり
|
.edata23
|
可
|
ep
|
ld23/st23 1命令
|
なし
|
.ebss23
|
可
|
ep
|
ld23/st23 1命令
|
gp_disp16
|
あり
|
.sdata
|
可
|
gp
|
ld/st 1命令
|
なし
|
.sbss
|
可
|
gp
|
ld/st 1命令
|
gp_disp23
|
あり
|
.sdata23
|
可
|
gp
|
ld23/st23 1命令
|
なし
|
.sbss23
|
可
|
gp
|
ld23/st23 1命令
|
const
|
あり
|
.const
|
可
|
r0
|
movhi+ld/st 2命令
|
zconst
|
あり
|
.zconst
|
可
|
r0
|
ld/st 1命令
|
zconst23
|
あり
|
.zconst23
|
可
|
r0
|
ld23/st23 1命令
|
default
|
これ以降,#pragma section指定がなかったものとみなし,デフォルトの配置を行います。
|
#pragma section gp_disp16 "mysdata"
int a = 1; /*mysdata.sdataセクションに配置する*/
int b; /*mysdata.sbssセクションに配置する*/
#pragma section default
|
なお,#pragma section指令を使った変数に別ファイル(参照ファイル)の関数から参照する場合には,参照ファイルにも#pragma section指令を記述し,該当変数をextern宣言する必要があります。
定義と宣言で指定が異なり,指定したセクション属性ではアクセスできない場合に,以下のエラーを出力します。
E0562330 : Relocation size overflow : "ファイル"-"セクション"-"オフセット"
|
#pragma section zconst
const unsigned char table_data[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
/*.zconstセクションに配置する*/
#pragma section default
|
#pragma section zconst
extern const unsigned char table_data[]; /*.zconstセクションに配置する*/
#pragma section default
|
なお, SHファミリ用コンパイラのCソース移植性を考慮して,以下のような表記も記述可能です。
#pragma section mydata
int a = 1; /*mydata.dataセクションに配置する*/
int b; /*mydata.bssセクションに配置する*/
#pragma section default
|