玩转RT-Thread系列教程(10)--文件系统使用


玩转RT-Thread系列教程(10)–文件系统使用

一、文件系统介绍

RT-Thread的文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型 ,是一种用于向用户提供底层数据访问的机制。

RT-Thread DFS 组件的主要功能特点有:

  • 为应用程序提供统一的 POSIX 文件和目录操作接口:read、write、poll/select 等。
  • 支持多种类型的文件系统,如 FatFS、RomFS、DevFS 等,并提供普通文件、设备文件、网络文件描述符的管理。
  • 支持多种类型的存储设备,如 SD Card、SPI Flash、Nand Flash 等。

RT-Thread官方文档

更多关于RTT文件系统可以查看RTT官方文档

二、文件系统的配置

2.1、打开cubemx配置

在这里插入图片描述

2.2、使用env使能SD设备+文件系统

menuconfig

2.3、生成mdk工程

三、文件系统使用

3.1、下载验证

可以看到,RTT组件已经为我们自动的识别出了SD设备

3.2、编写挂载代码

3.2.1、添加FileSyetem.c文件

3.2.2、在FileSyetem编写业务逻辑

具体代码:

#include "FileSystem.h"

//SD卡挂完成的信号量
static rt_sem_t SD_CardFinsh_mutex = RT_NULL;
static rt_thread_t thread_filesystem;

static void MountSDcard(void)
{
    rt_device_t dev;

    while (1)
    {
        dev = rt_device_find("sd0");

        if (dev != RT_NULL)
        {
            if (dfs_mount("sd0", "/", "elm", 0, 0) == RT_EOK)
            {
                rt_kprintf("SD mount to / success\n");
                //释放SD_CardFinsh_mutex信号量
                rt_sem_release(SD_CardFinsh_mutex);
            }
            else
            {
                rt_kprintf("SD mount to / failed\n");
            }
            break;
        }
        rt_thread_delay(50);
    }
}

void FlieSystem_entry(void *parameter)
{
    static rt_err_t result;

    MountSDcard();

    while (1)
    {
        /* 永久方式等待信号量*/
        result = rt_sem_take(SD_CardFinsh_mutex, RT_WAITING_FOREVER);

        if (result != RT_EOK)
        {
            rt_kprintf("t2 take a SD_CardFinsh_mutex semaphore, failed.\n");
            rt_sem_delete(SD_CardFinsh_mutex);
            return;
        }
        else
        {
            rt_sem_delete(SD_CardFinsh_mutex);
            return;
        }
    }
}

static int FileSystemInit(void)
{
    /* 创建一个信号量 */
    SD_CardFinsh_mutex = rt_sem_create("SDCard_mutex", 0, RT_IPC_FLAG_FIFO);

    //创建sd线程
    thread_filesystem = rt_thread_create("file_sys", FlieSystem_entry, RT_NULL, 2048, 20, 10);

    if (thread_filesystem != RT_NULL)
    {
        rt_thread_startup(thread_filesystem);
    }
}

INIT_APP_EXPORT(FileSystemInit);

3.3、编译、下载、验证

FinSH 命令 描述
ls 显示文件和目录的信息
cd 进入指定目录
cp 复制文件
rm 删除文件或目录
mv 将文件移动位置或改名
echo 将指定内容写入指定文件,当文件存在时,就写入该文件,当文件不存在时就新创建一个文件并写入
cat 展示文件的内容
pwd 打印出当前目录地址
mkdir 创建文件夹
mkfs 格式化文件系统

可以看见SD卡挂载成功,下一次我们要利用RTT的文件系统存储一些数据等等


文章作者: Rb菌
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Rb菌 !
  目录