RAMチェックの方法について

RAMチェックの方法について教えてください。

CPUはRX66Tを使用しています。

過去の例を元にRAMチェックを実装しようとしています。

https://community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rl78/f/forum18/5217/ram

スタートアップルーチンの中に _INITSCT というRAMの初期化を行う関数があるので、

この関数の前にRAMチェックを行おうと考えています。

方法としては0xAA、0x55の書き込みと読み出しを行い、値が一致することです。

この時、一致しなければエラーを外部変数に記録し、メイン関数の開始後、RAMエラーが発生していると

LEDに表示させようと考えてました。

実際は _INITSCT でRAMが初期化されて、エラー検出の外部変数も0になってしまい、上手くいきません。

初期化が終わった後にRAMチェックでエラーが起こっていたのを知るにはどのようにすればよいでしょうか。

Parents
  • エラーを記録する変数を個別のbssセクションに定義する方法があり得ます。

    _INITSCTは、デフォルトのbssセクションに対する初期化を行うもので、ユーザセクションを定義してそこにエラー記録用の変数を配置すれば可能です。

    RAMチェックの意味で言うと、エラー記録用の変数もチェック対象になることになりますことを考慮する必要があると思います。

  • 他には、初期化あり変数として定義することで、0初期化されないようにすることもできます。

    以下のようにすれば、_INISCTで、0初期化対象外にすることもできます(BSSではなくDセクションに配置される)。

    unsigned char ercd = 1;

    この場合でも、前述通りエラー記録用の変数もチェック対象になることになりますことを考慮する必要があります。

    さらに、

    _INISCTの初期化がRAMチェックの妨げになるようであれば、_INITSCT後にRAMチェックし、もう一度_INITSCTを

    呼び出すということも方法としてはありですが、2重初期化となりますので、起動速度への影響等考えるとあまりお勧めはしません。

Reply
  • 他には、初期化あり変数として定義することで、0初期化されないようにすることもできます。

    以下のようにすれば、_INISCTで、0初期化対象外にすることもできます(BSSではなくDセクションに配置される)。

    unsigned char ercd = 1;

    この場合でも、前述通りエラー記録用の変数もチェック対象になることになりますことを考慮する必要があります。

    さらに、

    _INISCTの初期化がRAMチェックの妨げになるようであれば、_INITSCT後にRAMチェックし、もう一度_INITSCTを

    呼び出すということも方法としてはありですが、2重初期化となりますので、起動速度への影響等考えるとあまりお勧めはしません。

Children
No Data