RAMパリティエラー発生箇所の特定

Kirinさん

現在、RL78での開発をしています。

単体動作でRAMパリティエラーが発生しています。
オンチップデバッグではRAMパリティエラーが発生しないみたいなのでオンチップデバッグによるチェックができません。

何処でRAMパリティエラーが発生しているか確認できる方法はあるのでしょうか?

RAMの初期化は出来ているはずなのですが・・・
  • Kirinさん

    解決致しました。
    スタック領域初期化関数にて
    初期化中に割り込みが発生していた為、おかしくなったようです。

    無事、解決しました。
    ありがとうございました。
  • yutyuさん

    無事解決してよかったですね。

    初期化中に割り込み関数に飛ぶなんて思いも寄りませんでしたし。
    hwinitの後だから、そういうこともあるんですね。
    スタックの初期化が終わるまではEIしちゃいけないというのが今回の教訓ですね^^
    デバッグコンプリート!
  • チョコさん

    _stkinitの中を確認していただいてありがとうございます。

    >その最初で「MOV [SP+3],#0」とやっているので,
    >Kirin様が懸念した問題はございません。

    ごめんなさい、先頭の1行見落としていました。

    でも、よくよく考えると、
    >その最初で「MOV [SP+3],#0」
    とやるべきなのは、hdwinitで方ですよね?!
    だって、hdwinitを先に通過するんですもの。

    ちなみに、hdwinitをCALLして、RETしたら1/2の確率でパリティエラーが発生しそうですけれども
    なぜ、hdwinitでは「MOV [SP+3],#0」してないんでしょうか?

    リセット初期値がRPERDIS=0なので、高頻度でチップが動作しない問題が発生しそうですけど、大丈夫なのかなぁ。
    まぁ、幸いな事にそんな現象に嵌ったことはないので無用な心配かもしれませんけども。

  • スタッフのチョコです。

    Kirin様の「Re:Re:Re9:RAMパリティエラー発生箇所の特定」にコメントさせていただきます。

    結論として問題はございません。詳細は以下をご参照ください。


    > なぜ、hdwinitでは「MOV [SP+3]\,#0」してないんでしょうか?

    「hdwinit」はユーザが内蔵周辺の初期化を記述したC記述のプログラムです。そのような記述はできません。



    > リセット初期値がRPERDIS=0なので、高頻度でチップが動作しない問題が発生しそうですけど、大丈夫なのかなぁ。

    大丈夫です。基本的に,RET命令ではSP+3番地は読みません。読み出すのはSP,SP+1,SP+2のセーブされたアドレスだけです。

    _stkinitでSP+3に書き込んでいたのは,単にCALL命令ではそこに何も書き込まれないので,そこにあえて書き込むことで,スタック領域をすべてクリアするためのようです。



  • チョコさん

    ありがとうございます。

    > _stkinitでSP+3に書き込んでいたのは,
    > 単にCALL命令ではそこに何も書き込まれないので,
    > そこにあえて書き込むことで,スタック領域をすべてクリアするためのようです。

    明白了!理由が分かってスッキリしました^^

    これで、パリティエラーが出たときに確認すべきポイントが絞れるようになりました。
  • すみません。初心者なので教えてください。

    >MOV A\,RESF
    >CMP0 A
    >SKZ
    >BR $$ ;ここにブレークポイント設定

    こちらのコードをcstart.asmに挿入しましたが、下記のエラーとなってしまいます。

    cstart.asm(51):E0551204:オペランドの記述に誤りがあります。
    cstart.asm(51):E0551200:アセンブリ・ソースの記述に誤りがあります。
    cstart.asm(54):E0551207:"$"は記述できません。
    ------ ビルド終了(エラー:3個, 警告:1個)(VCD-30, DefaultBuild) ------

    そのまま貼り付けてはいけないのでしょうか?

    以上、よろしくお願いいたします。
  • Yandooさん
    以下の様にコードを直したらどうでしょう?

    MOV A,RESF
    CMP0 A
    SKZ
    LOOP:
    BR $LOOP

  • Kirinさん

    早速の返信ありがとうございます。
    おかげさまで動くようになりました。

    こちらでのアセンブラソースの記述方式に何かルールがあるのでしょうか?
    それともプログラマなら常識というような類なのでしょうか?
  • Yandooさん
    動いてよかったですね。

    コンパイラの違いで、ブランチ先ラベルなど若干記述方法に違いがあるようです。ふだんからアセンブラを使っていないとなかなか難しいと思います。
    ただ、「\,」は昔、掲示板の仕様変更の際に、カンマの前に勝手にバックスラッシュが追加されてしまったため
    かふぇルネで「\,」が出てきたら「,」と読み替えてください。

  • Kirinさん

    ありがとうございました。
    勉強になりました。