RX63N176pin マイコンプログラム 起動直後にプログラムが停止

質問失礼致します。

 

RX63N176pinを使用したマイコンプログラムにつきまして、

発生頻度は稀(1/1000回程度)ですが、起動直後にプログラム停止してしまう事象が発生しています。

 

発生頻度が低く、プログラム停止する詳細箇所については把握できていませんが、

異常時の製品挙動より、電源投入→レジスタ初期化→ 割込み許可→SCI及びTPUが動作した後でメイン処理へ移行した直後、

もしくはメイン処理移行前のどこかで停止しているものと推測しています。

 

また、基板上には外付けのWD機能付きリセットICが実装されており、

プログラム停止時はマイコンに対しHWリセットを掛ける仕組みとなっておりますが、

HWリセットが掛かっても症状はすぐには改善されず、

プログラム停止→HWリセット→起動→プログラム停止→HWリセット→起動→・・・を繰り返し、数分経つと何事もなかったかのように復帰します。

 

毎回同じ箇所でシーケンスが止まっている事から、ソフトウェア起因の可能性が高いと思われるのですが、

発生頻度が稀であることからハードウェア起因も疑っております。

 

推察される原因等ございましたらご教示頂きたく存じます。

Parents
  • 電源電圧低下によるリセットじゃ無いかな。

    >毎回同じ箇所でシーケンスが止まっている事から

     そのプラグラムで、電流が大幅に変化して電圧降下を起こすような事はしていませんか。
  • >リカルドさん
    ご回答頂きありがとうございます。
    電源電圧に関しましては、電源投入時(本事象が発生するタイミング)に
    電圧降下や不定な電位となっていないか計測器等で確認しましたが、
    特に目立った変位は見られず問題ないと考えております。
  • リセット信号が不用意に掛かって無いか、リセット信号をオシロで観察したらどうですか。
    オシロはトリガーを1回だけ受け付けるモードにします。

    >電源投入→レジスタ初期化→ 割込み許可→SCI及びTPU

     予定外の割り込みが入って、予定外のアドレスに飛んでいるのかも知れない。
     割り込みを不許可にしてみたらどうですか。
Reply
  • リセット信号が不用意に掛かって無いか、リセット信号をオシロで観察したらどうですか。
    オシロはトリガーを1回だけ受け付けるモードにします。

    >電源投入→レジスタ初期化→ 割込み許可→SCI及びTPU

     予定外の割り込みが入って、予定外のアドレスに飛んでいるのかも知れない。
     割り込みを不許可にしてみたらどうですか。
Children
  • >リカルド様

    オシロで観察しましたが、
    リセット信号は正常に動作しておりました。

    割込み処理については、
    不可解な動作をしておりご意見を伺いたいです。

    ↓↓

    【通常時】
    電源投入→レジスタ初期化→割り込み許可(PSW)→メインループ(WDパルス出力)
    割り込み許可後(PSW_I = 1)、
    2ms毎(TPUコンペアマッチ)、10ms毎(CMTコンペアマッチ)の割込処理が実行される

    【異常時】
    電源投入→レジスタ初期化→割り込み許可(PSW_I = 1)でプログラム停止(メインループに入らない)
    割り込み許可後(PSW_I = 1)、
    2ms毎(TPUコンペアマッチ)の割込処理は実行が、
    10ms毎(CMTコンペアマッチ)の割込処理は実行されない

    アドバイス頂けますと幸いです。
  • >【異常時】
    > 電源投入→レジスタ初期化→割り込み許可(PSW_I = 1)でプログラム停止(メインループに入らない)
    >割り込み許可後(PSW_I = 1)、
    >2ms毎(TPUコンペアマッチ)の割込処理は実行が、
    >10ms毎(CMTコンペアマッチ)の割込処理は実行されない

     TPUソフトは動くがCMTソフトが動かないと言う事でしょうか。
     CMTの割り込みを止めて、確かめたらどうでしょう。

     両方とも周期的に入って来る割り込みなら、TPUの5回の割り込みに1回の割合でCMTソフトを実行する方法も有ります。

     割り込み処理は、瞬間的に終わるようなプログラムになっていますか。

     こんな事故はどうでしょう。
     割り込み処理の中でフラグを見るループ処理がある。フラグが変化しないためにそこで止まり、ウォッチドッグが働く。
     この場合は、ループ回数に制限を設けます。
  • リカルド様
    ご回答頂きありがとうございます。

    >TPUソフトは動くがCMTソフトが動かないと言う事でしょうか。
    >CMTの割り込みを止めて、確かめたらどうでしょう。
    →認識頂いている通りです。
     TPUの割込みは2ms周期で入りますが、メインとCMT割込みが入っておりません。
     メインからリセットICへWDパルスを出力しておりますので、
     結果的にリセット設定時間約1秒後にリセットする、といった動作です。

    >割り込み処理は、瞬間的に終わるようなプログラムになっていますか。
    →TPUとCMTどちらも瞬間的に終わるようなプログラムではありません。
     この現象が発生するorしないパターンがあるのは、
     ノイズ等の影響でビット反転が発生するからなのでしょうか。

    >割り込み処理の中でフラグを見るループ処理がある。
     フラグが変化しないためにそこで止まり、ウォッチドッグが働く。
    →メインとCMT割込みには入らない一方で、
     TPU割込みはリセットがかかるまで2ms周期で実行されております。
     上記の想定に当てはめる事ができるのでしょうか。

    宜しくお願い致します。
  • 何が原因か分らないプログラムのデバッグは、余計な物を外してプログラムを小さくします。
     コメントアウトなどにより、余計な関数を呼び出さないようにします。
     小さく絞れば原因を特定し易くなります。

     割り込みと関係していると想像したなら、割り込み処理を止める事です。
     今回の場合だと、TPUとCMTの両方を止める事です。

     TPUの割り込み処理が長すぎると睨んだなら、割り込み処理の中にWDTをリセットするプログラムを入れてみます。

    >割り込み処理は、瞬間的に終わるようなプログラムになっていますか。
    →TPUとCMTどちらも瞬間的に終わるようなプログラムではありません。

     割り込み処理はメイン処理を邪魔しないように短時間で終わらないと行けません。
     プログラムの構成によっては、例外も有るだろうけど。
     割り込み処理に時間が掛かる事が分っているプログラムなら、全体のプログラム構成に問題が無いか検討します。

     今回のトラブルは、ソフトだと思います。
     ハードで有りそうな一般的なトラブル。
    ・3.3Vと5Vのロジックが混在しているため、レベル変換の問題
    ・TTLレベル部品を使ったときの問題。昔の基板と現代の基板を混ぜると、ロジック規格の違いによりトラブルが起きる事が有る。
  • リカルド様

    ご教示頂きありがとうございます。
    一先ずTPU、CMTを止めて検証をしてみたいと思います。

    >割り込み処理はメイン処理を邪魔しないように短時間で終わらないと行けません。
    >プログラムの構成によっては、例外も有るだろうけど。
    >割り込み処理に時間が掛かる事が分っているプログラムなら、
    >全体のプログラム構成に問題が無いか検討します。

    仰る通りだと思いますので、
    その後は割込み処理時間について調査し、
    全体のプログラムへのネガを確認したいと思います。

    アドバイス頂き大変感謝致します。
  • リカルド様

    度々申し訳ございません。
    もう一点ご教示下さい。

    今回の件は、ソフトが原因の可能性があるとご教示頂きましたが、
    ソフトウェアが原因だと100%の確率で発生しうると考えております。

    現状は1/1000回の頻度で発生しておりますので、
    ソフトが原因だとしたら100%ではなく稀に発生する事象として説明がつくのでしょうか。

    宜しくお願い致します。