RAM Disk function using Mbed os5 standard library
Please refer following my Notebook page.
/users/kenjiArai/notebook/sd-card-control-new/#
Diff: main.cpp
- Revision:
- 1:58fc0cbd9a41
- Parent:
- 0:308d4fafaafb
- Child:
- 2:4c2328c61af7
--- a/main.cpp Sat Apr 07 01:41:49 2018 +0000 +++ b/main.cpp Thu Dec 26 05:29:38 2019 +0000 @@ -2,11 +2,11 @@ * Mbed Application program * RAM Disck function with FatFs on Mbed-os5 * - * Copyright (c) 2018 Kenji Arai / JH1PJL + * Copyright (c) 2018,'19 Kenji Arai / JH1PJL * http://www.page.sannet.ne.jp/kenjia/index.html * https://os.mbed.com/users/kenjiArai/ * Created: April 7th, 2018 - * Revised: April 7th, 2018 + * Revised: December 26th, 2019 */ // Include -------------------------------------------------------------------- @@ -19,26 +19,56 @@ #include <errno.h> // Definition ----------------------------------------------------------------- -#if defined(TARGET_DISCO_F769NI) +#if defined(TARGET_DISCO_F769NI) || defined(TARGET_DISCO_F746NG) #define USER_SW_ON 1 #else #define USER_SW_ON 0 #endif -#define DISK_SIZE_LIMIT (5 * 512) +#define DISK_SIZE_LIMIT (5 * 512) +#define RAM_DISK_SIZE_4MB (8192 * 512) +#define RAM_DISK_SIZE_2MB (4096 * 512) +#define RAM_DISK_SIZE_1MB (2048 * 512) +#define RAM_DISK_SIZE_512KB (1024 * 512) +#define RAM_DISK_SIZE_128KB (256 * 512) +#define RAM_DISK_SIZE_64KB (128 * 512) +#define RAM_DISK_SIZE_32KB (64 * 512) + +#if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) ||\ + defined(TARGET_NUCLEO_F446RE) || defined(TARGET_NUCLEO_L476RG) ||\ + defined(TARGET_NUCLEO_L152RE) +#define RAM_DISK_SIZE RAM_DISK_SIZE_64KB +#elif defined(TARGET_K64F) || defined(TARGET_NRF52840_DK) ||\ + defined(TARGET_DISCO_F746NG) || defined(TARGET_DISCO_F469NI) + #define RAM_DISK_SIZE RAM_DISK_SIZE_128KB +#elif defined(TARGET_GR_LYCHEE) + #define RAM_DISK_SIZE RAM_DISK_SIZE_512KB +#elif defined(TARGET_RZ_A1H) + #define RAM_DISK_SIZE RAM_DISK_SIZE_2MB +#else + #define RAM_DISK_SIZE RAM_DISK_SIZE_64KB +#endif + +#define DEBUG 0 +#if DEBUG +#define DBG(...) pc.printf(__VA_ARGS__) +#else +#define DBG(...) {;} +#endif // Constructor ---------------------------------------------------------------- DigitalOut led(LED1); -DigitalIn user_sw(USER_BUTTON); +DigitalIn user_sw(BUTTON1, PullUp); Serial pc(USBTX, USBRX, 115200); -HeapBlockDevice bd(128 * 512, 512); // Keep 64KB area +HeapBlockDevice bd(RAM_DISK_SIZE, 512); FATFileSystem fs("fs"); +Timer tmr; // RAM ------------------------------------------------------------------------ // ROM / Constant data -------------------------------------------------------- -char *const opening_msg0 = "RAM Disk (use Heap area) test program"; -char *const opening_msg1 = " -> run on Mbed OS-5\r\n"; +const char *const opening_msg0 = "RAM Disk (use Heap area) test program"; +const char *const opening_msg1 = " -> run on Mbed OS-5\r\n"; // Function prototypes -------------------------------------------------------- void return_error (int ret_val); @@ -60,7 +90,7 @@ if (user_sw == USER_SW_ON) { mon(); } - //pc.printf("line:%d\r\n", __LINE__); + DBG("line:%d\r\n", __LINE__); pc.printf("\r\nStart\r\n"); int error = 0; pc.printf("Welcome to the filesystem example.\r\n"); @@ -83,20 +113,27 @@ fclose(fp); while (pc.readable()) { char c = pc.getc(); // dummy read + mon(); } while (true) { - uint32_t size = get_disk_freespace(); - pc.printf("free %u ", size); + DBG("line:%3d\r\n", __LINE__); + tmr.reset(); + tmr.start(); + uint32_t size_disk = get_disk_freespace(); + uint32_t size_file = get_data_file_size("mydata.txt"); + pc.printf("free disk:%8u, file:%8u ", size_disk, size_file); fp = fopen("/fs/mydata.txt", "a"); - if (size <= DISK_SIZE_LIMIT) { + if (size_disk <= DISK_SIZE_LIMIT) { pc.printf("Reached RAM Disk size limitation!!\r\n"); break; } + DBG("line:%3d\r\n", __LINE__); if(fp != 0) { char tmp[64]; + DBG("line:%d\r\n", __LINE__); seconds = time(NULL); strftime(tmp, 64, "DATE %H:%M:%S,%Y/%m/%d,", localtime(&seconds)); - pc.printf(tmp); + pc.printf("%s", tmp); fprintf(fp, "%s", tmp); pc.printf("%08d;%08d;%08d;%08d;%08d;%08d\r\n", ++data0, ++data1, ++data2, ++data3, ++data4, ++data5); @@ -106,7 +143,10 @@ pc.printf("ERROR\r\n"); } fclose(fp); - Thread::wait(100); + DBG("line:%3d\r\n", __LINE__); + uint32_t time_sd = tmr.read_ms(); + pc.printf("time[ms]:%3d ,", time_sd); + Thread::wait(20); if (user_sw == USER_SW_ON) { break; }