ホーム > ユー ザーサポート > FAQ カバレッジマスターwinAMS

FAQ / カバレッジマスターwinAMS

マイコン固有の問題

114-04 : マイコンが ARM Cortex系で、テスト対象関数が関数ポインタ経由でコー ルする子関数に対してテストCSVで関数名を設定して実行した場合に、シミュレーションが正しく実行できません。

【質問】
マイコンが ARM Cortex系の場合で、テスト対象関数から関数ポインタ経由でコールされる子関数に対して、テストCSVファイルに関数名を設定しています。

シミュレーションを実行すると、設定した子関数がコールされますが、子関数内でシミュレーションエラーが発生したり、 子関数からテスト対象関数に戻らず、シミュレーションが正しく実行できません。どのような原因が考えられるでしょうか?

【回答】
子関数がBLX/BX命令でコールされている場合は、インターワーキングが発生します。インターワーキングが発生する場 合は、実行する関数のモード(ARM/Thumb)に応じて、ジャンプ先の最下位ビットを正しく設定する必要がありま す。

ARMモードでコンパイルされている関数をコールする場合は、最下位ビットを0、Thumbコードでコンパイルされて いる関数をコールする場合は、最下位ビットを1に設定してください。

※プログラムカウンタに設定される値は、最下位ビットが0にマスクされます。


■ソースコードイメージ

// source1.c (ARM モードでコンパイルされていると仮定)
int add(int num1, int num2) {
   return ( num1 + num2 );
}

// source2.c (Thumb モードでコンパイルされていると仮定)
int sub(int num1, int num2) {
   return ( num1 - num2 );
}

int (*pfunc[2]) (int num1, int num2);

int test_func(int num1, int num2){

   int ret;

   ret = 0;

   ret = ret + (*pfunc[0])(num1, num2);

   ret = ret + (*pfunc[1])(num1, num2);

   return ret;
}

■テストデータイメージ
#COMMENT|@num1|@num2|pfunc[0]| pfunc[1]|@@test_func
--------+-----+-----+--------+---------+-----------
| 1| 1| add| sub+1| 2


(参考:ARM社WEBページ) 5.3.1. Thumb 状態の関数へのポインタ


関連サポート情報検索

【サポート情報サイト内Google検索】

検索キーワード: Cortex | インターワーク

他のキーワード検索


参考情報・リンク