A.2.2 離れた関数をコールする

Cコンパイラは,関数呼び出しにjarl命令を使用します。

しかし,jarl命令は22ビット・ディスプレースメントであるため,プログラム配置によってはアドレス解決ができず,リンク時にエラーとなります。

上記エラーを解決する方法として,まずは-Xcall_jump=32を指定していただくことで,jarl32,およびjr32 命令を生成することができます。

-Xcall_jump=22オプションを指定されている場合は,C コンパイラの-Xfar_jump オプションで,関数呼び出しを ディスプレースメント幅に依存しない関数呼び出しにすることができます。

far jumpを指定した関数の呼び出しに対しては,jarl命令ではなく,jarl32,およびjr32命令が出力されます。

-Xfar_jumpオプションで指定するファイルには,1行に1関数を記述していきます。記述する名前は,C言語関数名の先頭に“_(アンダースコア)”を付けた名前になります。

-Xfar_jumpオプションで指定するファイル

_func_led
_func_beep
_func_motor
    :
_func_switch

 

“_関数名”のかわりに次のように記述すると,すべての関数をfar jump呼び出しの対象にします。

{all_function}