私は、多数のワイヤ(最大360)をテストできる組み込みシステムを開発しています。これは基本的に導通チェックシステムです。システムは、テストベクトルをクロックインし、もう一方の端から出力を読み取ることによって機能します。次に、出力は、出力がどうあるべきかを示す保存された結果(SDカードにある)と比較されます。テストベクトルはただ歩くものなので、どこにでも保存する必要はありません。プロセスは次のようになります。
- テストベクトルをクロックアウトします(ウォーキングのもの)
- 出力テストベクトルを読み込みます。
- SDカードから対応する出力テストベクトルを読み取ります。これにより、出力ベクトルがどうあるべきかがわかります。
- 手順2と3のテストベクトルを比較します。
- 別のアレイにエラー/障害を書き留めます。
- すべてのワイヤがチェックされていない限り、手順1に戻ります。
- エラー/障害をLCDに出力します。
私のハードウェアは、AVRマイクロコントローラーにクロックインされる大きなシフトレジスターで構成されています。すべてのテストベクトル(これも360ビットになります)について、360ビットで読み取る必要があります。したがって、360線の場合、データの総量は360 * 360=16kB程度になります。これを1回のパスで実行できないこと(つまり、データ全体を読み取ってから比較すること)ができないことはすでにわかっているため、テストベクトルごとにテストする必要があります。
このような大きな数を保持できる固有のタイプはないため、長さ360ビットのビット配列を使用する予定です。さて、私の質問は、このビット配列をtxtファイルにどのように保存する必要があるかということです。
1つの方法は、生の値を格納することです。つまり、各行に、シフトレジスタから読み込んだ生のバイナリデータを格納します。したがって、8線の場合、0b10011010になります。ただし、これは最大360本のワイヤでは見苦しい場合があります。各行には360バイトが含まれます。
もう1つの方法は、16進値を格納することです。これは、8ビットの場合は2文字(上記の場合は9A)、360ビットの場合は約90文字になります。ただし、これには、テキストを1行ずつ読み取り、16進値をビット配列で表されるように変換する必要があります。
では、この種の問題に対する最善の解決策は何でしょうか?完全に「決定論的」なソリューションが必要です。mallocなどを呼び出すことはできません。私が読んだことから、これらは組み込みシステムでは少しノーノーです。
まとめ
従来の変数型では表現できない大きな値を格納する必要があります。現在、これらの値をビット配列に格納する予定です。これらの値をSDカードのテキストファイルに保存するための最良の方法は何ですか?