3

LEON2プロセッサ(Sparc V8)を使用してプロジェクトに取り組んでいます。プロセッサは8MバイトのRAMを使用しており、ブートのセルフテスト中に整合性をチェックする必要があります。私の問題は、私のブートがヒープ/ BSS /スタックにRAMのごく一部を使用していることです。これは、アプリケーションをクラッシュさせずに変更することはできません。私のRAMテストは非常に簡単です。すべてのRAMアドレスに特定の値を書き込んでから、それらを読み戻して、RAMチップをアドレス指定できることを確認します。

この方法は、使用可能なほとんどのRAMに使用できますが、残りのRAMの整合性を安全に確認するにはどうすればよいですか?

4

3 に答える 3

5

通常、すべてのバイトをテストする必要があるRAMテストは、プロセッサの起動時に最初に行われることの1つとして実行されます。多くの場合、RAMテストがRAMにアクセスできるようにするために必要なハードウェアの初期化は、ハードウェアの初期化の前に行われる唯一の他のことです。

これは通常、割り込みを無効にしてアセンブリ言語で実行されます。これは、RAMが使用されていないことを確認できる唯一の方法であるためです。

それ以降にRAMテストを実行する場合でも、システムの起動のかなり早い段階で実行する必要があります。おそらく2つのパスでそれを行うことができます-変数/スタック/それ自体の目的のためにテストが必要とするものはすべて低RAMにあり、そのテストは高RAMをテストします。次に、低RAMをテストしている間、高RAMのデータを使用してテストを再実行します。

別の注意:書き込まれた特定の値を読み戻すことを確認することは、何もないよりはましかもしれない単純なテストですが、特定のタイプの一般的な障害(特に外部RAMで一般的:アドレスラインの欠落またはクロスはんだ付け)を見逃す可能性があります。

基本的なRAMテストの詳細については、次を参照してください。

于 2011-07-11T15:02:05.877 に答える
2

安全関連のデバイスをプログラミングしているので、動作時にフルRAMテストを実行する必要があります。テストを2つのテストに分割しました。

  1. アドレッシングテスト

各アドレス指定行が到達するアドレスに一意の値を書き込み、すべての値が書き込まれた後、値が読み戻され、期待値と比較されます。このテストは、アドレス指定ラインの短絡(またはstuck @ low / high)を検出します(アドレス0xFF40に0x55を書き込みたいが、短絡のために値が0xFF80に格納されているため、テスト2ではこれを検出できません。

  1. パターンテスト:

たとえば、RAMの最初の4バイトをCPUのレジスタに保存し、その後、最初にセルをクリアし、0x55を書き込み、検証し、0xAAを書き込み、保存されたコンテンツを検証および復元します(もちろん他のパターンも使用できます)。レジスタを使用する必要がある理由は、変数を使用すると、この変数がそのテストによって破棄されるためです。このテストでスタックをテストすることもできます。私たちのプロジェクトでは、一度に4つのセルをテストし、RAM全体がテストされるまでこのテストを実行する必要があります。

それが少し役に立ったことを願っています。

于 2011-08-05T08:18:04.420 に答える
1

Cランタイム環境が稼働する前にテストを行うと、問題なくヒープ領域とBSS領域をゴミ箱に移動できます。
通常、スタックは実行時のセットアップ中にあまり使用されないため、悪影響を与えることなくスタックを破棄できる場合があります。システムを確認するだけです。
テスト中にスタックを使用する必要がある場合、またはスタックを保持する必要がある場合は、スタックポインターを、テスト済みの領域に移動するだけです。その後、古いスタックを復元して続行します。

ランタイム環境に入ったら、これを行う簡単な方法はありません。

于 2011-07-11T15:05:34.783 に答える