<コンパイル・オプション / マイコンオプション>
[指定形式]
プログラムセクションをPIC(位置独立コード)としてコード生成しません。
[詳細説明]
- | プログラムセクションをPIC(位置独立コード)としてコード生成します。 |
- | PICにおいては、関数呼び出しはすべてBSRまたはBRA命令を用いて行い、また関数のアドレスを取得するときはPCからの相対アドレスを用いるようにします。これによって、PICはリンク後に任意のアドレスに配置することができます。 |
[例]
- | 関数呼び出し (ただし、branch=32の場合) |
void func()
{
sub();
}
[-picなし]
_func:
MOV.L #_sub,R14
JMP R14
[-picあり]
_func:
MOV.L #_sub-L11,R14
L11:
BRA R14
|
void func1(void);
void (*f_ptr)(void);
void func2(void)
{
f_ptr = func1;
}
[-picなし]
_func2:
MOV.L #_f_ptr,R4
MOV.L #_func1,[R4]
RTS
[-picあり]
_func2:
MOV.L #_f_ptr,R4
L11:
MVFC PC,R14
ADD #_func1-L11,R14
MOV.L R14,[R4]
RTS
|
[備考]
- | C++またはEC++コンパイル時は、picオプションを選択できません。選択すると、警告としてW0511171メッセージを表示してpicの選択を無効とします。 |
- | PICである関数のアドレスを、静的初期化の初期化式に使用しないでください。エラー E0523026となります。 |
void pic_func1(void), pic_func2(int), pic_func3(int); /* PICになる */
void (*fptr1_for_pic) = pic_func1; /* PICアドレスを静的初期化で使用: エラー */
struct PIC_funcs{ int code; void (*fptr)(int); };
struct PIC_funcs pic_funcs[] = {
{ 2, pic_func2 }, /* PICアドレスを静的初期化で使用: エラー */
{ 3, pic_func3 }, /* PICアドレスを静的初期化で使用: エラー */
};
|
- | PIC機能を利用するアプリケーションプログラムのスタートアップを作成する際は、「スタートアップ」の章の「アプリケーションのスタートアップ」を参照ください。 |
- | PIC機能については、「スタートアップ」の章の「PIC/PID機能の利用」の項目も参照してください。 |