Renesas Synergy™

FAQ 107190 : デバッグ中に ILLEGAL INSTRUCTION エラーがでます。

ILLEGAL INSTRUNCTIONは実際はユーザプログラムが暴走したことにより予期しない番地でブレークが発生したことを示しています。

ユーザプログラムが暴走する原因は、以下のことが考えられます。

    1. ユーザプログラムが実MCUのROM/RAMを超えた領域を使用している。

      ※M16C/65グループ(プログラムROM1が512Kバイト以上)使用時の注意事項
      40000h~7FFFFh番地に配置したプログラムを実行する場合、PRG2CレジスタのIRONビットが“1”である必要があります。
      以下FAQを参照にしてユーザプログラムでIRONビットを“1”へ設定してください。
      FAQ 107414

      なお、上記のようなプログラムをデバッグする場合、エミュレータ設定ダイアログボックスのMCU設定タブにある "IRON(000010Hのビット1)を1で使用"にチェックしている必要があります。

 

    1. ユーザプログラムダウンロード後にリセットコマンドを発行せずプログラムの実行を開始した。

 

    1. スタックポインタが適切な値に設定されていない。
      (スタックポインタが設定されていない。スタックポインタがRAM以外の領域を指している。など)

 

    1. ユーザスタック領域にE8/E8aが使用するスタックの空きがない。
      (E8/E8aが動作するために、スタック領域の空きが必要です。)

 

    1. 割り込みを使用しているにもかかわらずベクタ領域を設定していない。

 

  1. E8aが占有しているRAM領域をユーザプログラムが使用している(RAM領域を占有しないMCUもあります)。
    E8aエミュレータが占有する領域については、MCUグループ別の「E8a/E8エミュレータユーザーズマニュアル別冊」--「7.E8aエミュレータ使用上の注意事項」をご参照ください。
    「E8aエミュレータ ユーザーズマニュアル別冊」はここから ダウンロードできます。
    また、E8aが占有するRAM領域はデバッガ起動時の「エミュレータ設定」 ダイアログボックスのファームウェア配置タブで確認および変更ができます。

E8aでR8Cを使用している場合は、以下にもご注意ください。
Cコンパイラが生成するスタートアッププログラム(sect30.inc)では、 デフォルトで可変ベクタテーブルの定義が無効(.if 0)となっています。 この状態で割り込みを使用すると、意図しない番地へプログラムがジャンプし、 ILLEGAL INSTRUCTIONエラーが発生する場合があります。 可変ベクタを使用する割り込みを使用する場合は、ベクタテーブルの定義文を有効にしてください。

適用製品

E10A-USB
E8a
E10T-USB
E8
E200F
他にご質問がございましたら、リクエストを送信してください