Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

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テスト用の関数を実行するようにすればいいです。
    この場合、必要なスタックエリアまでテスト対象にしてしまうと関数から戻るときに暴走してしまうのでご注意を。
  • In reply to わわい:

    RAMの全領域をチェックしたいのでは?
    ハードウエア―セットアップの前にレジスター変数を用いてじまさんが紹介しているような方法でega258さんの考えていらっしゃる0x55と0xAAの書き込みと読み込みで良いと思います。実績のある具体的なコードが手元にないので書き込みはひかえます。私の周辺でもそのようなRAMチェックを組み込んでいるのを見たことがありますが、RAMサイズは大きくなってきているのでシステムスタートまでが遅くなり制御に支障があるので今は全く見かけないです。PC98のRAMチェックが懐かしいですね。
  • In reply to わわい:

    わわいさん
    resetprg.c はどうやったらでてきますか。見当たりません。
    コンパイラはCC-RLです。
    よろしくお願いします。
  • In reply to ega258:

    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%ではないでしょうか?
  • In reply to IKUZO:

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

  • In reply to kijo:

    kijoさん
    さすが、専門的でお詳しい、ただそんな危険が潜んでいるとすると、スタートアップルーチンの中にRAMチェックのオプションがあってもよさそうだと思いますが、いかがでしょうか?でも自ら「私はあまり価値は無いと思います」と述べておられるので。
  • In reply to EB68:

    皆様の貴重なご意見ありがとうございます。
    結局、どこにどのように記述すれば良いでしょうか?
    ご存知の方、よろしくお願いします。
    コンパイラCC-RLです。
  • In reply to ega258:

    9月21日11時21分にEB68さんが書かれているように、

    1.CC-RLのマニュアル675ページ「C 言語でのRAM 領域セクション初期化関数の例」をベースに0x55を書き込みチェックと0xAAを書き込みチェックのCソースファイルを用意する。この際に、レジスター変数にするなどiがチェックするRAMに置かれないようにする。
    2.cstart.asmでhdwinit関数呼び出し直後にINITSCT_RL関数(関数名は変更したほうが良いかも)を呼び出す。

    で良いと思います。

  • In reply to kijo:

    リターンアドレスを忘れてました。スタック領域をチェックしてしまうとリターンアドレスもなくなってしまうので、cstart.asmのinitializing stack areaの前にベタにアセンブラで書くしかないと思います。
  • In reply to ega258:

    真面目にやるとすると
    1. ROMテスト
    2. CPUテスト
    3. RAMテスト
    のような順番でテストする必要があるのでは。
    1. ROMテストはできるだけ限定された命令のみを使用してROMのCRC等を計算、予め用意された値と合っていれば 2. CPUテストで各命令の挙動を確認、問題がなければ 3. RAMテストを行い、エラーが検出されなければシステム初期化→起動とできると思います。
  • In reply to fujita nozomu:

    しかし、RAMチェックなんていうのは微妙ですよね、そんなにこのCPUは故障するのか、なんていう、良いイメージにつながらない、私の場合は内臓RAM等はチェック処理など必要ないと思っています、SDRAMとかで初期1年間ぐらいはタイミングやそのLSIの相性等での不都合を心配してチェック処理は入れますが、まー、でもメーカーによっては必ず全ての検査をしてから起動させるというような文化の所もあります、というか全てのメーカーがそうなんでしょうか?自分のところがそうした量産メーカーでないので、わからないので知りたいところです、以前一流メーカーから1. ROMテスト2. CPUテスト3. RAMテスト等をできる限りするように勧められたことがあります、まさかその会社の方の質問だとは思いませんが、たいてい内臓RAMテストはするもんなんでしょうか?
    そうであれば、CS+でも既定のコード生成などで対応できるように是非ともお願いします。
  • In reply to IKUZO:

    チョコです。
    通常,集積化することで,個々の部品を組み合わせていたときより信頼性は向上していきます。

    電子機器の安全に関しては,10年以上前から国際規格IEC60730が騒がれ,その中にマイクロコントローラを使用した制御システムについても記載されています。
    RL78は,それを意識して,安全機能が組み込まれています。
    また,「RL78 MCU のためのIEC60730/60335 セルフテスト・ライブラリ」と言うANや追加ライブラリも発行されているようです。

    なお,IEC60730はULになったり,JIS化されたりしているようです。また家庭電化製品に対する60335なんていうのもあるようです。

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page