PCからデータを必要とする組み込みハードウェアを開発しています。私はこの情報を提供するためにFAT32フォーマットのSDカードを使用しています。データはCSVにエクスポートするExcelファイルです。私の質問は、char* strtok (char *s, const char *delim)
を使ってuC(AT Mega 128L)にこれを処理させるべきか、このCSVファイルをバイナリ形式に変換する小さなユーティリティを書くべきですか?組み込みアプリケーション向けのCSVファイルまたはバイナリファイル
パフォーマンスは、合理的に速い限り、大きな問題でもファイルサイズでもありません。最大の問題はSRAMの使用です。
行の長さは最大です。最大約40文字。約7つのフィールドがあり、そのうちの2つは基本的にインデックスです。 uCは、これらのインデックスを調べ、一致するかどうかを調べることによって、関心のある情報を取得することになっています。たとえば、uCがインデックス5に格納されているものに関する情報を必要としているとします。次に、ここに行き、他の5つのフィールドを取得して画面に表示する必要があります。 uCはファイルへの「ランダムな」アクセスを必要とします。つまり、インデックス7から何かが必要な場合があります。インデックス70から何かが必要な場合があります。
わかったように、厳密に定義されたフォーマットのバイナリファイル(つまり、各フィールドは固定バイト数になります)。利点は、uCが関心のあるバイトを直接探すことができるということです。例えば、それぞれの 'レコード'が100バイトを占めるとします(これはもっと少なくなりますが、例として説明します)。 uCは、2番目の索引が100から始まり(最初のレコードの場合は0-99)、200の場合は3番目のレコードを認識します。
したがって、7番目のレコードにアクセスする必要がある場合は、700番目のバイトを検索し、関連情報バイナリファイルのアプローチはCSVより優れていますか?私の主な関心事はSRAMの使用と合理的な性能です。
私は完全に同意します。文字列を処理して数値に変換するのは、リソースを大量に消費します(比較的話しています)。あなたは通常、組み込みシステム上でそれをしようとするよりも、あなたのコンピュータ上のプログラムを使用して、これを行う長期的に良いでしょう。これにより、より高度な言語(RubyやPythonなど)を使用して、組み込みシステムではおそらく利用できない文字列処理を行うこともできます。これらの言語には、CSVや文字列処理をC言語で行うよりもはるかに簡単なライブラリ/機能があります。 – bta