C-RUN チェックされないコード(境界チェック)
テクニカル・ノート 93670
アーキテクチャ:
ARM
コンポーネント:
debugger
更新日:
2018/09/04 7:21
はじめに
アプリケーション全体で境界チェックを有効化できない場合があります(アプリケーションの一部に外部でビルドされたライブラリが含まれている場合や、アプリケーションの一部がアセンブラで記述されている場合など)。この場合、C-RUNを実行するとエラーが発生します。
アクション
未チェックのコードへのインタフェースを宣言するヘッダファイルの前後などで、#pragma default_no_boundsを使用すると、一連の関数全体に#pragma no_boundsを適用できます。これは以下のようになります。
#pragma default_no_bounds=on
#include "XXXX_RTOS.h" /* no pointer bounds are passed to functions declared for the XXXX_RTOS */
#pragma default_no_bounds=off
別の解決方法(CMSISを使用する場合)
C-RUNが有効なコードとC-RUNが有効でないコードとの間に位置するソースを記述できます。IAR Embedded Workbench for ARMのインストールファイルには、以下のファイルが用意されています。
arm\src\lib\crun\cmsis_dsplib.as.c
このファイルをCMSISのプロジェクトに追加してください。このファイルは、--runtime_checking boundsオプションを指定してコンパイルする必要があります。すなわち、チェックオプション(Instrumentation) > ポインタ変数の境界をチェック(Track pointer bounds) > アクセスをチェック(Check accesses)を選択してください(少なくともcmsis_dsplib.as.cに対してこのオプションを指定する必要があります)。
全ての製品名は、それぞれの所有者の商標または登録商標です。