
ในตัวอย่างนี้ไฟล์ที่เรียกว่าเครือข่ายถูกสร้างขึ้นใน root/config หากไม่มีไฟล์กำหนดค่าบอนไซจะสร้างและวางเครือข่ายภายใน ไดเรกทอรีรูทถูกสร้างขึ้นโดยค่าเริ่มต้นเมื่อคลาส 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 จะมองหาไฟล์ระบบในช่วงเริ่มต้นของพาร์ติชันแฟลช หากไม่มีใครมีอยู่บอนไซจะสร้างไฟล์และไฟล์รูท ไฟล์รูทคือผู้ปกครองของไฟล์ที่ผู้ใช้ที่สร้างขึ้นทั้งหมดไม่น่าแปลกใจ ด้ามจับของมันคือ 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