diff options
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.cpp | 156 |
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); +} |