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

Kirinさん

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

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

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

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

    >ステップ実行を実行したのですが
    >ブレイクポイントを設定したのにもかかわらずブレイクせず、
    >「_stkinit」内まで進んでしまいます。
    >「手のひらマーク」が表示をさせたのですが・・・

    ソフトブレークだとブレークポイントを設定した命令で止まりますけれども
    ハードウェアブレークの場合3命令くらい滑る(余分に実行する)仕様のようです。

    ソフトブレークとハードブレークでアイコンの形がちょっと違います。
    ソフトブレークは「手のひら」だけ
    ハードブレークは「手のひらに緑色のICのマークが付く」表示になります。
    よーーく見てみてください。
    左クリックではなく、右クリックにするとハードかソフトブレークかを選ぶこともできます。


    >PUSH AX ;追加
    >PUSH AX ;追加
    >POP AX ;追加
    >POP AX ;追加
    >MOVW HL,#LOWW _@STEND ;HL <- stack end address
    >CALL !!_stkinit

    これの意味は、
    CALL命令は、呼び出し元のアドレスをスタックに退避しますけれども、
    アドレスは3バイト長なので、消費したスタックの4バイトのうち1バイトが使われていません(SP-1のアドレスが初期化されていない)。
    そのため、RETした時に初期化されていないスタックの1バイトをリードすることでRAMパリティが発生してるのではなかと想像しています。


    >あとは、stkinitに渡すHLの値が妥当な値かも確認して
    >おいたほうがいいですね。余計なところまで初期化さ
    >れて、しまうと大変なので。

    stkinitは現在のSPからHLに渡したアドレスの範囲を初期化するので、HLに変な値が入っているとSFR領域まで初期化されたり
    逆にスタック領域が狭すぎると、スタックが完全に初期化されないため
    のちのちCALL/RETした際に(前述の)SP-1のアドレス未初期化でRAMパリティが発生する可能性が残ります。
    (これはスタックオーバーフローなのでソフトの設計的にまずいとは思いますけども)

Reply
  • yutyuさん

    >ステップ実行を実行したのですが
    >ブレイクポイントを設定したのにもかかわらずブレイクせず、
    >「_stkinit」内まで進んでしまいます。
    >「手のひらマーク」が表示をさせたのですが・・・

    ソフトブレークだとブレークポイントを設定した命令で止まりますけれども
    ハードウェアブレークの場合3命令くらい滑る(余分に実行する)仕様のようです。

    ソフトブレークとハードブレークでアイコンの形がちょっと違います。
    ソフトブレークは「手のひら」だけ
    ハードブレークは「手のひらに緑色のICのマークが付く」表示になります。
    よーーく見てみてください。
    左クリックではなく、右クリックにするとハードかソフトブレークかを選ぶこともできます。


    >PUSH AX ;追加
    >PUSH AX ;追加
    >POP AX ;追加
    >POP AX ;追加
    >MOVW HL,#LOWW _@STEND ;HL <- stack end address
    >CALL !!_stkinit

    これの意味は、
    CALL命令は、呼び出し元のアドレスをスタックに退避しますけれども、
    アドレスは3バイト長なので、消費したスタックの4バイトのうち1バイトが使われていません(SP-1のアドレスが初期化されていない)。
    そのため、RETした時に初期化されていないスタックの1バイトをリードすることでRAMパリティが発生してるのではなかと想像しています。


    >あとは、stkinitに渡すHLの値が妥当な値かも確認して
    >おいたほうがいいですね。余計なところまで初期化さ
    >れて、しまうと大変なので。

    stkinitは現在のSPからHLに渡したアドレスの範囲を初期化するので、HLに変な値が入っているとSFR領域まで初期化されたり
    逆にスタック領域が狭すぎると、スタックが完全に初期化されないため
    のちのちCALL/RETした際に(前述の)SP-1のアドレス未初期化でRAMパリティが発生する可能性が残ります。
    (これはスタックオーバーフローなのでソフトの設計的にまずいとは思いますけども)

Children
No Data