(このプロジェクトは、おそらくスーパーユーザーまたはエレクトロニクスのサイトで話題になるでしょうが、この質問の焦点は、それを達成するためのプログラム可能なソフトウェアです。)
約 100KB/s でデータを生成する組み込みシステムを使用しており、このデータを保存して後で Windows PC で処理する必要があります。シリアル ストリーミングは機能しますが、内部ストレージには、データ収集が行われる部屋にラップトップやケーブルが存在する必要がないという明らかな利点があります。
私の回路基板には SD カード ソケット (SPI 接続) があり、以前にファイルを FAT ファイルシステムに書き込もうとしました。しかし、これは恐ろしいボトルネックであることが判明しました。特にその理由は、任意の時間に成長する任意の長さの複数のファイルをサポートするために、FAT でのファイル アクセスには、メタデータの複数のレイヤーの読み取りと書き込みが必要になるためです。テーブル自体とディレクトリ -- 実際のコンテンツに加えて、これらはマイクロコントローラの RAM に完全に収まらないため、カード アクセスの数が増加します。さらに悪いことに、新しい空きブロックを見つけるなどの一部のタスクでは、カード サイズが直線的に複雑になります。
FAT に対するもう 1 つの問題は、事前にクリーンなアンマウントを行わないと電源が失われた場合にデータが破損しやすく、私のシステムにはアンマウントを開始できるユーザー インターフェイスがないことです。プロセッサと SD カードを数ミリ秒余分に動かし続けるための停電割り込みやキャパシタンスなどのテクニックは知っていますが、いずれにせよホット リムーブには役立たず、私の既存の回路にはそれらがありません。 m ストレージのクラッシュのみの設計を実現しようとしています。
そこで、ファイルシステムをスキップして、カードをブロックの生のシーケンスとして使用することにしました。ただし、ユーザーがデータを含むカードを再フォーマットするように招待されるのは望ましくありません
そのため、カードをパーティション分割し、OS が認識する小さな FAT パーティションを前面に配置し、説明用のテスト ファイルを配置します。ユーザーがカードを交換できるようにする必要があるため、PC アプリケーション内でパーティショニングとフォーマットのプロセスを自動化する必要があります。
raw アクセスはCreateFile("\\\\.\\PhysicalDisk3")
、および同様のパスを呼び出すことで実現できます。これは、管理者権限を必要とせずに、リムーバブル ディスクで実行できます。それでも、これは自分で書く必要のないコードです。また、OS は、変更後にボリュームを再スキャンするように指示する必要があります。
Windows に組み込まれている API や、パーティション テーブルへのビットごとの直接アクセスを必要とせずに SD カードをパーティション分割するためのサードパーティのオープン ソース フレームワークの一部の API はありますか? そうでない場合、パーティション分割を変更した後に Windows でボリュームを再スキャンするにはどうすればよいですか? XP以降で動作する方法を好みます。