
Dalam contoh ini file yang disebut jaringan dibuat di root/config. Jika file konfigurasi tidak ada, bonsai akan membuatnya dan menempatkan jaringan di dalamnya. Direktori root dibuat secara default ketika kelas Bonsai dipakai.
Bonsai bonsai;
bonsai.create_file( " root/config/networking " );File old_data dihapus, bersama dengan isinya.
Bonsai bonsai;
bonsai.delete_file( " root/config/old_data " );Lihat API lengkap untuk informasi lebih lanjut.
Kontribusi sangat disambut.
Lihat cara berkontribusi.
Setelah ditulis, sebuah file berada di batas baris dalam memori flash. Sebuah file dapat menjangkau beberapa baris asalkan melekat pada batas ukuran bidang konstituennya, dan itu cocok di dalam partisi bonsai flash. Empat bidang pertama ditetapkan dalam ukuran dan membentuk header file. Ukuran bidang berikutnya - dan oleh karena itu file secara keseluruhan - berasal dari header. Tiga bidang terakhir bervariasi dalam ukuran dan membentuk tubuh struktur file. Khususnya, file tidak menyimpan alamatnya sendiri, karena alamat file adalah alamat anggota pertama.
| Menangani ukuran | Ukuran data | Alamat induk | # alamat anak | Menangani | Data | Alamat anak |
|---|---|---|---|---|---|---|
| 1 byte | 2 byte | 4 byte | 1 byte | variabel | variabel | variabel |
| Header | Tubuh | |||||
Dengan demikian, tabel di atas dinyatakan dalam firmware sebagai struktur 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 ; Ukuran file apa pun dapat diekspresikan dalam hal file_t , dengan demikian:
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 Setelah inisialisasi, Bonsai akan mencari file sistem di awal partisi flashnya. Jika tidak ada, bonsai akan membuat satu serta file root. File root, tidak mengejutkan, adalah induk dari semua file yang dibuat pengguna. Pegangannya root dan diinisialisasi tanpa data apa pun. File sistem adalah file khusus yang berada di satu baris sebelum alamat file root. Ia tidak memiliki orang tua atau anak -anak yang ditangani dan digunakan untuk manajemen memori umum. Yang terpenting, file sistem menyimpan alamat ruang bebas (FSA) yang dengan sendirinya digunakan untuk menentukan lokasi file berikutnya yang akan ditulis (sekali lagi, file sistem menyimpan FSA sebagai data, bukan sebagai alamat anak. FSA bukan file, dan memperlakukannya seperti yang tidak masuk akal). Mekanisme ini berfungsi sedemikian rupa sehingga ketika sebuah file ditulis, FSA bertambah ke alamat baris segera setelah akhir file tertulis. Sebaliknya, ketika sebuah file dihapus, FSA dikurangi ke alamat baris di mana file yang dihapus berada. Oleh karena itu, ukuran maksimum fragmen memori adalah ROW_SIZE - 1 atau 255 byte.
Kelas Bonsai mengimplementasikan serangkaian metode untuk membaca dan menulis file dasar. Metode ini tidak terlibat dengan traversal jalur file. Sebaliknya, mereka berinteraksi langsung dengan alamat dan umumnya dipanggil oleh API tingkat atas. Mereka adalah:
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