1

チェッカーボードのようなアルゴリズムを使用して、起動時に MCU の RAM をチェックする必要があります。既に RAM にあるデータを失いたくありません。また、このアルゴリズムを実行するために使用している変数に影響を与えないようにする方法もわかりません。私は次のようなことを考えていました:

for (position=0; position< 4096; position++)
 {
     *Temporal = 0x5555;
     if(*Temporal != 0x5555) Error = TRUE;
     *Temporal  = 0xAAAA;
     if(*Temporal != 0xAAAA) Error= TRUE;

    Temporal +=1;

 }

Temporal と Error が配置されている場所を知るためにリンカーを変更する必要がありますか?

4

3 に答える 3

0

テストしているメモリが、実行しているプログラムを含むメモリとは異なる場所にあることを確認する必要があります。フラッシュ、または接続している他の永続ストレージを直接使い果たすことで、これを実行できる場合があります。そうでない場合は、適切なメモリセグメンテーションを確保するために、リンクマップを使用して何かを行う必要があります。

テスト関数内では、registerMVittiSが示唆するように使用することをお勧めします。もう1つの方法は、テスト対象のセグメントとは異なるセグメントにマップされたグローバル変数を使用することです。

提案するテストの制限、メモリが失敗する方法、およびテストする必要があるものを理解するために、メモリテストに関するこの記事を読むことをお勧めします。

于 2013-01-03T16:46:57.650 に答える
0

詳細はわかりませんが、メモリ テストはキャッシュ テストである可能性があり、RAM をまったくテストしない可能性があります。

あなたのメモリテスト(メモリをテストする場合)も非常にうまく設計されていません。たとえば、最下位の 2 つのデータ ラインを除くすべてのアドレス ラインとすべてのデータ ラインを切り取る (またはショートする) ことができます。非常に重大な障害が多数ある場合でも、テストはパスします。

私のアドバイスは、メモリ テストに関するこの Web ページのようなものを読んで、アイデアと背景情報を入手することです。 based-memory-testing.html

一般に、非破壊テストの場合は、別の場所に保持したいものをすべてコピーしてから、テストを実行してから、データをコピーして戻します。「どこか他の場所」を最初にテストすることが非常に重要です (すべてを障害のある RAM にコピーしてからコピーし直すことは望ましくありません)。

また、(C ではなく) アセンブリを使用して、不要なメモリ アクセスが行われないようにすることもお勧めします。あなたのスタックを含みます。

テストする必要があるコードが RAM にある場合は、おそらく RAM テスト コードのコピーが 2 つ必要になります。コードの最初のコピーを含む RAM をテストするときは、コードの 2 番目のコピーを使用します。コードが ROM にある場合は、はるかに簡単です (ただし、スタックについて心配する必要があります)。

于 2013-01-03T17:09:39.827 に答える