MemFilesystem_test

Dependencies:   SDFileSystem mbed

Committer:
mzta
Date:
Wed Apr 01 17:38:22 2015 +0000
Revision:
1:48383762a1ff
Parent:
0:f1015c4245f6
add  speed comparison test.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mzta 0:f1015c4245f6 1 #include "mbed.h"
mzta 0:f1015c4245f6 2 #include "MemFileSystem.h"
mzta 0:f1015c4245f6 3 #include "SDFileSystem.h"
mzta 0:f1015c4245f6 4
mzta 0:f1015c4245f6 5 SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd");
mzta 1:48383762a1ff 6 Timer timer;
mzta 0:f1015c4245f6 7
mzta 0:f1015c4245f6 8 const char *mem_file_path = "/ram/out.txt";
mzta 1:48383762a1ff 9 const char *sd_file_path = "/sd/out.txt";
mzta 1:48383762a1ff 10 const char *dump_path = "/sd/fatdump";
mzta 1:48383762a1ff 11 const int DATA_SIZE = 100 * 1024;
mzta 1:48383762a1ff 12 uint8_t data_written[DATA_SIZE] = { 0 };
mzta 1:48383762a1ff 13
mzta 1:48383762a1ff 14 void writeFile(const char *path)
mzta 1:48383762a1ff 15 {
mzta 1:48383762a1ff 16 FILE *f = fopen(path, "w");
mzta 1:48383762a1ff 17 for (int i = 0; i < DATA_SIZE; i++) {
mzta 1:48383762a1ff 18 data_written[i] = rand() % 0XFF;
mzta 1:48383762a1ff 19 fprintf(f, "%c", data_written[i]);
mzta 1:48383762a1ff 20 }
mzta 1:48383762a1ff 21 fclose(f);
mzta 1:48383762a1ff 22 }
mzta 1:48383762a1ff 23
mzta 1:48383762a1ff 24 bool readFile(const char *path)
mzta 1:48383762a1ff 25 {
mzta 1:48383762a1ff 26 bool result = true;
mzta 1:48383762a1ff 27
mzta 1:48383762a1ff 28 FILE *f = fopen(path, "r");
mzta 1:48383762a1ff 29 for (int i = 0; i < DATA_SIZE; i++) {
mzta 1:48383762a1ff 30 uint8_t data = fgetc(f);
mzta 1:48383762a1ff 31 if (data != data_written[i]) {
mzta 1:48383762a1ff 32 result = false;
mzta 1:48383762a1ff 33 break;
mzta 1:48383762a1ff 34 }
mzta 1:48383762a1ff 35 }
mzta 1:48383762a1ff 36 fclose(f);
mzta 1:48383762a1ff 37
mzta 1:48383762a1ff 38 return result;
mzta 0:f1015c4245f6 39 }
mzta 0:f1015c4245f6 40
mzta 0:f1015c4245f6 41 int main()
mzta 1:48383762a1ff 42 {
mzta 0:f1015c4245f6 43 MemFileSystem *ramfs1 = new MemFileSystem("ram");
mzta 0:f1015c4245f6 44 ramfs1->format();
mzta 1:48383762a1ff 45
mzta 1:48383762a1ff 46 /**
mzta 1:48383762a1ff 47 * MemFileSystem read/write test
mzta 1:48383762a1ff 48 */
mzta 0:f1015c4245f6 49 {
mzta 0:f1015c4245f6 50 printf("Mem: Writing ... ");
mzta 1:48383762a1ff 51 writeFile(mem_file_path);
mzta 0:f1015c4245f6 52 printf("[OK]\r\n");
mzta 0:f1015c4245f6 53
mzta 0:f1015c4245f6 54 printf("Mem: Reading data ... ");
mzta 1:48383762a1ff 55 printf("[%s]\r\n", readFile(mem_file_path) ? "OK" : "FAIL");
mzta 0:f1015c4245f6 56 }
mzta 0:f1015c4245f6 57
mzta 1:48383762a1ff 58 /**
mzta 1:48383762a1ff 59 * MemFileSystem dump/load test
mzta 1:48383762a1ff 60 */
mzta 0:f1015c4245f6 61 {
mzta 0:f1015c4245f6 62 printf("Dump from MemFs to SDFs ... ");
mzta 1:48383762a1ff 63 FILE *f = fopen(dump_path, "w");
mzta 0:f1015c4245f6 64 ramfs1->dump(f);
mzta 0:f1015c4245f6 65 fclose(f);
mzta 1:48383762a1ff 66 printf("[OK]\n");
mzta 0:f1015c4245f6 67 }
mzta 0:f1015c4245f6 68
mzta 0:f1015c4245f6 69 delete ramfs1;
mzta 0:f1015c4245f6 70 MemFileSystem *ramfs2 = new MemFileSystem("ram");
mzta 0:f1015c4245f6 71
mzta 0:f1015c4245f6 72 {
mzta 0:f1015c4245f6 73 printf("Load from SDFs to MemFs ... ");
mzta 1:48383762a1ff 74 FILE *f = fopen(dump_path, "r");
mzta 0:f1015c4245f6 75 ramfs2->load(f);
mzta 0:f1015c4245f6 76 fclose(f);
mzta 1:48383762a1ff 77 printf("[OK]\n");
mzta 0:f1015c4245f6 78 }
mzta 0:f1015c4245f6 79
mzta 1:48383762a1ff 80 printf("Mem: Reading data ... ");
mzta 1:48383762a1ff 81 printf("[%s]\n", readFile(mem_file_path) ? "OK" : "FAIL");
mzta 1:48383762a1ff 82
mzta 1:48383762a1ff 83 /*
mzta 1:48383762a1ff 84 * FileSytem speed comparison
mzta 1:48383762a1ff 85 */
mzta 0:f1015c4245f6 86 {
mzta 1:48383762a1ff 87 int cnt = 10;
mzta 1:48383762a1ff 88 int s, e;
mzta 1:48383762a1ff 89
mzta 1:48383762a1ff 90 timer.start();
mzta 1:48383762a1ff 91
mzta 1:48383762a1ff 92 s = timer.read_us();
mzta 1:48383762a1ff 93 printf("Mem: Writing 10 times ...");
mzta 1:48383762a1ff 94 for (int i = 0; i < cnt; i++) {
mzta 1:48383762a1ff 95 writeFile(mem_file_path);
mzta 0:f1015c4245f6 96 }
mzta 1:48383762a1ff 97 e = timer.read_us();
mzta 1:48383762a1ff 98 printf("[OK] avg = %dusec\n", (e - s) / cnt );
mzta 1:48383762a1ff 99
mzta 1:48383762a1ff 100 s = timer.read_us();
mzta 1:48383762a1ff 101 printf("SD: Writing 10 times ...");
mzta 1:48383762a1ff 102 for (int i = 0; i < cnt; i++) {
mzta 1:48383762a1ff 103 writeFile(sd_file_path);
mzta 1:48383762a1ff 104 }
mzta 1:48383762a1ff 105 e = timer.read_us();
mzta 1:48383762a1ff 106 printf("[OK] avg = %dusec\n", (e - s) / cnt );
mzta 1:48383762a1ff 107
mzta 1:48383762a1ff 108 timer.stop();
mzta 0:f1015c4245f6 109 }
mzta 0:f1015c4245f6 110 }