
في هذا المثال ، يتم إنشاء ملف يسمى الشبكات في الجذر/التكوين. إذا لم يكن ملف التكوين موجودًا ، فسيقوم 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 عن ملف نظام في بداية قسم الفلاش الخاص به. إذا لم يكن المرء موجودًا ، فسيقوم Bonsai بإنشاء واحد بالإضافة إلى ملف جذر. ملف الجذر ، لا يثير الدهشة ، الوالد لجميع الملفات التي أنشأها المستخدم. مقبضه هو root ويتم تهيئته بدون أي بيانات. ملف النظام هو ملف خاص يقع صف واحد قبل عنوان ملف الجذر. لا يحتوي على عناوين الوالدين أو الأطفال ويستخدمون لإدارة الذاكرة العامة. من الأهمية بمكان ، يقوم ملف النظام بتخزين عنوان المساحة الحرة (FSA) والذي يتم استخدامه نفسه لتحديد موقع الملف التالي المراد كتابته (مرة أخرى ، يخزن ملف النظام FSA كبيانات ، وليس كعنوان طفل. FSA ليس ملفًا ، ومعاملته كأنه لن يكون له معنى). تعمل هذه الآلية بحيث يتم زيادة ملف FSA إلى عنوان الصف مباشرة بعد نهاية الملف المكتوب. على العكس ، عندما يتم حذف ملف ، يتم تقليل FSA إلى عنوان الصف الذي يوجد فيه الملف المحذوف. لذلك ، فإن الحد الأقصى لحجم جزء الذاكرة هو ROW_SIZE - 1 أو 255 بايت.
تنفذ فئة Bonsai مجموعة من الطرق لقراءة الملفات الأساسية والكتابة. هذه الطرق غير متورطة في اجتياز مسار الملف. بدلاً من ذلك ، يتفاعلون مباشرة مع العناوين ويتم استدعاؤه بشكل عام من قبل واجهة برمجة التطبيقات على المستوى الأعلى. هم:
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