よくある質問(FAQ)

【カバレッジマスターゼネラル】「Invalid Operation code found [code = 16] (pc=…)」が発生しました。

シミュレーションエラーの回避策について

質問

【カバレッジマスターゼネラル 固有】
シミュレーション実行中に、下記のエラーが発生しました。発生原因 及び回避策を教えてください。

Invalid Operation code found [code = 16] (pc=a0000000)
 又は
Invalid Operation code found [code = 16] (pc=00000000)

回答

■「Invalid Operation code found [code = 16] (pc=a0000000)」エラーについて

スタートアップコマンドファイル (SS_STARTUP.txt) の設定内容が原因です。詳細については 下記の画面キャプチャ をご覧ください。
■回避策
「@reset」という行があればこれが原因です。この行をコメントアウト、もしくは削除してください。

■「Invalid Operation code found [code = 16] (pc=00000000)」エラーについて

下記の原因 (2つ)が考えられます。

(1) テスト対象関数が割り込みハンドラとしてビルドされている。

カバレッジマスターは割り込みハンドラをテスト対象関数にすることができません。通常の関数として再ビルドしてください。
CasePlayer2内蔵のゼネラル用コンパイラは、ソースファイル上に「#pragma interrupt...」という行があると、それ以降に定義された関数が (関数名にかかわりなく) 全て割り込みハンドラになるという仕様ですので注意が必要です。

下記の場合「#pragma interrupt test」の行がコメントアウトされているにも関わらず、test()は割り込みハンドラになります。「#pragma interrupt func」の行もコメントアウトする必要があります。

■ 修正前の記述
#pragma interrupt func
void func(void)
{
  ...
}

//#pragma interrupt test
void test(void)
{
  ...
}

■ 修正後の記述 (回避策)
//#pragma interrupt func
void func(void)
{
  ...
}

//#pragma interrupt test
void test(void)
{
  ...
}

(2) テスト対象関数からライブラリ関数が呼び出されている。

「カバレッジマスターゼネラル」ではライブラリ関数を使用することができません。ライブラリ関数を呼び出す箇所は、「0番地ジャンプ」の命令になります。CasePlayer2によるゼネラルコード生成時に 下記のような警告が出ていたら、これが原因です。

■ゼネラルコード生成時の警告メッセージ
Generalコードのオブジェクトを生成します...
%XLNKV-W: Undefined symbol "_stdlib" referenced, at location "40007a58h".
   in "test" unit, "C_test" section

■回避策
呼び出されているライブラリ関数の「ダミー関数」を作成することによって回避します。
「ダミー関数」は空関数で問題ありません。戻り値の型、引数の数と型はライブラリ関数の実体に合わせてください。