YX ZHANG
/
mbed-os-example-fat-filesystem
SD+FAT FS
main.cpp@16:8051d8156c91, 2018-11-25 (annotated)
- Committer:
- zhangyx
- Date:
- Sun Nov 25 10:06:32 2018 +0000
- Revision:
- 16:8051d8156c91
- Parent:
- 14:49106ed7c2cf
demo code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbed_official | 0:ab69df6f1c47 | 1 | #include "mbed.h" |
mbed_official | 0:ab69df6f1c47 | 2 | #include "FATFileSystem.h" |
zhangyx | 16:8051d8156c91 | 3 | #include "SDBlockDevice.h" |
mbed_official | 0:ab69df6f1c47 | 4 | #include <stdio.h> |
mbed_official | 0:ab69df6f1c47 | 5 | #include <errno.h> |
zhangyx | 16:8051d8156c91 | 6 | /* mbed_retarget.h is included after errno.h so symbols are mapped to |
zhangyx | 16:8051d8156c91 | 7 | * consistent values for all toolchains */ |
zhangyx | 16:8051d8156c91 | 8 | #include "platform/mbed_retarget.h" |
mbed_official | 0:ab69df6f1c47 | 9 | |
zhangyx | 16:8051d8156c91 | 10 | |
zhangyx | 16:8051d8156c91 | 11 | Serial pc(PA_9, PA_10); |
zhangyx | 16:8051d8156c91 | 12 | SDBlockDevice sd(PB_15, PB_14, PB_13, PB_12); |
zhangyx | 16:8051d8156c91 | 13 | FATFileSystem fs("sd", &sd); |
mbed_official | 0:ab69df6f1c47 | 14 | |
mbed_official | 0:ab69df6f1c47 | 15 | void return_error(int ret_val){ |
mbed_official | 0:ab69df6f1c47 | 16 | if (ret_val) |
zhangyx | 16:8051d8156c91 | 17 | pc.printf("Failure. %d\n", ret_val); |
mbed_official | 0:ab69df6f1c47 | 18 | else |
zhangyx | 16:8051d8156c91 | 19 | pc.printf("done.\n"); |
mbed_official | 0:ab69df6f1c47 | 20 | } |
mbed_official | 0:ab69df6f1c47 | 21 | |
mbed_official | 0:ab69df6f1c47 | 22 | void errno_error(void* ret_val){ |
mbed_official | 0:ab69df6f1c47 | 23 | if (ret_val == NULL) |
zhangyx | 16:8051d8156c91 | 24 | pc.printf(" Failure. %d \n", errno); |
mbed_official | 0:ab69df6f1c47 | 25 | else |
zhangyx | 16:8051d8156c91 | 26 | pc.printf(" done.\n"); |
mbed_official | 0:ab69df6f1c47 | 27 | } |
mbed_official | 0:ab69df6f1c47 | 28 | |
zhangyx | 16:8051d8156c91 | 29 | int main() |
zhangyx | 16:8051d8156c91 | 30 | { |
zhangyx | 16:8051d8156c91 | 31 | int error = 0; |
zhangyx | 16:8051d8156c91 | 32 | pc.printf("Welcome to the filesystem example.\n"); |
mbed_official | 0:ab69df6f1c47 | 33 | |
zhangyx | 16:8051d8156c91 | 34 | pc.printf("Opening a new file, numbers.txt."); |
zhangyx | 16:8051d8156c91 | 35 | FILE* fd = fopen("/sd/numbers.txt", "w+"); |
zhangyx | 16:8051d8156c91 | 36 | errno_error(fd); |
mbed_official | 0:ab69df6f1c47 | 37 | |
zhangyx | 16:8051d8156c91 | 38 | for (int i = 0; i < 20; i++){ |
zhangyx | 16:8051d8156c91 | 39 | pc.printf("Writing decimal numbers to a file (%d/20)\r", i); |
zhangyx | 16:8051d8156c91 | 40 | fprintf(fd, "%d\n", i); |
zhangyx | 16:8051d8156c91 | 41 | } |
zhangyx | 16:8051d8156c91 | 42 | pc.printf("Writing decimal numbers to a file (20/20) done.\n"); |
mbed_official | 0:ab69df6f1c47 | 43 | |
zhangyx | 16:8051d8156c91 | 44 | pc.printf("Closing file."); |
zhangyx | 16:8051d8156c91 | 45 | fclose(fd); |
zhangyx | 16:8051d8156c91 | 46 | pc.printf(" done.\n"); |
mbed_official | 0:ab69df6f1c47 | 47 | |
zhangyx | 16:8051d8156c91 | 48 | pc.printf("Re-opening file read-only."); |
zhangyx | 16:8051d8156c91 | 49 | fd = fopen("/sd/numbers.txt", "r"); |
zhangyx | 16:8051d8156c91 | 50 | errno_error(fd); |
mbed_official | 0:ab69df6f1c47 | 51 | |
zhangyx | 16:8051d8156c91 | 52 | pc.printf("Dumping file to screen.\n"); |
zhangyx | 16:8051d8156c91 | 53 | char buff[16] = {0}; |
zhangyx | 16:8051d8156c91 | 54 | while (!feof(fd)){ |
zhangyx | 16:8051d8156c91 | 55 | int size = fread(&buff[0], 1, 15, fd); |
zhangyx | 16:8051d8156c91 | 56 | fwrite(&buff[0], 1, size, stdout); |
zhangyx | 16:8051d8156c91 | 57 | } |
zhangyx | 16:8051d8156c91 | 58 | pc.printf("EOF.\n"); |
mbed_official | 0:ab69df6f1c47 | 59 | |
zhangyx | 16:8051d8156c91 | 60 | pc.printf("Closing file."); |
zhangyx | 16:8051d8156c91 | 61 | fclose(fd); |
zhangyx | 16:8051d8156c91 | 62 | pc.printf(" done.\n"); |
mbed_official | 0:ab69df6f1c47 | 63 | |
zhangyx | 16:8051d8156c91 | 64 | pc.printf("Opening root directory."); |
zhangyx | 16:8051d8156c91 | 65 | DIR* dir = opendir("/sd/"); |
zhangyx | 16:8051d8156c91 | 66 | errno_error(fd); |
mbed_official | 0:ab69df6f1c47 | 67 | |
zhangyx | 16:8051d8156c91 | 68 | struct dirent* de; |
zhangyx | 16:8051d8156c91 | 69 | pc.printf("Printing all filenames:\n"); |
zhangyx | 16:8051d8156c91 | 70 | while((de = readdir(dir)) != NULL){ |
zhangyx | 16:8051d8156c91 | 71 | pc.printf(" %s\n", &(de->d_name)[0]); |
zhangyx | 16:8051d8156c91 | 72 | } |
mbed_official | 0:ab69df6f1c47 | 73 | |
zhangyx | 16:8051d8156c91 | 74 | pc.printf("Closeing root directory. "); |
zhangyx | 16:8051d8156c91 | 75 | error = closedir(dir); |
zhangyx | 16:8051d8156c91 | 76 | return_error(error); |
zhangyx | 16:8051d8156c91 | 77 | pc.printf("Filesystem Demo complete.\n"); |
mbed_official | 0:ab69df6f1c47 | 78 | |
zhangyx | 16:8051d8156c91 | 79 | while (true) {} |
mbed_official | 0:ab69df6f1c47 | 80 | } |