nkjnm

Dependencies:   MAX44000 nexpaq_mdk

Fork of LED_Demo by Maxim nexpaq

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "SDFileSystem.h"
00003 #include "test_env.h"
00004 #include <algorithm>
00005 #include <stdlib.h>
00006 
00007 #if defined(TARGET_KL25Z)
00008 SDFileSystem sd(PTD2, PTD3, PTD1, PTD0, "sd");
00009 
00010 #elif defined(TARGET_KL46Z)
00011 SDFileSystem sd(PTD6, PTD7, PTD5, PTD4, "sd");
00012 
00013 #elif defined(TARGET_K64F) || defined(TARGET_K66F)
00014 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd");
00015 
00016 #elif defined(TARGET_K22F)
00017 SDFileSystem sd(PTD6, PTD7, PTD5, PTD4, "sd");
00018 
00019 #elif defined(TARGET_K20D50M)
00020 SDFileSystem sd(PTD2, PTD3, PTD1, PTC2, "sd");
00021 
00022 #elif defined(TARGET_nRF51822)
00023 SDFileSystem sd(p12, p13, p15, p14, "sd");
00024 
00025 #elif defined(TARGET_NUCLEO_F030R8) || \
00026       defined(TARGET_NUCLEO_F070RB) || \
00027       defined(TARGET_NUCLEO_F072RB) || \
00028       defined(TARGET_NUCLEO_F091RC) || \
00029       defined(TARGET_NUCLEO_F103RB) || \
00030       defined(TARGET_NUCLEO_F302R8) || \
00031       defined(TARGET_NUCLEO_F303RE) || \
00032       defined(TARGET_NUCLEO_F334R8) || \
00033       defined(TARGET_NUCLEO_F401RE) || \
00034       defined(TARGET_NUCLEO_F410RB) || \
00035       defined(TARGET_NUCLEO_F411RE) || \
00036       defined(TARGET_NUCLEO_L053R8) || \
00037       defined(TARGET_NUCLEO_L073RZ) || \
00038       defined(TARGET_NUCLEO_L152RE)
00039 SDFileSystem sd(D11, D12, D13, D10, "sd");
00040 
00041 #elif defined(TARGET_DISCO_F051R8)
00042 SDFileSystem sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, "sd");
00043 
00044 #elif defined(TARGET_LPC2368)
00045 SDFileSystem sd(p11, p12, p13, p14, "sd");
00046 
00047 #elif defined(TARGET_LPC11U68)
00048 SDFileSystem sd(D11, D12, D13, D10, "sd");
00049 
00050 #elif defined(TARGET_LPC1549)
00051 SDFileSystem sd(D11, D12, D13, D10, "sd");
00052 
00053 #elif defined(TARGET_LPC11U37H_401)
00054 SDFileSystem sd(SDMOSI, SDMISO, SDSCLK, SDSSEL, "sd");
00055 
00056 #else
00057 SDFileSystem sd(p11, p12, p13, p14, "sd");
00058 #endif
00059 
00060 namespace {
00061 char buffer[1024];
00062 const int KIB_RW = 128;
00063 Timer timer;
00064 const char *bin_filename = "/sd/testfile.bin";
00065 }
00066 
00067 bool test_sf_file_write_stdio(const char *filename, const int kib_rw) {
00068     bool result = true;
00069     FILE* file = fopen(filename, "w");
00070     if (file != NULL) {
00071         int byte_write = 0;
00072         timer.start();
00073         for (int i = 0; i < kib_rw; i++) {
00074             if (fwrite(buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) {
00075                 result = false;
00076                 fclose(file);
00077                 printf("Write error!\r\n");
00078                 break;
00079             } else {
00080                 byte_write++;
00081             }
00082         }
00083         timer.stop();
00084         fclose(file);
00085         double test_time_sec = timer.read_us() / 1000000.0;
00086         double speed = kib_rw / test_time_sec;
00087         printf("%d KiB write in %.3f sec with speed of %.4f KiB/s\r\n", byte_write, test_time_sec, speed);
00088         notify_performance_coefficient("write_kibps", speed);
00089     } else {
00090         printf("File '%s' not opened\r\n", filename);
00091         result = false;
00092     }
00093     timer.reset();
00094     return result;
00095 }
00096 
00097 bool test_sf_file_read_stdio(const char *filename, const int kib_rw) {
00098     bool result = true;
00099     FILE* file = fopen(filename, "r");
00100     if (file) {
00101         timer.start();
00102         int byte_read = 0;
00103         while (fread(buffer, sizeof(char), sizeof(buffer), file) == sizeof(buffer)) {
00104             byte_read++;
00105         }
00106         timer.stop();
00107         fclose(file);
00108         double test_time_sec = timer.read_us() / 1000000.0;
00109         double speed = kib_rw / test_time_sec;
00110         printf("%d KiB read in %.3f sec with speed of %.4f KiB/s\r\n", byte_read, test_time_sec, speed);
00111         notify_performance_coefficient("fs_read_kibps", speed);
00112     } else {
00113         printf("File '%s' not opened\r\n", filename);
00114         result = false;
00115     }
00116     timer.reset();
00117     return result;
00118 }
00119 
00120 char RandomChar() {
00121     return rand() % 100;
00122 }
00123 
00124 int main() {
00125     MBED_HOSTTEST_TIMEOUT(15);
00126     MBED_HOSTTEST_SELECT(default_auto);
00127     MBED_HOSTTEST_DESCRIPTION(SD stdio RW Speed);
00128     MBED_HOSTTEST_START("PERF_1");
00129 
00130     // Test header
00131     printf("\r\n");
00132     printf("SD Card Stdio Performance Test\r\n");
00133     printf("File name: %s\r\n", bin_filename);
00134     printf("Buffer size: %d KiB\r\n", (KIB_RW * sizeof(buffer)) / 1024);
00135 
00136     // Initialize buffer
00137     srand(testenv_randseed());
00138     char *buffer_end = buffer + sizeof(buffer);
00139     std::generate (buffer, buffer_end, RandomChar);
00140 
00141     bool result = true;
00142     for (;;) {
00143         printf("Write test...\r\n");
00144         if (test_sf_file_write_stdio(bin_filename, KIB_RW) == false) {
00145             result = false;
00146             break;
00147         }
00148 
00149         printf("Read test...\r\n");
00150         if (test_sf_file_read_stdio(bin_filename, KIB_RW) == false) {
00151             result = false;
00152             break;
00153         }
00154         break;
00155     }
00156     MBED_HOSTTEST_RESULT(result);
00157 }