IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> RT-thread应用讲解——文件系统 -> 正文阅读

[嵌入式]RT-thread应用讲解——文件系统

RT-thread应用讲解——文件系统

前言

在操作系统中,文件系统是很常用的,能够让我们很方便的进行文件的建立、存入、读出、修改等操作。文件系统需要依赖储存设备(比如:FLASH、SD卡,U盘),我这里基于外置flash来做文件系统。

RT-thread官网也有关于文件系统的教程。
虚拟文件系统:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/filesystem/filesystem
在STM32F429上应用文件系统:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0012-dfs

特别说明:本教程的配置介绍
MCU:STM32F429VET6
FLASH:W25Q32
RT-thread 源码版本:v4.0.3

提示:本教程对硬件没有什么要求,使用stm32f429举例只是因为我现在手上只有这一块板子,我用的最多的还是stm32f407和stm32f103,配置的流程都是一样的。软件版本不同,可能会有区别,比如RT-thread官网上面的教程就和本教程就有点区别,原因是官网的教程使用的是旧版本的bsp,ENV的配置有点不同。

一、挂载FLASH

这个在上一讲已经介绍过了,没看过的同学可以先看下上一讲的内容。
RT-thread应用讲解——norflash

二、ENV配置

对于ENV我就不多做介绍了,我前面发布的教程都介绍过了,RT-thread官网上也有很详细的说明。
env使用方法:https://www.rt-thread.org/document/site/programming-manual/env/env/#bsp-menuconfig
输入以下指令,打开配置页面。

menuconfig

1、使能文件系统

在这里插入图片描述

2、设置扇区大小

扇区大小表示可处理的最大字节数。设置的值需要根据存储器件手册确定,不能小于存储器件的最小可擦除扇区。我用的是外置FLASH,设置成4096,小于4096的话是会有问题的。
在这里插入图片描述

3、打开libc

因为要使用一些C库函数,所以需要打开libc功能。
在这里插入图片描述

4、重新生成工程

设置完之后保存退出,然后重新生成工程即可。
在env输入下面的命令,重新生成新的工程。
提示:会使用env的话应该都知道这个操作,不多说了。

scons --target=mdk5

特别说明:文件系统还有其他配置,我就不一一介绍了,感兴趣的同学可以自己研究一下。
我这里重点讲解下面这个配置。
在这里插入图片描述
这个是文件系统挂载的最大数量,如果需要把多个存储设备挂载到文件系统,就要检查一下这个配置。比如我要把外置flash,sd卡和u盘都挂到文件系统,那这个最大数量至少要设置为3,不然的话就会有一些设备挂载不上去了。
还有一点,不同的设备同时挂载的话,每个设备挂载的路径都不能相同。

三、挂载文件系统

挂载文件系统只需要把下面这段加到工程里面调用就行了。

int mnt_init(void)
{
    if (dfs_mount("norflash0", "/", "elm", 0, 0) == 0)  // "norflash0":挂载的设备名称,"/":挂载路径,这里挂载到跟目录下
    {
        rt_kprintf("norflash0 mount successful! \n");
    }
    else
    {
        dfs_mkfs("elm", "norflash0");  // 如果是第一次挂载文件系统必须要先格式化
        if(dfs_mount("norflash0", "/", "elm", 0, 0) != 0)
        {
            rt_kprintf("norflash0 mount failed! \n");
        }
        else
        {
            rt_kprintf("norflash0 mount successful! \n");
        }
    }

    return 0;
}
INIT_ENV_EXPORT(mnt_init);

提示:挂载的设备名称必须要和第一步挂载flash时自定义的名称一致。否则会挂载失败,其次,如果这个flash是第一次挂载那需要先格式化,可以手动输msh入命令格式化(如:mkfs -t elm norflash0),也可以像我这里用代码自动格式化。

四、运行测试

正常运行的日志如下:
在这里插入图片描述
我这里一开始调试的时候出现了一个奇怪的问题,log提示的是空间不足,env重新配置文件系统的参数,重新生成工程之后就一直没有出现了,到最后一直复现不出来,也没找到原因,这里特意记录一下,如果你们有类似的情况,找到原因的话记得评论区吱一声哈。
在这里插入图片描述

挂载成功之后,可以手动输入一些文件操作的命令测试一下,和linux的操作是基本一致的。RT-thread的软件包里面也有一些文件系统的demo,可以自行添加测试。
在这里插入图片描述

五、结束语

好了,关于文件系统的讲解就到这里了,我这里只用了外置flash,如果是用sd卡或者其他设备,除了第一步挂载存储设备不同,其他的流程基本是一样的,如果你还有什么问题,欢迎评论区留言。如果这篇文章能够帮到你,就给我点个赞吧,如果想了解更多RT-thread和单片机的内容,可以关注一下博主,后续我还会继续分享更多的经验给大家。

教程相关源码:
https://pan.baidu.com/s/1N2D8dM31deKIqNqaIQfPiA
提取码:7nsx

RT-thread相关教程汇总:https://blog.csdn.net/ShenZhen_zixian/article/details/120563891

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:57:21  更:2021-10-15 11:58:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:51:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码