
2017幎12æãARMã¯ARMãã€ã¯ãã³ã³ãããŒã©çšã®æ°ããããŒãžã§ã³ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãarm mbed os v.5.7ãïŒ2018幎1æ17æ¥ã«ãªãªãŒã¹ãããããŒãžã§ã³5.7.3ïŒãå°å
¥ãããLittleFileSystemããšåŒã°ããçµ±åäœæè
ã®ãã¡ã€ã«ã·ã¹ãã ãŸãã¯åã«LittleFSã æ¬æ¥ããã®æ°è£œåã«ã€ããŠã話ãããããšãææ¡ããŸãã
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 ïŒç©çã¡ãã£ã¢ã®ååšãå¿
èŠãšããªãããããã¬ãŒãã³ã°ã«éåžžã«äŸ¿å©ã§ãïŒãããã³ä»ã®ã¿ã€ãã®ããã€ã¹ãå©çšå¯èœã§ãã
ãã®ããã
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();
æåã¯ã
testing.txtãã¡ã€ã«ãèªã¿åã/æžã蟌ã¿çšã«éãããšããŸãã ã¡ã€ã³ãã©ã¡ãŒã¿ïŒãã¡ã€ã«ã·ã¹ãã ãšãã¡ã€ã«åïŒã«å ããŠããorããããæäœã䜿çšããŠçµåããã
O_RDWRãã©ã°ãš
O_TRUNCãã©ã°ãæž¡ãããšã«æ³šæããŠãã ãããããã¯ãOSãæäœããããã®èŠåã§ãã æåã®æ¹æ³ã¯ãæžã蟌ã¿/èªã¿åãçšã«ãã¡ã€ã«ãäœæãŸãã¯éãããšãæå³ãã2çªç®ã®æ¹æ³ã¯ããã¡ã€ã«ãååšããŠããŠãå®å
šã«äžæžããããæ
å ±ã§æºããããŠããããšãæå³ããŸãã ãã©ã°ã®å®å
šãªãªã¹ãã¯ãããããŒãã¡ã€ã«ã
mbed_retarget.h ãã§æäŸãããŸãã
#define O_RDONLY 0
ãã¡ã€ã«ãæ£åžžã«éãããïŒäœæãããïŒå Žåã
ãããã¯ãããã¡ãŒã«å«ãŸãããã®ããŸãã¯æåã®10ãã€ããæžã蟌ãŸããŸãã æäœã®çµæã¯ãæ£åžžãªèšé²äžã«æžã蟌ãŸãããã€ãæ°ã«ãªãããããã°äžã«ãã®å€ã端æ«ã«è¡šç€ºããŸãã
ãã¡ã€ã«ããããŒã¿ãæ£åžžã«èªã¿åãã«ã¯ããã¡ã€ã«ã®å
é ã«æ»ãå¿
èŠããããŸããããã«ã¯
fhandle.rewindïŒïŒã䜿çšããŸãã ãŸããèªã¿åããããã€ãæ°ãã«ãŠã³ããããã®æ°ãšãã¡ã€ã«ãµã€ãºïŒ
fhandle.sizeïŒïŒ ïŒã端æ«ã«åºåããŸãã
ãããã°ã®ããã»ã¹ã§ã¯ããã¡ã€ã«ãã1è¡ãèªã¿åã
rblockãããã¡ãŒã調ã¹ãŸãã ãã¹ãŠãOKã§ãïŒ
ãã¡ã€ã«ã«å€¢äžã«ãªã£ãã®ã§ããã¡ã€ã«ã·ã¹ãã ã®ã«ãŒããã£ã¬ã¯ããªã«ãããã®ãèŠãŠã¿ãŸãããã ãã£ã¬ã¯ããªãéãããã£ã¬ã¯ããªå
ã®ãšã³ããªã®çªå·ãååŸããŸãïŒ
dhandle.readdirïŒïŒ ã ããã§ã
dhandle.readïŒeïŒãã0ããè¿ããŸã§ããã¹ãŠã®ãã¡ã€ã«ã®ååãèªã¿åããŸãããã£ã¬ã¯ããªã«ãšã³ããªã¯ãããããŸããã ãã¡ã€ã«ã®ååã衚瀺ãããã£ã¬ã¯ããªãéããŸãã
ãããã°ç«¯æ«ã®è¡ã«æå¿ããŸãã
ã¿ããªã«æè¬ããŸãã