summaryrefslogtreecommitdiff
path: root/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/sd_perf_stdio/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/sd_perf_stdio/main.cpp')
-rw-r--r--tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/sd_perf_stdio/main.cpp156
1 files changed, 156 insertions, 0 deletions
diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/sd_perf_stdio/main.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/sd_perf_stdio/main.cpp
new file mode 100644
index 0000000000..46c14bcb66
--- /dev/null
+++ b/tmk_core/tool/mbed/mbed-sdk/libraries/tests/mbed/sd_perf_stdio/main.cpp
@@ -0,0 +1,156 @@
+#include "mbed.h"
+#include "SDFileSystem.h"
+#include "test_env.h"
+#include <algorithm>
+#include <stdlib.h>
+
+#if defined(TARGET_KL25Z)
+SDFileSystem sd(PTD2, PTD3, PTD1, PTD0, "sd");
+
+#elif defined(TARGET_KL46Z)
+SDFileSystem sd(PTD6, PTD7, PTD5, PTD4, "sd");
+
+#elif defined(TARGET_K64F)
+SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd");
+
+#elif defined(TARGET_K22F)
+SDFileSystem sd(PTD6, PTD7, PTD5, PTD4, "sd");
+
+#elif defined(TARGET_K20D50M)
+SDFileSystem sd(PTD2, PTD3, PTD1, PTC2, "sd");
+
+#elif defined(TARGET_nRF51822)
+SDFileSystem sd(p12, p13, p15, p14, "sd");
+
+#elif defined(TARGET_NUCLEO_F030R8) || \
+ defined(TARGET_NUCLEO_F070RB) || \
+ defined(TARGET_NUCLEO_F072RB) || \
+ defined(TARGET_NUCLEO_F091RC) || \
+ defined(TARGET_NUCLEO_F103RB) || \
+ defined(TARGET_NUCLEO_F302R8) || \
+ defined(TARGET_NUCLEO_F303RE) || \
+ defined(TARGET_NUCLEO_F334R8) || \
+ defined(TARGET_NUCLEO_F401RE) || \
+ defined(TARGET_NUCLEO_F411RE) || \
+ defined(TARGET_NUCLEO_L053R8) || \
+ defined(TARGET_NUCLEO_L073RZ) || \
+ defined(TARGET_NUCLEO_L152RE)
+SDFileSystem sd(D11, D12, D13, D10, "sd");
+
+#elif defined(TARGET_DISCO_F051R8)
+SDFileSystem sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, "sd");
+
+#elif defined(TARGET_LPC2368)
+SDFileSystem sd(p11, p12, p13, p14, "sd");
+
+#elif defined(TARGET_LPC11U68)
+SDFileSystem sd(D11, D12, D13, D10, "sd");
+
+#elif defined(TARGET_LPC1549)
+SDFileSystem sd(D11, D12, D13, D10, "sd");
+
+#elif defined(TARGET_LPC11U37H_401)
+SDFileSystem sd(SDMOSI, SDMISO, SDSCLK, SDSSEL, "sd");
+
+#else
+SDFileSystem sd(p11, p12, p13, p14, "sd");
+#endif
+
+namespace {
+char buffer[1024];
+const int KIB_RW = 128;
+Timer timer;
+const char *bin_filename = "/sd/testfile.bin";
+}
+
+bool test_sf_file_write_stdio(const char *filename, const int kib_rw) {
+ bool result = true;
+ FILE* file = fopen(filename, "w");
+ if (file != NULL) {
+ int byte_write = 0;
+ timer.start();
+ for (int i = 0; i < kib_rw; i++) {
+ if (fwrite(buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) {
+ result = false;
+ fclose(file);
+ printf("Write error!\r\n");
+ break;
+ } else {
+ byte_write++;
+ }
+ }
+ timer.stop();
+ fclose(file);
+ double test_time_sec = timer.read_us() / 1000000.0;
+ double speed = kib_rw / test_time_sec;
+ printf("%d KiB write in %.3f sec with speed of %.4f KiB/s\r\n", byte_write, test_time_sec, speed);
+ notify_performance_coefficient("write_kibps", speed);
+ } else {
+ printf("File '%s' not opened\r\n", filename);
+ result = false;
+ }
+ timer.reset();
+ return result;
+}
+
+bool test_sf_file_read_stdio(const char *filename, const int kib_rw) {
+ bool result = true;
+ FILE* file = fopen(filename, "r");
+ if (file) {
+ timer.start();
+ int byte_read = 0;
+ while (fread(buffer, sizeof(char), sizeof(buffer), file) == sizeof(buffer)) {
+ byte_read++;
+ }
+ timer.stop();
+ fclose(file);
+ double test_time_sec = timer.read_us() / 1000000.0;
+ double speed = kib_rw / test_time_sec;
+ printf("%d KiB read in %.3f sec with speed of %.4f KiB/s\r\n", byte_read, test_time_sec, speed);
+ notify_performance_coefficient("fs_read_kibps", speed);
+ } else {
+ printf("File '%s' not opened\r\n", filename);
+ result = false;
+ }
+ timer.reset();
+ return result;
+}
+
+char RandomChar() {
+ return rand() % 100;
+}
+
+int main() {
+ MBED_HOSTTEST_TIMEOUT(15);
+ MBED_HOSTTEST_SELECT(default_auto);
+ MBED_HOSTTEST_DESCRIPTION(SD stdio RW Speed);
+ MBED_HOSTTEST_START("PERF_1");
+
+ // Test header
+ printf("\r\n");
+ printf("SD Card Stdio Performance Test\r\n");
+ printf("File name: %s\r\n", bin_filename);
+ printf("Buffer size: %d KiB\r\n", (KIB_RW * sizeof(buffer)) / 1024);
+
+ // Initialize buffer
+ srand(testenv_randseed());
+ char *buffer_end = buffer + sizeof(buffer);
+ std::generate (buffer, buffer_end, RandomChar);
+
+ bool result = true;
+ for (;;) {
+ printf("Write test...\r\n");
+ if (test_sf_file_write_stdio(bin_filename, KIB_RW) == false) {
+ result = false;
+ break;
+ }
+
+ printf("Read test...\r\n");
+ if (test_sf_file_read_stdio(bin_filename, KIB_RW) == false) {
+ result = false;
+ break;
+ }
+ break;
+ }
+ MBED_HOSTTEST_RESULT(result);
+}