2

私は現在、rvctコンパイラが特定の変換単位でリンクしないように強制し、リンクされているふりをする可能性を調査しています。

当社の製品はスペースの制約に非常に厳しい状況で稼働しており、スペースを管理しながらいくつかの単体テストを統合するのに問題があります。

基本的に、実行時に利用できるメモリは、単体テストを格納するのに十分ですが、それらを保持するための十分なROMスペースがありません。

コードのメモリのどのセグメントがスキャッタファイルのデバイスに入るのかを正確に制御する手段があるので、単体テストコードが配置される領域を定義する方針に沿って考え、コンパイラにリンクしないように強制しますコンパイル時にその特定のコードで。

次のようなもの:

Result UnitTestEntryPoint (UnitTest suite) {
   if (hasTestInMemory) {
      switch (suite) {
          case EncrpytionTest:
              return EncrptyUnitTest();
          // more tests.
      }
   }
}

// Actual Tests, can we not link this code, but just pretend we link to them?
Result EncrpyUnitTest (void) {
    // Do stuff...
}

次に、実行時に、単体テストバイナリを、スキャッタファイルで定義した指定のメモリ領域にアップロードし、にフリップhasTestInMemorytrueます。

これは可能ですか?

または、そうでない場合は、スペースの制約を満たし、実行時に単体テストをロードできるソリューションを探す正しい方向を誰かに教えてもらえますか。

ありがとう、

4

1 に答える 1

3

スキャッターファイルを使用して、すべての単体テスト関数を個別のロード領域に配置できるはずです。画像をリンクすると1つのAXFが得られますが、メモリにロードするために画像をバイナリファイルに変換すると、各リージョンに1つずつ、合計2つのファイルが得られます。

ユニットテストイメージに、バイナリがロードされていることを確認するためにROMイメージがチェックできるマーカーを含めることもできます。このチェックは、コード内のhadTestInMemoryチェックを置き換えます。ここでも、スキャッターファイルを使用して、2番目のバイナリファイルの先頭に特定のROデータを配置できるはずです。

あなたが進歩するにつれて、私はおそらくもう少し詳細を手伝うことができます。

于 2012-11-07T17:54:58.660 に答える