A.1.3 -Xpreincludeオプションを使用して配置領域を変更する
-Xpreincludeオプションによって,Cソース・ファイルを変更せずに,ファイル内で宣言・定義したすべての変数を任意のセクションに配置させることが可能です。アクセス効率の良いセクションに配置させることでコード・サイズを削減することができます。
(1) | #pragma section指令を記述したヘッダ・ファイル(.h)を準備します。 |
例 | .sdata/.sbssセクションに配置させる場合[section.h] |
#pragma section gp_disp16
|
(2) | -Xpreincludeオプションによって,(1)で作成したヘッダ・ファイルをコンパイル単位の先頭にインクルードします。 |
例 | セクション指定したヘッダ・ファイル名がsection.hの場合 |
>ccrh main.c -Xpreinclude=section.h
|
main.cの先頭に,section.hがインクルードされているものとしてコンパイルします。
ただし,(1)で指定したセクションに変数が収まりきらない場合は,リンク時に以下エラーが出力されます。この場合は,Cソース・ファイル上で変数のセクションを変更してください。
E0562330 : Relocation size overflow : "ファイル"-"セクション"-"オフセット"
|
例 | 変数を.sdata23/.sbss23セクションに変更する場合 |
int a = 1; /*(1)で指定したセクションに配置する*/
int b; /*(1)で指定したセクションに配置する*/
#pragma section gp_disp23
int c = 1; /*.sdata23 セクションに配置する*/
int d; /*.sbss23セクションに配置する*/
#pragma section default
int e = 1; /*デフォルトの.data セクションに配置する*/
int f; /*デフォルトの.bss セクションに配置する*/
|