
この例では、ネットワークと呼ばれるファイルがroot/configで作成されます。構成ファイルが存在しない場合、Bonsaiはそれを作成し、その内側にネットワークを配置します。ルートディレクトリは、 Bonsaiクラスがインスタンス化されたときにデフォルトで作成されます。
Bonsai bonsai;
bonsai.create_file( " root/config/networking " );ファイルのold_dataは、その内容とともに削除されます。
Bonsai bonsai;
bonsai.delete_file( " root/config/old_data " );詳細については、完全なAPIを参照してください。
貢献は大歓迎です。
貢献方法をチェックしてください。
書かれたら、ファイルはフラッシュメモリの行の境界に連続的に存在します。ファイルは、構成フィールドのサイズ制限に準拠し、盆栽フラッシュパーティション内に適合することを条件に、複数の行にまたがる可能性があります。最初の4つのフィールドのサイズは固定されており、ファイルヘッダーを構成します。後続のフィールドのサイズ、したがってファイル全体がヘッダーから派生しています。最後の3つのフィールドのサイズはさまざまで、ファイル構造の本文を構成します。特に、ファイルのアドレスは最初のメンバーのアドレスであるため、ファイルは独自のアドレスを保存しません。
| ハンドルサイズ | データサイズ | 親アドレス | #子どもの住所の# | ハンドル | データ | 子供のアドレス |
|---|---|---|---|---|---|---|
| 1バイト | 2バイト | 4バイト | 1バイト | 変数 | 変数 | 変数 |
| ヘッダ | 体 | |||||
したがって、上記の表はファームウェアでfile_t構造として表されます。
typedef struct {
uint8_t handle_size; // the size of handle in bytes
uint16_t data_size; // the size of data in bytes
uint32_t parent_addr; // the address of this file's parent file
uint8_t num_child_addrs; // the number of children immediately descendant from this file
uint8_t *handle; // the handle or name of this file
uint8_t *data; // the actual data this file contains
uint32_t *child_addrs; // children addresses
/* ... */
} file_t ;ファイルのサイズは、 file_tで表現できます。
handle_size + sizeof (handle_size) + // handle_size bytes plus one more for storing the size of handle_size
data_size + sizeof (data_size) + // same for data
sizeof (parent_addr) + // four bytes for the parent address
sizeof (num_child_addrs) + // one byte for storing the number of child addresses
(num_child_addrs * sizeof ( uint32_t )); // four bytes for every child address 初期化されると、BonsaiはFlashパーティションの開始時にシステムファイルを探します。存在しない場合、Bonsaiはルートファイルと同様に1つを作成します。ルートファイルは、当然のことながら、すべてのユーザー作成ファイルの親です。そのハンドルはrootであり、データなしで初期化されます。システムファイルは、ルートファイルアドレスの前に1つの行がある特別なファイルです。親も子供も扱いず、一般的な記憶管理に使用されます。重要なことに、システムファイルは、次のファイルの位置を決定するために使用されるフリースペースアドレス(FSA)を保存します(再び、システムファイルはFSAを子住所としてではなくデータとして保存します。FSAはファイルではなく、それを扱うことは意味がありません)。このメカニズムは、ファイルが書かれている場合、FSAが書かれたファイルの終わりの直後に行アドレスに増分されるように機能します。逆に、ファイルが削除されると、FSAは削除されたファイルが配置されている行アドレスに減少します。したがって、メモリフラグメントの最大サイズはROW_SIZE - 1または255バイトです。
Bonsaiクラスは、基本的なファイルの読み取りと書き込みのための一連の方法を実装しています。これらの方法は、ファイルパストラバーサルには関係していません。むしろ、それらはアドレスと直接相互作用し、一般にトップレベルのAPIによって呼び出されます。彼らです:
void put ( file_t &file); // writes a file to flash memory
file_t get ( const uint32_t address); // retrieves a file from memory
void del ( const uint32_t address); // erases all rows containing a file
void mov ( const uint32_t dest, const uint32_t src); // moves a file from src to dest