Revised to support ability to have both SD and USB drives mounted.
Dependents: Multi-FileSystem Multi-FileSystem
Fork of FATFileSystem by
Diff: MemFileSystem.h
- Revision:
- 11:2f7ad4af3ec1
- Parent:
- 3:e960e2b81a3c
- Child:
- 12:d816f503fc6f
--- a/MemFileSystem.h Sun Mar 13 19:11:54 2016 +0000 +++ b/MemFileSystem.h Thu Jul 20 10:58:56 2017 +0000 @@ -8,45 +8,52 @@ #include "FATFileSystem.h" +// 4 Bytes / Sector, each 512 Bytes - malloc'd as required +// Value was 2000 (8K) +#define NUM_SECTORS 500 +#define SECTOR_SIZE 512 + +// moved the zeroed RAM buffer to flash, +// so it doesn't waste precious RAM +static const char zero[SECTOR_SIZE] = {0}; + namespace mbed { - class MemFileSystem : public FATFileSystem { public: - - // 2000 sectors, each 512 bytes (malloced as required) - char *sectors[2000]; + // NUM_SECTORS sectors, each 512 bytes (malloced as required) + char *sectors[NUM_SECTORS]; MemFileSystem(const char* name) : FATFileSystem(name) { memset(sectors, 0, sizeof(sectors)); } - + virtual ~MemFileSystem() { - for(int i = 0; i < 2000; i++) { + for(int i = 0; i < NUM_SECTORS; i++) { if(sectors[i]) { free(sectors[i]); } } } - + // read a sector in to the buffer, return 0 if ok virtual int disk_read(char *buffer, int sector) { if(sectors[sector] == 0) { // nothing allocated means sector is empty - memset(buffer, 0, 512); + memset(buffer, 0, SECTOR_SIZE); } else { - memcpy(buffer, sectors[sector], 512); + memcpy(buffer, sectors[sector], SECTOR_SIZE); } return 0; } - + // write a sector from the buffer, return 0 if ok virtual int disk_write(const char *buffer, int sector) { // if buffer is zero deallocate sector - char zero[512]; - memset(zero, 0, 512); - if(memcmp(zero, buffer, 512)==0) { + //char zero[SECTOR_SIZE] = {0}; // DS this used to be a ram buffer + //memset(zero, 0, SECTOR_SIZE); + if(memcmp(zero, buffer, SECTOR_SIZE)==0) { if(sectors[sector] != 0) { free(sectors[sector]); sectors[sector] = 0; @@ -55,23 +62,21 @@ } // else allocate a sector if needed, and write if(sectors[sector] == 0) { - char *sec = (char*)malloc(512); + char *sec = (char*)malloc(SECTOR_SIZE); if(sec==0) { return 1; // out of memory } sectors[sector] = sec; } - memcpy(sectors[sector], buffer, 512); + memcpy(sectors[sector], buffer, SECTOR_SIZE); return 0; } - + // return the number of sectors virtual int disk_sectors() { return sizeof(sectors)/sizeof(sectors[0]); } - }; - } #endif \ No newline at end of file