LittleFSãã¡ã€ã«ã·ã¹ãã ã®äž»ãªå©ç¹ã¯æ¬¡ã®ãšããã§ãã
- ãã€ã¯ãã³ã³ãããŒã©ãŒã®ãªãœãŒã¹ã«å¯ŸããèŠæ±ãäœãã ã³ãŒãã¯ååž°åŒã³åºãã䜿çšãããåçã¡ã¢ãªå²ãåœãŠãªãã§åäœããŸãã ãLittleFSãã§ã¯ããã©ã€ãã«æžã蟌ãŸããããªã¥ãŒã ããã©ã€ãèªäœã®ããªã¥ãŒã ã«é¢ä¿ãªããæ¶è²»ãããRAMã®éã¯åžžã«äžå®ã§ãã
- ã¡ãã£ã¢ãããã¯ã®åå©çšãæå°éã«æããããšãã§ãããã¡ãã£ã¢ã®æ©èãå¹³æºåãããœãããŠã§ã¢ããŒã«ã®å©çšå¯èœæ§ïŒãããããŠã§ã¢ã¬ããªã³ã°ïŒã
- åé»ã«å¯Ÿããæµæã ãã®æ©èœã¯ãã¡ãã£ã¢ã®é»æºé害ã«é¢ããå®æçãªèæ ®äºé ã§ãããããŒã¿ãäžæžããããã«æ°ããå Žæã«ä¿åããããã³ããŒãªã³ã©ã€ãïŒCOWïŒãã®ã¡ã«ããºã ã䜿çšããŸãã
ã·ã¹ãã ã¯ããã¡ã€ã«ãšãã£ã¬ã¯ããªãæäœããããã®POSIXé¢æ°ã®ãã«ã»ããããµããŒãããŸãã
ãã¡ã€ã«ã·ã¹ãã ã¯arm mbed osãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«çµ±åãããŠããããšãæãåºãããŠãã ããããã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ã補é å ã«ãã£ãŠç©æ¥µçã«éçºããã³ãµããŒããããŠããŸãã ãããã£ãŠãããã§ã¯mbed osã«å°ãæ°ãåãããŠãããæ¢ã«ããã䜿çšããããšããã人ã¯æ¬¡ã®ããã€ãã®æ®µèœãã¹ã¯ããŒã«ã§ããŸãã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯C / C ++ã§æžãããŠãããOSã®äž»ãªå©ç¹ãšãã®äž»ãªæ¬ ç¹ã¯ãç§ã®æèŠã§ã¯ïŒããã¯é説çã«èãããŠãïŒããŒããŠã§ã¢ããã®éåžžã«é«ãæœè±¡åã§ãã
STM32ãã€ã¯ãã³ã³ãããŒã©ãŒã䜿çšããŠããå ŽåïŒç¹ã«è©±ããŠããïŒã HALããã³SPLã©ã€ãã©ãªãŒã䜿çšããŠãã人ïŒããã«ãã¬ãžã¹ã¿ãŒãæåã§æäœãã人ïŒã¯ãæ§æã®ããã«äœæããå¿ èŠãããã³ãŒãã®è¡æ°ãèŠããŠããŸãããã³PA_5ã®ç«ã¡äžãããšããžã§ã®å²ã蟌ã¿ïŒããŒãã®ã¯ãããã³ã°ãæå¹ã«ããç¹å®ã®åºåã®åäœã¢ãŒããèšå®ããå®éã®å²ã蟌ã¿ãèšå®ããå²ã蟌ã¿ãæå¹ã«ããŸã-ãã®åŸããã³ãã©ãŒãèšè¿°ããŸãã
mbed osã§ã¯ããã¹ãŠãã¯ããã«ç°¡åã«ãªããŸãã
InterruptIn irq_button1(PA_5); irq_button1.fall(led_blink);
æåã«ãå²ã蟌ã¿ãçºçããããç¶æ ãå€æŽããããšã§ãå²ã蟌ã¿ã«ååãä»ããŠåºåã瀺ããŸããã 2è¡ç®ã§ã¯ããã³ãã©ãŒã«ç§»åããå¿ èŠããããµã€ã³ïŒä¿¡å·ã®ç«ã¡äžãã ãç«ã¡äžãããšããžïŒã瀺ããå²ã蟌ã¿ãã³ãã©ãŒèªäœã®ååïŒ led_blink ïŒã瀺ããŸããã
é«ã¬ãã«ã®æœè±¡åã¯äŸ¿å©ã§ãããåå¿è ã®åå¿è ã¯çŸæç¹ã§ãã€ã¯ãã³ã³ãããŒã©ãŒã§äœãèµ·ãã£ãŠããã®ããŸã£ããç解ããŠããªããããå®éã«ã¯1è¡ã®ã³ãŒãã§æ°åã®å€ãæ°åã®ã¬ãžã¹ã¿ãŒã«æžã蟌ãŸããŸãã ãããŠãã¡ãããããã¯ããŸãè¯ããããŸããã
mbed osã䜿ãå§ããæãç°¡åãªæ¹æ³ã¯ã mbed.comããŒã¿ã«ã«ã¢ã¯ã»ã¹ããŠéçºè ãšããŠç»é²ããããšã§ãïŒé»åã¡ãŒã«ã«ãã確èªã䌎ãåºæ¬ç»é²ïŒã ããããã¯ããªã³ã©ã€ã³ã³ã³ãã€ã©ãå©çšã§ããããã«ãªããŸããããã¯æåã«éèŠãªåœ¹å²ãæãããŸãã èŠããã«ãç§ãã¡ãããããšããŠããããšïŒéå§ãšããŠããããŠãããç°¡åã«ããããã«ã os.mbed.comããŒã¿ã«ã®ãªããžããªããmbed osãå«ãäŸãåãäžã ããããIDEã®ãããžã§ã¯ããšããŠã€ã³ããŒãããçæ³çã«ã¯ããã€ã¯ãã³ã³ãããŒã©ãŒçšã ãšããã§ãOSã¯ããŒã±ãã£ã³ã°ããŒã«ã§ãããããã®äœ¿çšã®ããã«ARMã¯ããããã mbedå¯Ÿå¿ ããããã°ããŒããæšå¥šããŠããŸããäžèŠãããšããµã€ãã®ã«ã¿ãã°ã®ããŒãã®ã¿ãmbed osã«é©ããŠããããã«èŠãããããããŸããã ããããããã¯ãã¡ããããã§ã¯ãããŸããã
å³äžé ã«ã¯ãäœæ¥ãããããã°ããŒããéžæããããã®ãã¿ã³ããããŸãïŒãã¡ãããã«ã¿ãã°å ã®ããŒãã®1ã€ãè³Œå ¥ãããšä»®å®ããŠããŸãïŒã
ãã¿ã³ãã¯ãªãã¯ãããšãç¹å®ã®ããŒããéžæããããã®ãŠã£ã³ããŠã衚瀺ãããŸãã ããã«ã¯ããŠã£ã³ããŠã«å€§ããªç·è²ã®ãã¿ã³ãšã ãã©ãããã©ãŒã ãè¿œå ãããããŸãã
ãã©ãããã©ãŒã ãéžæããããã®ãŠã£ã³ããŠãå¥ã®ãã©ãŠã¶ãŠã£ã³ããŠã§éããŸãããã®äžã§ã STMicroelectronics ããéžæãã䜿çšãããã€ã¯ãã³ã³ãããŒã©ãšåããã€ã¯ãã³ã³ãããŒã©ãã€ã³ã¹ããŒã«ãããŠããããŒããéžæããŸãã 幞éãªããšã«ãèªå®¶è£œã®ãããã°ããŒãã«ã¯STM32F103RBT6ãã€ã¯ãã³ã³ãããŒã©ãŒãšNucleo-F103RBããŒãããããŸãã
è¿ãå°æ¥ãä»»æã®MKã«å¯ŸããŠarm mbed osã䜿çšããŠãããžã§ã¯ããå®è£ ããæ¹æ³ã«é¢ããè³æãäœæããäºå®ã§ãã
ã»ã¬ã¯ã¿ãŒã§éžæããããŒãã®èª¬æãããããŒãžã®å³åŽã§ãã Mbed Compilerã«è¿œå ããã¿ã³ãã¯ãªãã¯ããŸãã
ããäžã«ãäŸããããŸãã æå°ã§æãåçŽãªã Nucleo_blink_led ããéžæããŸãã
éãããŠã£ã³ããŠã®å³äžã§ãã ã³ã³ãã€ã©ãŒã«ã€ã³ããŒã ããã¿ã³ãã¯ãªãã¯ããŸãã
ãªã³ã©ã€ã³ã³ã³ãã€ã©ãéãããããžã§ã¯ãã®ã€ã³ããŒãã確èªããããã«æ±ããããŸãã 確èªåŸãå·ŠåŽã®ãããžã§ã¯ãããªãŒã«ãããžã§ã¯ãã衚瀺ãããŸãã
æ®ã£ãŠããã®ã¯ããããžã§ã¯ãããã¹ã¯ãããIDEã«ã€ã³ããŒãããããšã ãã§ãã ãªã³ã©ã€ã³ã³ã³ãã€ã©ã¯ã ARMçšIAR ã KEIL uVision ã CooCox CoIDE ãããã³ä»ã®å€ãã®ç°å¢ãå«ãå€ãã®IDEããµããŒãããŠããŸãã ã IAR for ARM v.8.20.1 ã ç°å¢ã䜿çšããŠããŸãã ã mbed osã䜿çšããARMã¯ã7.5以äžã®IARããŒãžã§ã³ãæšå¥šããŠããŸãã
å³åŽã®ãããã°ã©ã ã®è©³çŽ°ããããã¯ã§ãã ãšã¯ã¹ããŒã ããã¿ã³ãã¯ãªãã¯ããŸãã
ãããã¢ãããŠã£ã³ããŠã®[ããã°ã©ã ã®ãšã¯ã¹ããŒã]ã§ãã³ã³ãã¥ãŒã¿ãŒã«ã€ã³ã¹ããŒã«ãããŠãããã©ââãããã©ãŒã ãšéçºç°å¢ãéžæããŸãã
ã ãšã¯ã¹ããŒã ããã¿ã³ãã¯ãªãã¯ãããšããªã³ã©ã€ã³ã³ã³ãã€ã©ã¯å°ãèããŠããããžã§ã¯ãã®ã¢ãŒã«ã€ãããã©ãŠã¶ã§ããŠã³ããŒããéå§ããŸãã éœåã®è¯ãå Žæã«ããã±ãŒãžãå±éããéçºç°å¢ãéãããããžã§ã¯ããéããã¡ã€ã³ãã¡ã€ã«ãmain.cppãã§äžèŠãªãã®ããã¹ãŠåé€ããŠãäœæ¥ãéå§ããŸãã
ã¡ãªã¿ã«ããããžã§ã¯ãããšã¯ã¹ããŒãããåã«ãåãã ããã°ã©ã ã®è©³çŽ° ããããã¯å ã®ãã¹ãŠããã¿ãŒã²ããã³ã³ãããŒã©ãŒã®å èµãã©ãã·ã¥ãšRAMã®ãããžã§ã¯ãè² è·ã®çšåºŠãè©äŸ¡ã§ããŸãã [ ãã«ã ]ã¿ããéããŸãã
ããã«ã€ããŠã¯ãããããé·åŒãé 足ãçµäºããŠã mbed osã®ã¯ã€ãã¯ã¹ã¿ãŒãã«ç§»ããLittleFSã«é¢ããäŒè©±ã«æ»ããŸãã
ãã¡ã€ã«ã·ã¹ãã ãæ£ããæ©èœãããã«ã¯ãããããŒãã¡ã€ã«â LittleFileSystem.h âãšãå¿ ç¶çã«ãããžã§ã¯ãã®ã¡ãã£ã¢ã®ããããŒãã¡ã€ã«ãå«ããå¿ èŠããããŸãã ç§ã¯SDã«ãŒãã§äœæ¥ããããšãæ³å®ããŠããã®ã§ããããžã§ã¯ãã«ãã¡ã€ã«ã SDBlockDevice.h ããå«ããŸãã ä»ã®ããã€ã¹ã®äžã§ãã MBRBlockDevice ã HeapBlockDevice ïŒç©çã¡ãã£ã¢ã®ååšãå¿ èŠãšããªãããããã¬ãŒãã³ã°ã«éåžžã«äŸ¿å©ã§ãïŒãããã³ä»ã®ã¿ã€ãã®ããã€ã¹ãå©çšå¯èœã§ãã
// Block device #include "SDBlockDevice.h" // File system #include "LittleFileSystem.h"
ãã®ããã LittleFSãšé£æºããããã®ã¹ã¿ãŒãã¢ãããããžã§ã¯ããæ§ç¯ããéã«ãäžé£ã®ã¢ã¯ã·ã§ã³ãæ€èšããããšãææ¡ããŸãã ãŸããããã€ã¹ãªããžã§ã¯ããäœæïŒããã³ãã®åºåãåæåïŒãããã¡ã€ã«ã·ã¹ãã ãäœæããå¿ èŠããããŸãã 次ã«ããã¡ã€ã«ã·ã¹ãã ãããŠã³ãããã¡ãã£ã¢äžã«ããã€ãã®ãã¡ã€ã«ãäœæããã«ãŒããã£ã¬ã¯ããªãéããŠãããã«å«ãŸãããã¡ã€ã«ã®ãªã¹ããèªã¿åããŸãã
mbed osã§å®è£ ãããã¹ããªãŒã ãæäœããããã®ã¯ã©ã¹ç¶æ¿ããªãŒã«æ³šç®ããŸãããã
ã芧ã®ãšããããã¡ã€ã«ãæäœããããã«ãã¯ã©ã¹ã File ãå šäœãå®è£ ããŸããã ãã£ã¬ã¯ããªãæäœããããã«ãã¯ã©ã¹ã Dir ãããããŸãã ãããã®èª¬æã¯ã ãã¡ã€ã«ãšãã£ã¬ã¯ããªã®ããŒãžã«ãããŸãã
ããããå®éã«ã¯ã1ã€ã®èå³æ·±ããã¥ã¢ã³ã¹ãçŸããŸããã
ã¯ã©ã¹ã File ãã®ãªããžã§ã¯ãã宣èšãã ãã¡ã€ã«ãäœæããããã«èšèšãããFileã¡ãœããïŒFileSystem * fsãconst char * pathãint flags = O_RDONLYïŒã䜿çšããããšãããšãã³ã³ãã€ã©ã¯ãªããžã§ã¯ãã®èªèãæåŠããŸããã
ãŸããã¹ããªãŒã ãæäœããæšæºçãªæ¹æ³ïŒ " stdio.h "ïŒã䜿çšããŠãã¡ã€ã«ãäœæãã " File "ã¯ã©ã¹ã®ã¡ãœããïŒ èªã¿åããæžã蟌ã¿ãªã©ïŒã䜿çšããŠããã«æäœããããšãããšããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯mbed_dieã§æ¥œããã£ãïŒïŒ ãå埩äžèœãªã·ã¹ãã ãšã©ãŒã®ããã»ããµã
ãããã£ãŠãçŸæç¹ã§ã¯ã ARMãµããŒãã«æçŽãæžãããšã«éå®ãã stdioããŒã«ã䜿çšããŠãã¡ã€ã«ãæäœããŸã ã stdioæ©èœã®è©³çŽ°ãªèª¬æã¯ãããšãã°ãã®ãµã€ãã«ãããŸãã
ã ããã³ãŒãïŒ
#include "mbed.h" #include <stdio.h> #include <errno.h> // Block device #include "SDBlockDevice.h" // File systems #include "LittleFileSystem.h" SDBlockDevice bdsd(PB_15, PB_14, PB_13, PB_12); // mosi, miso, sclk, cs LittleFileSystem fs("fs"); /******************************************************************************/ // main() runs in its own thread in the OS int main() { printf("--- Mbed OS filesystem example ---\n"); // Try to mount the filesystem printf("Mounting the filesystem... "); fflush(stdout); int err = fs.mount(&bdsd); printf("%s\n", (err ? "Fail :(" : "OK")); if (err) { // Reformat if we can't mount the filesystem // this should only happen on the first boot printf("No filesystem found, formatting... "); fflush(stdout); err = fs.reformat(&bdsd); printf("%s\n", (err ? "Fail :(" : "OK")); if (err) { error("error: %s (%d)\n", strerror(-err), err); } } // Open the LittleFS.txt file FILE *f = fopen("/fs/LittleFS.txt", "r+"); printf("%s\n", (!f ? "Fail :(" : "OK")); if (!f) { // Create the LittleFS file if it doesn't exist printf("No file found, creating a new file... "); fflush(stdout); f = fopen("/fs/LittleFS.txt", "w+"); printf("%s\n", (!f ? "Fail :(" : "OK")); if (!f) { error("error: %s (%d)\n", strerror(errno), -errno); } } printf("\r Closing \"/fs/LittleFS.txt\"... "); fflush(stdout); err = fclose(f); printf("%s\n", (err < 0 ? "Fail :(" : "OK")); if (err < 0) { error("error: %s (%d)\n", strerror(errno), -errno); } // Open the Habrahabr.txt file f = fopen("/fs/Habrahabr.txt", "r+"); printf("%s\n", (!f ? "Fail :(" : "OK")); if (!f) { // Create the LittleFS file if it doesn't exist printf("No file found, creating a new file... "); fflush(stdout); f = fopen("/fs/Habrahabr.txt", "w+"); printf("%s\n", (!f ? "Fail :(" : "OK")); if (!f) { error("error: %s (%d)\n", strerror(errno), -errno); } } printf("\r Closing \"/fs/Habrahabr.txt\"... "); fflush(stdout); err = fclose(f); printf("%s\n", (err < 0 ? "Fail :(" : "OK")); if (err < 0) { error("error: %s (%d)\n", strerror(errno), -errno); } // Display the root directory printf("Opening the root directory... "); fflush(stdout); DIR *d = opendir("/fs/"); printf("%s\n", (!d ? "Fail :(" : "OK")); if (!d) { error("error: %s (%d)\n", strerror(errno), -errno); } printf("root directory:\n"); while (true) { struct dirent *e = readdir(d); if (!e) { break; } printf(" %s\n", e->d_name); } printf("Closing the root directory... "); fflush(stdout); err = closedir(d); printf("%s\n", (err < 0 ? "Fail :(" : "OK")); if (err < 0) { error("error: %s (%d)\n", strerror(errno), -errno); } // Unmounting printf("Unmounting... "); fflush(stdout); err = fs.unmount(); printf("%s\n", (err < 0 ? "Fail :(" : "OK")); if (err < 0) { error("error: %s (%d)\n", strerror(-err), err); } printf("LittleFS tested successfully!\n"); }
ãŸãã SDBlockDeviceã¯ã©ã¹ã®ãªããžã§ã¯ããäœæããŸãïŒãããŠãç®çã«å¿ããŠåºåã®ååãå³å¯ãªé åºã§æž¡ãããšã«ããããªããžã§ã¯ããåæåããŸãïŒ mosi ã miso ã sclk ã cs ïŒããã³LittleFileSystemïŒfsïŒ ã
次ã«ããã§ã«ã main ãæ©èœã§ããã¡ã€ã«ã·ã¹ãã ã®ããŠã³ããè©Šã¿ãŸãïŒãã¡ãããæ°ããSDã«ãŒãã䜿çšããå Žåã¯æ©èœããŸããïŒã ã¡ãã£ã¢ããã©ãŒããããããã¡ã€ã«ã·ã¹ãã ãå床ããŠã³ãããŸãã
次ã«ããã¡ã€ã«ã LittleFS.txt ããšã Habrahabr.txt ãã1ã€ãã€éããããããèŠã€ããã«äœæããŸãã ãã¡ã€ã«ãéããããéããå¿ èŠããããŸãã
ãã¡ã€ã«ã®æäœãæåããåŸãã«ãŒããã£ã¬ã¯ããªã®å 容ãèªã¿åããå ¥å/åºåã¿ãŒããã«ã«ãã¡ã€ã«åã衚瀺ããŸãã ãã£ã¬ã¯ããªãéããŸãã
ãã¡ã€ã«ã·ã¹ãã ã解äœãããã¡ã€ã«ã·ã¹ãã ã®æ€èšŒãæåããããšã端æ«ã«å ±åããŸãã
ãããŠãããã¯ãããã¬ãŒç«¯æ«ã®ã¡ãã»ãŒãžã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãã
ããã§ãä»æ¥ãç§ãã¡ã¯ã LittleFileSystem ããšåŒã°ãããã€ã¯ãã³ã³ãããŒã©çšã®éåžžã«è¿ä»£çãªãã¡ã€ã«ã·ã¹ãã ã«ã€ããŠãç§ãæãã«ææãªããšã«ã€ããŠè©±ããŸããã
ãã¡ã€ã«ãšãã£ã¬ã¯ããªãæäœããããã€ãã£ããæ段ã䜿çšããŠïŒ Fileã¯ã©ã¹ãšDirã¯ã©ã¹ã䜿çšããŠïŒåé¡ã解決ããããããã®èšäºã®æŽæ°ããçŽæããŸãã
ãæž èŽããããšãããããŸããã
æŽæ°
ãããªã¢ã«ã«ã¯ãç§ãæãã€ããããã«ãäºåã®èª¿æŽãè¡ãæéããããŸããã§ãã-Fileã¯ã©ã¹ã®ã¡ãœããã誀ã£ãŠäœ¿çšããããšããŸããã ãã¡ã€ã«ãäœæïŒãŸãã¯æ¢åã®ãã¡ã€ã«ãéãïŒããã«ã¯ã openã¡ãœããïŒFileSystem * fsãconst char * pathãint flags = O_RDONLYïŒã䜿çšããå¿ èŠããããŸãã ã
ãã®çµæããã¡ã€ã«ãšãã£ã¬ã¯ããªãæäœããããã®Fileã¯ã©ã¹ãšDirã¯ã©ã¹ã®æ°ãããªããžã§ã¯ãã§ã³ãŒããè£å®ãããŸããããšãã°ã
File fhandle; Dir dhandle;
ãã®ããã mbed os OSã«çµ±åããããã¡ã€ã«ãšãã£ã¬ã¯ããªã®å©ããåããŠäœæ¥ããå šäœã®äŸã¯ãããããå€æãããŸãã ãŸãããã¡ã€ã«ãäœæããã³/ãŸãã¯éããšããäºå®ã«å ããŠãããã«äœããæžããŠæ°ããŸãããã ãããã®ç®çã®ããã«ã2ã€ã®ãããã¡ãŒãäœæããŸãã1ã€ããã¯ãã¡ã€ã«ã«è¡ãæžã蟌ãŸãã2ã€ç®ã¯ãã¡ã€ã«ã®å 容ãèæ ®ããŸãã
#define BLOCK_SIZE 16 char block[BLOCK_SIZE] = "tasty cake"; char rblock[BLOCK_SIZE];
ãã®ãããSDã«ãŒãã®å 容ãæäœããããã®ã³ãŒãïŒäžæ¹ããã¡ã€ã«ã·ã¹ãã ãããŠã³ãããã³å解ããæ¹æ³ïŒã
/******************************************************************************/ err = fhandle.open(&fs,"testing.txt", (O_RDWR|O_TRUNC)); if (err<0){ printf("No file found, creating a new file...\n"); fflush(stdout); err = fhandle.open(&fs,"testing.txt", (O_RDWR|O_CREAT));} err = fhandle.write(block,10); if (err<0) printf("Writing error!\n"); printf("Written bytes (%d) ones\n", err); fhandle.rewind(); //go to the file beginning err = fhandle.read(rblock,10); if (err<0) printf("Reading error!\n"); printf("Read bytes (%d) ones\n", err); printf("Read from file: %s\n", rblock); err = fhandle.size(); printf("File size (%d) bytes\n", err); printf("Closing file..."); err = fhandle.close(); if (err<0) printf("Closing file failure!\n"); else printf("...OK\n"); /******************************************************************************/ // Display the root directory printf("Opening the root directory... "); fflush(stdout); err = dhandle.open(&fs,"/"); if (err<0) printf("Opening directory error\n"); else printf("OK\n"); printf("root directory:\n"); struct dirent *e = dhandle.readdir(); //Get the directory entry while (true) { err = dhandle.read(e); //Read while != 0 (end) if (!err) { break; } printf(" %s\n", e->d_name); } printf("Closing the root directory... "); fflush(stdout); err = dhandle.close(); if (err<0) printf("Closing directory error\n"); else printf("OK\n"); /******************************************************************************/
æåã¯ã testing.txtãã¡ã€ã«ãèªã¿åã/æžã蟌ã¿çšã«éãããšããŸãã ã¡ã€ã³ãã©ã¡ãŒã¿ïŒãã¡ã€ã«ã·ã¹ãã ãšãã¡ã€ã«åïŒã«å ããŠããorããããæäœã䜿çšããŠçµåãããO_RDWRãã©ã°ãšO_TRUNCãã©ã°ãæž¡ãããšã«æ³šæããŠãã ãããããã¯ãOSãæäœããããã®èŠåã§ãã æåã®æ¹æ³ã¯ãæžã蟌ã¿/èªã¿åãçšã«ãã¡ã€ã«ãäœæãŸãã¯éãããšãæå³ãã2çªç®ã®æ¹æ³ã¯ããã¡ã€ã«ãååšããŠããŠãå®å šã«äžæžããããæ å ±ã§æºããããŠããããšãæå³ããŸãã ãã©ã°ã®å®å šãªãªã¹ãã¯ãããããŒãã¡ã€ã«ã mbed_retarget.h ãã§æäŸãããŸãã
#define O_RDONLY 0 ///< Open for reading #define O_WRONLY 1 ///< Open for writing #define O_RDWR 2 ///< Open for reading and writing #define O_CREAT 0x0200 ///< Create file if it does not exist #define O_TRUNC 0x0400 ///< Truncate file to zero length #define O_EXCL 0x0800 ///< Fail if file exists #define O_APPEND 0x0008 ///< Set file offset to end of file prior to each write #define O_BINARY 0x8000 ///< Open file in binary mode
ãã¡ã€ã«ãæ£åžžã«éãããïŒäœæãããïŒå Žåã ãããã¯ãããã¡ãŒã«å«ãŸãããã®ããŸãã¯æåã®10ãã€ããæžã蟌ãŸããŸãã æäœã®çµæã¯ãæ£åžžãªèšé²äžã«æžã蟌ãŸãããã€ãæ°ã«ãªãããããã°äžã«ãã®å€ã端æ«ã«è¡šç€ºããŸãã
ãã¡ã€ã«ããããŒã¿ãæ£åžžã«èªã¿åãã«ã¯ããã¡ã€ã«ã®å é ã«æ»ãå¿ èŠããããŸããããã«ã¯fhandle.rewindïŒïŒã䜿çšããŸãã ãŸããèªã¿åããããã€ãæ°ãã«ãŠã³ããããã®æ°ãšãã¡ã€ã«ãµã€ãºïŒ fhandle.sizeïŒïŒ ïŒã端æ«ã«åºåããŸãã
ãããã°ã®ããã»ã¹ã§ã¯ããã¡ã€ã«ãã1è¡ãèªã¿åãrblockãããã¡ãŒã調ã¹ãŸãã ãã¹ãŠãOKã§ãïŒ
ãã¡ã€ã«ã«å€¢äžã«ãªã£ãã®ã§ããã¡ã€ã«ã·ã¹ãã ã®ã«ãŒããã£ã¬ã¯ããªã«ãããã®ãèŠãŠã¿ãŸãããã ãã£ã¬ã¯ããªãéãããã£ã¬ã¯ããªå ã®ãšã³ããªã®çªå·ãååŸããŸãïŒ dhandle.readdirïŒïŒ ã ããã§ã dhandle.readïŒeïŒãã0ããè¿ããŸã§ããã¹ãŠã®ãã¡ã€ã«ã®ååãèªã¿åããŸãããã£ã¬ã¯ããªã«ãšã³ããªã¯ãããããŸããã ãã¡ã€ã«ã®ååã衚瀺ãããã£ã¬ã¯ããªãéããŸãã
ãããã°ç«¯æ«ã®è¡ã«æå¿ããŸãã
ã¿ããªã«æè¬ããŸãã