
В этом примере файл, называемый сетью, создается в root/config. Если файл конфигурации не существует, Bonsai создаст его и поместит сеть внутри него. Корневый каталог создается по умолчанию, когда класс Bonsai создается.
Bonsai bonsai;
bonsai.create_file( " root/config/networking " );Файл Old_Data удален вместе с его содержимым.
Bonsai bonsai;
bonsai.delete_file( " root/config/old_data " );Смотрите полный API для получения дополнительной информации.
Взносы наиболее приветствуются.
Проверьте, как внести свой вклад.
После написания файл смежно проживает на границе строки в флэш -памяти. Файл может охватывать несколько строк, при условии, что он придерживается предела размера своих составляющих полей, и что он подходит в разделе Bonsai Flash. Его первые четыре поля зафиксированы по размеру и составляют заголовок файла. Размер последующих полей - и, следовательно, файл полностью - получен из заголовка. Последние три поля различаются по размеру и составляют тело структуры файла. Примечательно, что файл не хранит свой собственный адрес, так как адрес файла является адресом его первого члена.
| Размер ручки | Размер данных | Родительский адрес | # адресов ребенка | Ручка | Данные | Адреса ребенка |
|---|---|---|---|---|---|---|
| 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 создаст как один, так и корневой файл. Корневой файл, неудивительно, является родителем всех созданных пользователя файлов. Его ручка root и инициализируется без каких -либо данных. Системный файл - это специальный файл, который находится на одной строке перед адресом корневого файла. У него нет ни родителей, ни детей адресов и используются для общего управления памятью. Важно отметить, что системный файл хранит адрес свободного пространства (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