Illegal Codeについて

非常に初歩的な質問になりますが、どなたかご教示ください。

SH7216のマイコンを使用しています。

・Illegal Codeという例外はどのような場合に発生するのでしょうか?

(ベクタテーブル4に元から定義されているようでした)

Parents
  • わわいです

    そこらへんはCPUのマニュアルをみれば書いてあるかと。

    簡単に言えば、未定義の命令を実行した場合に発動される例外ですね。

    CPUが暴走した場合なんかによくお目にかかれます

  • わわいさん、ありがとうございます。

    SH7216グループのマニュアルでIllegal Codeで検索しても出てこなかったのですが

    マニュアルに「一般不当命令」というものなら載っていたのでそれでしょうか?

    この例外が発生するようになったのは、マイコンでシリアル通信をさせようとしたときです。

    調歩同期のシリアル通信で、受信データフル割り込み(RXI割り込み)を有効にして、その割り込み処理にて

    1Byteずつ受信する(レシーブデータレジスタからデータ読出し)という処理を行っています。

    他にも、コンペアマッチタイマを二種類有効にしていますが、

    RXI割り込みを優先度最高にしています。

    この状況で本例外が起きる要因として、

    何か思いつくものがありましたらご教示頂けると幸いです。

  • わわいです

    そういうトラブルが有るなら、まずそれを聞きましょう。こんな二度手間をかけることはなくなります。

    これが出るのは、ジャンプ先が間違ってる場合です

    割り込みでそれが出るのであれば、
    割り込みのアドレスは合ってるのか、割り込み番号はあってるのか、ベクタテーブルのアドレス設定は正常に行われているのか、をチェックしましょう

    コードを見て合ってる、ってのではダメです

    実際に初期化が終わったときにブレークポイントを設定して実際にレジスタの値をチェック、メモリ内容を読み出して想定された値になってるのか、をチェックしましょう。

  • 失礼しました。

    ちなみに、シリアルの受信処理は、連続で複数バイト受信させたりすることも

    (毎回ではないですが)できています。

    受信割り込みの関数自体はコールされています。

    ただ、何度か受信処理を実行させていると他のコンペアマッチタイマ割り込みも受信割り込みも

    発生しなくなりIllegalCodeの例外処理にとんできているようでした。

Reply
  • 失礼しました。

    ちなみに、シリアルの受信処理は、連続で複数バイト受信させたりすることも

    (毎回ではないですが)できています。

    受信割り込みの関数自体はコールされています。

    ただ、何度か受信処理を実行させていると他のコンペアマッチタイマ割り込みも受信割り込みも

    発生しなくなりIllegalCodeの例外処理にとんできているようでした。

Children
  • わわいです

    ならあとは、どこかで配列の範囲外アクセスなどで、異常アクセスが発生している、ってことですね。

    どこかで書き換えてはいけないところが書き換わってます

    こればっかしは赤の他人がどーこー言っても始まりませんので、デバッグを頑張りましょう