J Daniel Martinez C
/
Practica5B-Escitura-SDUSB
Escritura SD USB
Fork of FileSys-MultiFileSystem by
Revision 7:a487f18bd99b, committed 2016-05-17
- Comitter:
- dan_cuspi
- Date:
- Tue May 17 21:00:10 2016 +0000
- Parent:
- 6:ea80c5a132b6
- Commit message:
- Escritura USB/SD
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r ea80c5a132b6 -r a487f18bd99b main.cpp --- a/main.cpp Sun Mar 13 19:21:46 2016 +0000 +++ b/main.cpp Tue May 17 21:00:10 2016 +0000 @@ -1,275 +1,12 @@ -/// -/// MultiFileSystem -/// -/// This supports both USB and SD File systems both being mounted at the same time. -/// -/// Untested: -/// * live plug/unplug of either/both -/// * Concurrent access (e.g. copy from one to the other). -/// #include "mbed.h" #include "MSCFileSystem.h" #include "SDFileSystem.h" MSCFileSystem fs("fs"); -SDFileSystem sd(p5, p6, p7, p8, "sd", p11, SDFileSystem::SWITCH_NEG_NO, 15000000); - -Timer timer; - -char buffer[4096]; // someplace to stuff random data. -#define TESTSIZE 1048576 -//#define TESTSIZE 100 - - - -void SDWriteTest(const char * fname) -{ - printf("\r\n"); - printf("SDWriteTest : writing %d B using %d B buffer into %s...\r\n", TESTSIZE, sizeof(buffer), fname); - FileHandle* file = sd.open(fname, O_WRONLY | O_CREAT | O_TRUNC); - if (file != NULL) { - timer.start(); - for (int i = 0; i < (TESTSIZE / sizeof(buffer)); i++) { - if (file->write(buffer, sizeof(buffer)) != sizeof(buffer)) { - timer.stop(); - printf(" write error!\r\n"); - timer.reset(); - return; - } - } - timer.stop(); - if (file->close()) - printf(" failed to close file!\r\n"); - else - printf(" Result: %.2f KB/s\r\n", 1024 / (timer.read_us() / 1000000.0)); - timer.reset(); - } else { - printf(" failed to create file!\r\n"); - } -} - -void SDReadTest(const char * fname) -{ - printf("\r\n"); - printf("SDReadTest : reading %d B using %d B buffer from %s...\r\n", TESTSIZE, sizeof(buffer), fname); - FileHandle* file = sd.open(fname, O_RDONLY); - if (file != NULL) { - timer.start(); - int iterations = 0; - while (file->read(buffer, sizeof(buffer)) == sizeof(buffer)) - iterations++; - timer.stop(); - if (iterations != (TESTSIZE / sizeof(buffer))) - printf(" read error!\r\n"); - else if (file->close()) - printf(" failed to close file!\r\n"); - else if (sd.remove(fname)) - printf(" failed to delete file!\r\n"); - else - printf(" Result: %.2f KB/s\r\n", 1024 / (timer.read_us() / 1000000.0)); - timer.reset(); - } else { - printf(" failed to open file!\n"); - } -} - -// ==================================================== - -void STDIOWriteTest(const char * fqfname) -{ - printf("\r\n"); - printf("STDIOWriteTest: writing %d B using %d B buffer into %s...\r\n", TESTSIZE, sizeof(buffer), fqfname); - FILE * file = fopen(fqfname, "w"); - if (file != NULL) { - timer.start(); - for (int i = 0; i < (TESTSIZE / sizeof(buffer)); i++) { - if (fwrite(buffer, 1, sizeof(buffer), file) != sizeof(buffer)) { - timer.stop(); - printf(" write error!\r\n"); - timer.reset(); - return; - } - } - timer.stop(); - if (fclose(file)) - printf(" failed to close file!\r\n"); - else - printf(" Result: %.2f KB/s\r\n", 1024 / (timer.read_us() / 1000000.0)); - timer.reset(); - } else { - printf(" failed to create file!\r\n"); - } -} - -void STDIOReadTest(const char * fqfname) -{ - printf("\r\n"); - printf("STDIOReadTest : reading %d B using %d B buffer from %s...\r\n", TESTSIZE, sizeof(buffer), fqfname); - FILE * fh = fopen(fqfname, "r"); - if (fh) { - timer.start(); - int iterations = 0; - while (fread(buffer, 1, sizeof(buffer), fh) == sizeof(buffer)) - iterations++; - timer.stop(); - if (iterations != (TESTSIZE / sizeof(buffer))) - printf(" read error! on iteration %d\r\n", iterations); - else if (fclose(fh)) - printf(" failed to close file!\r\n"); - else if (remove(fqfname)) - printf(" failed to delete file!\r\n"); - else - printf(" Result: %.2f KB/s\r\n", 1024 / (timer.read_us() / 1000000.0)); - timer.reset(); - } else { - printf(" failed to open file!\r\n"); - } -} - +//SDFileSystem sd(p5, p6, p7, p8, "sd", p11, SDFileSystem::SWITCH_NEG_NO, 15000000); -void ShowDir(char *dir, int depth = 0) -{ - DIR *dp; - struct dirent *dirp; - - dp = opendir(dir); - if (dp) { - printf("\r\nDirectory %s\r\n", dir); - ++depth; - while((dirp = readdir(dp)) != NULL) { - printf("%*s %s\r\n", (depth < 10) ? depth : 10, "", dirp->d_name); - ShowDir(dirp->d_name, depth); - } - closedir(dp); - } -} - - - -// ==================================================== - - -int main() -{ - printf("\r\n\r\n\r\n\r\n"); - printf("FileSys-Multi Test. Build " __DATE__ " " __TIME__ "\r\n"); - - //Configure CRC, large frames, and write validation - sd.crc(true); - sd.large_frames(true); - sd.write_validation(true); - - //Fill the buffer with random data for the write test - srand(time(NULL)); - for (int i = 0; i < sizeof(buffer); i++) - buffer[i] = rand(); - - bool success = false; - do { - wait(0.5); - - if (!sd.card_present()) { - printf("\r\nNo SD card present!\r\n"); - continue; - } - - printf("\r\nMounting SD card...\r\n"); - if (sd.mount() != 0) { - printf("failed to mount SD!\r\n"); - continue; - } - printf(" success!\r\n"); - printf("\tCard type: "); - SDFileSystem::CardType cardType = sd.card_type(); - if (cardType == SDFileSystem::CARD_NONE) - printf("None\r\n"); - else if (cardType == SDFileSystem::CARD_MMC) - printf("MMC\r\n"); - else if (cardType == SDFileSystem::CARD_SD) - printf("SD\r\n"); - else if (cardType == SDFileSystem::CARD_SDHC) - printf("SDHC\r\n"); - else - printf("Unknown\r\n"); - - printf("\r\nMounting FS card...\r\n"); - if (fs.mount() != 0) { - printf("failed to mount FS!\r\n"); - continue; - } - printf(" success!\r\n"); - - //Display the card capacity - printf("\tSectors: %u\r\n", sd.disk_sectors()); - printf("\tCapacity: %.1fMB\r\n", sd.disk_sectors() / 2048.0); - - STDIOWriteTest("/fs/fsfile1.bin"); - STDIOReadTest("/fs/fsfile1.bin"); - - STDIOWriteTest("/sd/sdfile1.bin"); - STDIOReadTest("/sd/sdfile1.bin"); - - SDWriteTest("sdfile2.bin"); - SDReadTest("sdfile2.bin"); - - STDIOWriteTest("/fs/fsfile2.bin"); - STDIOReadTest("/fs/fsfile2.bin"); - - STDIOWriteTest("/fs/fsfinal.txt"); - STDIOWriteTest("/sd/sdfinal.txt"); - - /// * mkdir - mkdir("/sd/sd_dir", 0777); // @TODO check the permissions mask. ignored? - mkdir("/fs/fs_dir", 0777); // @TODO check the permissions mask. ignored? - STDIOWriteTest("/sd/sd_dir/sdfile3.bin"); - STDIOWriteTest("/fs/fs_dir/fsfile3.bin"); - - /// * opendir - ShowDir("/sd"); - ShowDir("/fs"); - - /// * rename starts with an unlink - printf("\r\nrename:\r\n"); - remove("/sd/sdfinal.log"); - int rn = rename("/sd/sdfinal.txt", "/sd/sdfinal.log"); - printf(" rename(%s,%s) returned %d\r\n", "/sd/sdfinal.txt", "/sd/sdfinal.log", rn); - remove("/fs/fsfinal.log"); - rn = rename("/fs/fsfinal.txt", "/fs/fsfinal.log"); - printf(" rename(%s,%s) returned %d\r\n", "/fs/fsfinal.txt", "/fs/fsfinal.log", rn); - - /// * live plug/unplug of either/both - /// * Concurrent access (e.g. copy from one to the other). - - #if 0 - /// * fstat can be run against a specific object (e.g. sd.fstat) - /// but it will require deeper hooks into mbed library to get - /// the generalized form of fstat(file, &info); - printf("fstat(%s):\r\n", "sdfinal.txt"); - FILINFO info; - if (sd.fstat("sdfinal.txt", &info) == 0) { - printf(" size: %d\r\n", info.fsize); - printf(" date: %d\r\n", info.fdate); - printf(" time: %d\r\n", info.ftime); - printf(" attr: %X\r\n", info.fattrib); - printf(" name: %s\r\n", info.fname); - } - // scraps that can have value... - printf("Timestamp: %u/%02u/%02u, %02u:%02u\n", - (info.fdate >> 9) + 1980, info.fdate >> 5 & 15, info.fdate & 31, - info.ftime >> 11, info.ftime >> 5 & 63); - printf("Attributes: %c%c%c%c%c\n", - (info.fattrib & AM_DIR) ? 'D' : '-', - (info.fattrib & AM_RDO) ? 'R' : '-', - (info.fattrib & AM_HID) ? 'H' : '-', - (info.fattrib & AM_SYS) ? 'S' : '-', - (info.fattrib & AM_ARC) ? 'A' : '-'); - #endif - - //Unmount the SD card - printf("\r\nunmounting all now...\r\n"); - sd.unmount(); - fs.unmount(); - success = true; - - } while (!success); -} \ No newline at end of file + + int main() { + + + } \ No newline at end of file
diff -r ea80c5a132b6 -r a487f18bd99b mbed.bld --- a/mbed.bld Sun Mar 13 19:21:46 2016 +0000 +++ b/mbed.bld Tue May 17 21:00:10 2016 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/87f2f5183dfb \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/7c328cabac7e \ No newline at end of file