mFS
This note is related to my previously published mFS file system.
Specifications:
- Filename length: 20 characters (NULL and EOF characters are reserved for internal use. Filename ends with NULL.)
- Flat filesystem, No directory support atm at least
- Cached write (buffer length can be changed)
- Possibility use tickers to sync individual files
- One file system per device atm
- Maximum number of blocks: 65536 (Could be made variable in future releases.)
- Maximum number of files: 65536 (limited by number of blocks used)
- Block size: 32/256 B to 4 GB (minimum depends on used volume size)
- Maximum volume size: 256 TB (Limited to 64 kB by I2C EEPROM library)

Picture above shows how blocks and files are constructed in mFS. Byte numbers are not up-to-date
List of flags:
7:FBOF First block of file 6:LBOF Last block of file (FBOF & LBOF are both set if the block is only block of the file) 5:RO Read only file (set only with FBOF) 4:HIDDEN Hidden file 3:INUSE Block is reserved for use 2:NBAD Block is consider as bad block if this is 0 1:VOL Volume label. This will be used to mark blocks used to store directory hierarchy. 0:LOCK Not specified. Could be used for soft file lock implementation.
Short example of usage:
char buf[13];
mfs fs(0xA0); // Initialize mFS
pc.printf("\n\r\n\r[mFS] Formatting... %u bad block headers.\n\r", fs.mkfs(true));
// Sure you don't have to format on every boot :)
fs.createFile("datalog.txt");
file *fp = new file(&fs, "datalog.txt", AWRITE); /* Open the file in rw mode
(there is no maximum limit for file handles
but 65536 is kinda practical limit)
// Write 1000 Hello worlds
for (n=0; n < 1000; n++)
fp->write("Hello world!", 1);
rewind(); // Rewind back to begining of the file (will automatically flush what has not been yet saved)
// Read some bytes
fp->read(buf, 13);
pc.printf("%s\n\r", buf);
delete fp; // Delete file handle (will flush if necessary)
fs.removeFile("datalog.txt"); // Remove the file created
For examples of usage see: http://mbed.org/users/HBP/programs/mFS_sample/
Please log in to post comments.
