From 70899df4b9e27bf67f4d36c64e3ffc2d5e6edecb Mon Sep 17 00:00:00 2001 From: james <1943357252@qq.com> Date: Mon, 29 Jul 2024 18:08:54 +0800 Subject: [PATCH] =?UTF-8?q?SD=E5=8D=A1in=20main=EF=BC=8C=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=B3=BB=E7=BB=9Fmd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Day5/README.md | 54 ++++++++++++++++++++++- Day5/image.png | Bin 0 -> 47892 bytes applications/main.c | 105 ++++++++++++++++++++++++++++---------------- 3 files changed, 119 insertions(+), 40 deletions(-) create mode 100644 Day5/image.png diff --git a/Day5/README.md b/Day5/README.md index 9ee1f89..5877dfe 100644 --- a/Day5/README.md +++ b/Day5/README.md @@ -1,4 +1,56 @@ ## 软件包 -wifi join Dong abcd07691234 \ No newline at end of file +wifi join Dong abcd07691234 + + +## 组件 +可以独立开发、测试、测试、部署和维护的软件单元 +*与软件包关系: 组件如手脚,软件包如工具,都可以选择是否使用* + +### 文件系统 +用板载的W25Q64来学习 +#### 文件系统定义 +DFS, Device File System, RTT提供的虚拟文件系统组件 +#### 文件系统架构 +统一**根目录**用`/`表示,可以挂载目录、文件,允许不同目录下的**同名文件** +![目录与文件图](https://www.rt-thread.org/document/site/rt-thread-version/rt-thread-standard/programming-manual/filesystem/figures/fs-dir.png) +POSIX:一个协议,统一api名称,使代码可以在不同的操作系统中跑 +ELM FATFS 文件系统:常用,RomFS系统:只读 (下文继续介绍) +![文件系统框架图](https://www.rt-thread.org/document/site/rt-thread-version/rt-thread-standard/programming-manual/filesystem/figures/fs-layer.png) +#### 文件系统种类 +| 类型 | 特点 | +| - | - | +| FatFS | 小型嵌入式设备,兼容微软,有良好的硬件无关性,RTT最常用,如:elm_fat | +| RomFS | 挂载根目录,只读 | +| DevFS | 设备文件系统,开启后设备在`/dev`虚拟成文件,可用read、write接口 | +| UFFS | 图文开发,用于Nand Flash,快、资源消耗少、免费 | +| NFS | 网络文件系统,用于网络连接操作另一台设备 | +#### POSIX接口层 +一个协议,统一api名称,使代码可以在不同的操作系统中跑 +**4个重要接口** +![POSIX](https://www.rt-thread.org/document/site/rt-thread-version/rt-thread-standard/programming-manual/filesystem/figures/fs-mg.png) +文件描述符:fd(file descriptor),对应一个文件,可能多对一(把我们找到需要的文件) +还有: +``` c +int rename(const char *old, const char *new); //重命名 +int stat(const char *file, struct stat *buf); //取得状态 +int unlink(const char *pathname); //删除文件 +``` +#### 目录管理 +目录常用api +![目录常用api图](https://www.rt-thread.org/document/site/rt-thread-version/rt-thread-standard/programming-manual/filesystem/figures/fs-dir-mg.png) +#### 文件系统启动流程 +| 名称 | 补充 | +| - | - | +| filesystemtable | 记录所用的文件系统 | +| filesystem_operation_table | 记录操作函数如何实现(如open,close……)| +|相关锁 | 如fd的互斥锁等 | + +![alt text](image.png) + + + + + +[更多参考官方文档链接](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/filesystem/filesystem?id=%e6%96%87%e4%bb%b6%e7%ae%a1%e7%90%86) diff --git a/Day5/image.png b/Day5/image.png new file mode 100644 index 0000000000000000000000000000000000000000..765f0d7fff84ad840beafe3eb898b539cc4514ef GIT binary patch literal 47892 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%0D2I{^?(FMVBG(Y>oDW$;CDKR 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%0A$zS5fAA8t2&0x*$QG^uoiG@@bH)5oSuSG#DEw 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 +// #include +// #include + +// #define DBG_TAG "main" +// #define DBG_LVL DBG_LOG +// #include + +// #include +// #include + +// /* 配置 LED 灯引脚 */ +// #define PIN_LED_B GET_PIN(F, 11) // PF11 : LED_B --> LED +// #define PIN_LED_R GET_PIN(F, 12) // PF12 : LED_R --> LED + +// int main(void) +// { +// // lcd_clear(WHITE); + +// // /* show RT-Thread logo */ +// // lcd_show_image(0, 0, 240, 69, image_rttlogo); + +// // /* set the background color and foreground color */ +// // lcd_set_color(WHITE, BLACK); + +// // /* show some string on lcd */ +// // lcd_show_string(10, 69, 16, "Hello, RT-Thread!"); +// // lcd_show_string(10, 69 + 16, 24, "RT-Thread"); +// // lcd_show_string(10, 69 + 16 + 24, 32, "RT-Thread"); + +// // /* draw a line on lcd */ +// // lcd_draw_line(0, 69 + 16 + 24 + 32, 240, 69 + 16 + 24 + 32); + +// // /* draw a concentric circles */ +// // lcd_draw_point(120, 194); +// // for (int i = 0; i < 46; i += 4) +// // { +// // lcd_draw_circle(120, 194, i); +// // } +// return 0; +// } #include -#include -#include +#include #define DBG_TAG "main" #define DBG_LVL DBG_LOG #include -#include -#include - -/* 配置 LED 灯引脚 */ -#define PIN_LED_B GET_PIN(F, 11) // PF11 : LED_B --> LED -#define PIN_LED_R GET_PIN(F, 12) // PF12 : LED_R --> LED +static int onboard_sdcard_mount(); int main(void) { - // lcd_clear(WHITE); - - // /* show RT-Thread logo */ - // lcd_show_image(0, 0, 240, 69, image_rttlogo); - - // /* set the background color and foreground color */ - // lcd_set_color(WHITE, BLACK); - - // /* show some string on lcd */ - // lcd_show_string(10, 69, 16, "Hello, RT-Thread!"); - // lcd_show_string(10, 69 + 16, 24, "RT-Thread"); - // lcd_show_string(10, 69 + 16 + 24, 32, "RT-Thread"); - - // /* draw a line on lcd */ - // lcd_draw_line(0, 69 + 16 + 24 + 32, 240, 69 + 16 + 24 + 32); - - // /* draw a concentric circles */ - // lcd_draw_point(120, 194); - // for (int i = 0; i < 46; i += 4) - // { - // lcd_draw_circle(120, 194, i); - // } + onboard_sdcard_mount(); return 0; } +static int onboard_sdcard_mount(void) +{ + if (dfs_mount("sd0", "/sdcard", "elm", 0, 0) == RT_EOK) + { + LOG_I("SD card mount to '/sdcard'"); + } + else + { + LOG_E("SD card mount to '/sdcard' failed!"); + } + + return RT_EOK; +}