
이 예에서는 네트워킹이라는 파일이 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 파티션에 맞는 경우 여러 행에 걸쳐있을 수 있습니다. 처음 4 개의 필드는 크기가 고정되어 있으며 파일 헤더를 구성합니다. 후속 필드의 크기 (따라서 파일 전체)는 헤더에서 파생됩니다. 마지막 세 필드의 크기는 다양하며 파일 구조의 본문을 구성합니다. 특히 파일의 주소는 첫 번째 멤버의 주소이므로 파일은 자체 주소를 저장하지 않습니다.
| 손잡이 크기 | 데이터 크기 | 부모 주소 | 아동 주소의 # | 핸들 | 데이터 | 아동 주소 |
|---|---|---|---|---|---|---|
| 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는 플래시 파티션이 시작될 때 시스템 파일을 찾습니다. 존재하지 않으면 Bonsai는 루트 파일뿐만 아니라 하나를 생성합니다. 루트 파일은 당연히 모든 사용자가 만든 파일의 부모입니다. 핸들은 root 이며 데이터없이 초기화됩니다. 시스템 파일은 루트 파일 주소 전에 한 행을 상상하는 특수 파일입니다. 부모 나 어린이 주소가 없으며 일반 메모리 관리에 사용됩니다. 결정적으로, 시스템 파일은 다음 파일의 위치를 결정하는 데 사용되는 FSA (Free Space Address)를 저장합니다 (다시, 시스템 파일은 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