RL78のソフトリセット

こんにちは、SANSと申します。

 

RL78/L1Cを使って開発を進めていますが、起動時にリセットがかかってしまいmain()に戻る→少し処理が進んでまたmain()に戻るというループする挙動をします。

H/Wに問題はないようです(問題ないというのは推測ですが、少なくともVDDは安定しています)。

このようにソフト的にリセットが掛けられてしまう状況って何がありますか。

何でも良いので考えられる要因が思い当れば列挙して頂きたく。

ちなみにWDTはOFFにしています。

 

曖昧な質問であることは承知していますが、宜しくお願いします。

  • > 何でも良いので考えられる要因が思い当れば列挙して頂きたく。
    >
    > ちなみにWDTはOFFにしています。

    WDTがONになってるのでは
  • リセット要因は確認されてますか?
  • わわいです
    一番よくあるのは、どこかでポインタの扱いを間違っていて、コードが暴走して、たまたまリセットエントリから実行してしまってる、というのがあります。

    > H/Wに問題はないようです
    何かをデバッグする、という場面において、
    XXXのはず、とか、XXXはこれだから、という言葉が出てくると、大抵そこがその不具合の原因です。

    #1割2割ならともかく、半数以上がそこが原因となるとねえw
  • CS+からWDTをOFFに設定しています。
    それにもかかわらずONと設定されることってあるんでしょうか。
  • いえ、特定できていません。
  • ポインタ関係ですね。見直してみます。
    >何かをデバッグする、という場面において、XXXのはず、とか、XXXはこれだから、という言葉が出てくると、大抵そこがその不具合の原因です。
    もちろんこの固定概念が危険であることは承知しています。HWからももう一度探ってみます。。。
  • SANSさん NAKAといいます。
    fujita nozomu先生が確認して欲しいと言われているのは、RESF(リセット・コントロール・フラグ・レジスタ)を確認してみたら?ということではないでしょうか?WDTなのか?不正命令なのか?RAMパリティエラーなのか?不正メモリアクセスなのか?LVDなのか?とかの状態が残っていると思います。RL78/L1Cにはないのでしょうか?
  • 回答の意図を読み取れませんでした、すみません。
    RESFは確認済みで、特にフラグは立っていませんでいた。
    仕様書によるとフラグが立っていないときは外部リセットと書いていますが、これは何を指すのでしょうか。
  • はじめまして、Hosです。

    外部リセットはRESET端子に信号を入力してCPUをリセットすることを指します。
    RESET端子の信号を確認してみましょう。
    ハードウェアマニュアルの24章に詳しい記載がありますね。

    また、1点気になったのですがSANSさんがRESFを確認する前のタイミングで、すでにRESFをクリアしていたのでALL 0に見えているといったことはないですか。
    ハードウェアマニュアルでは「RESFレジスタのデータを読み出すことにより,TRAP, WDTRF, RPERF, IAWRF, LVIRFフラグはクリアされます。」とあります。
    コード生成でリセット要因確認にチェックを入れていると、R_CGC_Get_ResetSourceで読み込んでしまっていたりします。
  • > CS+からWDTをOFFに設定しています。
    > それにもかかわらずONと設定されることってあるんでしょうか。

    ・設定間違い
    ・ツールの不具合
    等フツーに可能性として考えられるので、上のような思い込みは排除すべきでしょう。確認すべきは「自分が期待する結果となる様設定がされているか」ではなくて「自分が期待する結果となっているか」の方です。
    具体的には
    ・生成された HEX ファイル中のオプション・バイト
    ・デバガにコードを読み込んだ際のメモリダンプ中のオプション・バイト
    辺りを確認することとなります。