セミホスティングのメカニズム
C-SPYエミュレートI/Oは、Arm Limitedで提供されるセミホスティングインターフェースと互換性があります。アプリケーションがセミホスティングコールを呼び出すと、実行がデバッガのブレークポイントで停止します。続いて、デバッガが呼び出しを処理し、ホストコンピュータ上で必要なすべてのアクションを行って実行を再開します。
使用可能なセミホスティングのメカニズムには、以下の3つがあります。
Cortex-Mの場合、インタフェースは
BKPT命令を使用してセミホスティングの呼び出しを実行します。他のArmコアの場合、32ビットモードでのセミホスティングの呼出しには、
SVC命令が使用されます。64ビットモードの場合、
HLT命令がセミホスティングの呼出しに使用されます。セミホスティングの代替となるIAR固有の機能である、SVCを使用するIARブレークポイントを使用します。
SVC経由でセミホスティングをサポートするには、デバッガがSupervisor Callベクタ上にセミホスティングのブレークポイントを設定して、SVCの呼び出しを検出する必要があります。アプリケーションでセミホスティング以外の目的にSVC呼び出しを使用する場合、このブレークポイントの処理によって、こうした呼び出しの度に重大なパフォーマンスへの影響が発生します。IARブレークポイントは、これを回避するひとつの方法です。セミホスティングの実行にSVC命令ではなく特殊な関数呼び出しを使用することにより、その特殊な関数上にセミホスティングのブレークポイントを設定できます。つまり、セミホスティングがSupervisor Callベクタの他の用法に干渉しなくなります。
注記
IARブレークポイントは、セミホスティング標準のIAR固有の拡張です。IAR以外のベンダからのツールチェーンによってビルドしたライブラリにアプリケーションをリンクして、IARブレークポイントを使用する場合、これらのライブラリのコードからのセミホスティング呼び出しは機能しません。