RAMチェックはどのように行えばよいでしょうか

例えば、RL78G14_80pin でCS+でソフトを作るとします。

ユーザーが使用できるRAM領域に対し、

1バイトづつ0x55を書いて0x55かどうか確認。

1バイトづつ0xAAを書いて0xAAかどうか確認。

を行いたいです。

自動的にスタートアップ関数で行われれているのでしょうか?

ユーザー側で記入する場合、どのように書けばよいか、ご存知の方教えてください。

よろしくお願いします。

  • こんにちは

    スタートアップルーチンでRAM領域セクションを初期化(ゼロクリア)する説明が以下に掲載されています。

    CS+オンラインヘルプ 8.2.6 RAM領域セクションの初期化処理

    こちらを参考にしてみてはどうでしょう。ただし、こちらはCC-RLコンパイラの説明です。

    RL78、78Kファミリ用Cコンパイラの場合は以下のマニュアルに同様の説明があるようです。

    CubeSuite+ V2.01.00 統合開発環境 ユーザーズマニュアル RL78,78K0R コーディング編

    「2. 5. 3 RAM の初期化を行う」

  • こんにちは、ega258さん。
    RL78のスタートアップ関数は、最初に内蔵周辺機能の初期化をおこない、その後RAMに関しては初期値あり変数の初期化と初期値なし変数のクリアを行ってから、main関数を起動します。
    従って、main関数起動後に実行させるプログラムとして、そのような処理を記述すればいいはずです。

    ちなみに、RL78ではRAMチェックとして「安全機能として、IEC60730/60335 セルフテスト・ライブラリ」が公開されています。アプリケーションノートは以下のURLを参照してみてください。

    www.renesas.com/.../r01an1062jj0120_rl78.pdf

  • わわいです
    ルネサスの統合環境では、伝統的(?)に、変数イニシャルルーチンは INITSCT とか、_INITSCT とかの名前になってます
    プロジェクトを新規作成したときのソースファイルの中にこの名前を探し、この関数を呼び出してるところを突き止め(resetprg.c とかそこらへん?)、その関数の実行前に、そのRAMテスト用の関数を実行するようにすればいいです。
    この場合、必要なスタックエリアまでテスト対象にしてしまうと関数から戻るときに暴走してしまうのでご注意を。
  • RAMの全領域をチェックしたいのでは?
    ハードウエア―セットアップの前にレジスター変数を用いてじまさんが紹介しているような方法でega258さんの考えていらっしゃる0x55と0xAAの書き込みと読み込みで良いと思います。実績のある具体的なコードが手元にないので書き込みはひかえます。私の周辺でもそのようなRAMチェックを組み込んでいるのを見たことがありますが、RAMサイズは大きくなってきているのでシステムスタートまでが遅くなり制御に支障があるので今は全く見かけないです。PC98のRAMチェックが懐かしいですね。
  • わわいさん
    resetprg.c はどうやったらでてきますか。見当たりません。
    コンパイラはCC-RLです。
    よろしくお願いします。
  • ega258さん、CS+CC-RLにそんなのは無いですよ。

    CS+CC-RLでプロジェクトを作成すると、プロジェクト・ツリーに以下のようなファイルが生成されます。

    ここの"cstart.asm"が、じまさんが触れていたスタートアップルーチンです。

    ここに、Cのプログラムを起動するための前処理が記述されています。

    内蔵ハードウェアの初期化(hdwinit関数)を呼び出した後にでもメモリテストを入れてください。

    (当然、アセンブラでの記述です。)

     

    追伸

    CC-RLのマニュアルを眺めていたら、675ページに「C 言語でのRAM 領域セクション初期化関数の例」

    と言う内容がありました。これを参考にすれば,C記述でメモリテストはできそうです。

    https://www.renesas.com/jp/ja/doc/products/tool/doc/013/r20ut3123jj0107-ccrl.pdf

     

  • RAMチェックですが、やる必要があるのでしょうか?、このRAMというのはCPUの内臓RAMですよね、メーカーが保証しているので、必要ないのではないかと思いますが、どうしてもやりたい場合はmain関数の最初にでも可能ですが、もう一度RAMの初期化をしないといけないので、時間の無駄としか映りません、20年前のシステムならありえたかもしれません、RAMの不良ですが、統計的にほぼ0%ではないでしょうか?
  • 私の応用ではほぼゼロ%で片づけられないです。
    半導体の故障率はバスタブカーブを描きます。民生でも産業用でもスクリーニングをすると思いますが、納品時の故障率は10~100ppm程度でまだ初期不良領域と予想します。偶発故障期もゼロとはならず10~100FITが一般的と思います。摩耗期に入る時間は温度に大きく依存しますが一般的な使われ方で数十万時間以降になると思います。これらの数字は取引契約時に決めるはずで、数字の通りになるのが日本の品質の良さの象徴とされてます。以前に秋葉原のパーツショップ店頭買い部品を使って家電製品を製造販売しているメーカがTVで紹介されてましたが、これらの情報なしに設計製造販売していることとなり私には信じがたいことです。追加スクリーニングで初期故障が完全に取り除かれて、偶発故障期の故障率が10FITとして、製品のライフサイクルが2.7時間*365日*10年のおよそ1万時間、販売台数が1万台とすれば1台の故障が発生します。多くのお客様にとってセットの寿命は故障して使えなくなるまでなので、これ以上の使用時間も十分に可能性があり逆に設定時間内の故障してほしい部品も出てきます。セットが安全に故障してお客様に元を取ったと思っていただけるシステム設計が重要です。 これを怠ると後々に高額なコストとイメージダウンが発生してしまいます。
    私はあまり価値は無いと思いますが、起動時のRAMチェックが安全上重要と考えるなら実施は有効です。

  • kijoさん
    さすが、専門的でお詳しい、ただそんな危険が潜んでいるとすると、スタートアップルーチンの中にRAMチェックのオプションがあってもよさそうだと思いますが、いかがでしょうか?でも自ら「私はあまり価値は無いと思います」と述べておられるので。
  • 皆様の貴重なご意見ありがとうございます。
    結局、どこにどのように記述すれば良いでしょうか?
    ご存知の方、よろしくお願いします。
    コンパイラCC-RLです。