Everything

saddr領域利用(#pragma saddr)


saddr領域に割り当てる変数であることをコンパイラに示唆します。

[機能]

-

初期値あり変数はセクション.sdataへ配置します。

-

初期値なし変数はセクション.sbssへ配置します。

-

アドレス参照は,必ずnearポインタを返します。

-

#pragma saddrを指定した外部変数,および関数内static変数は,saddr領域に割り当てます。

-

__farキーワードを付加した変数であっても,警告なしで,__near指定したものとして扱います。

[効果]

-

saddr領域に対する命令は通常メモリに対する命令よりも短く,オブジェクト・コードが小さくなり,実行速度が向上します。

[方法]

-

変数の最初の宣言より前で#pragma saddrを宣言します。

#pragma saddr [(]変数名[,...][)]

[制限]

-

同一変数に対し複数の宣言があり,2度目以降の宣言に作用する位置に#pragma saddrを記述した場合,動作を保証しません。

-

他の#pragmaを指定すると,コンパイル・エラーとなります。

[使用例]

#pragma saddr saddr_var
extern int saddr_var;
 
void func(void)
{
        saddr_var = 0;
}

[備考]

-

キーワード__saddrと#pragma saddrの違いについて

-

__saddrキーワードは,__near/__farキーワードとの混在を許さずコンパイル・エラーとなります。

-

#pragma saddrは,__near/__farキーワードを付加した変数でも警告なしで__saddrを指定したものとして扱います。