公众号

欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。

esp8266教程:文件系统之spiffs

文件系统

文件系统是操作的系统的基础组成部分,不管是在linux还是Windows都支持文件系统,文件系统是什么?文件系统是我们对存储设备的一种管理方式。文件系统可以类比为我们生活当中的图书馆,如果没有图书馆管理,我们数据随意的写到储存设备上,其实就像将书全部扔到一个杂乱无章的房子是一样的,我们想找一本书,在堆满杂乱书籍的房子里简直是困难重重,如果是整齐摆放的书籍,我们按照找那本书按照索引号就可以很快找到了。对于我们要管理的数据也是一样,如果我们有文件系统要找到一个文件就非常的容易,修改文件也非常的容易,如果没有文件系统,我们需要很清楚的知道每个文件放置在存储设备的哪个地址上,数据存储的大小是多少,如果要扩大文件的大小是否需要移动存储位置,因为存储介质的擦写的寿命是有限的,所以不能经常擦写同一个地方,比如这个地方擦写很多次了,下次要存储东西的时候就换个地方擦写,这样存储设备的寿命就能延长一些,所以需要动态平衡擦写等等,文件系统就是为了给出统一的读写接口,文件的管理,擦写算法管理而存在的。

杂乱无章的书籍

整齐摆放的书籍

常见的文件系统类型

文件系统类型:
spiffs :对于嵌入设备定制的小文件系统,占用内存小
ext2 : 早期linux中常用的文件系统
ext3 : ext2的升级版,带日志功能
RAMFS : 内存文件系统,速度很快
NFS : 网络文件系统,由SUN发明,主要用于远程文件共享
MS-DOS : MS-DOS文件系统
VFAT : Windows 95/98 操作系统采用的文件系统
FAT : Windows XP 操作系统采用的文件系统
NTFS : Windows NT/XP 操作系统采用的文件系统
HPFS : OS/2 操作系统采用的文件系统
PROC : 虚拟的进程文件系统
ISO9660 : 大部分光盘所采用的文件系统
ufsSun : OS 所采用的文件系统
NCPFS : Novell 服务器所采用的文件系统
SMBFS : Samba 的共享文件系统
XFS : 由SGI开发的先进的日志文件系统,支持超大容量文件
JFS :IBM的AIX使用的日志文件系统
ReiserFS : 基于平衡树结构的文件系统
udf: 可擦写的数据光盘文件系统

文件系统系统的选择

文件系统有很多种,不同的操作的系统或者存储介质会选择不一样的文件系统,比如对于spiffs来说就是为了嵌入式设备而定制的精简版文件系统,优点是占用的内存非常小,而已不使用malloc分配内存,系统使用的内存由用户传入静态内存,缺点就是能存储的文件个数有限制,文件大小有限制,而且不能建立文件夹只有一级目录。在linux的条件下使用的文件系统又是不一样的比如ext3就是专门为高容量的EMMC存储介质而设计的,好处非常的多,比如对文件大小的限制想对spiffs来说就放的很宽了,文件个数的限制也没有,但是不好的地方就是占用的内存会比spiffs,但是因为这个文件系统使用在linux上,一般跑linux系统的设备内存都是比价充足的。所以说每个文件系统都有对应的优缺点,也有对应的使用场景,在合适的场景下选择合适的操作系统。

文件系统中文件的操作

在操作系统中,一般来说不管怎么样的文件系统,大家都可以使用标准的C库去使用,比如我们想打开一个文件系统的文件,可以使用fopen,关闭打开的文件可以使用fclose,如果要把文件读取出来可以使用fread,写文件可以使用fwrite等等函数。

esp8266 spiffs文件系统操作实例


void app_main(void)
{ESP_LOGI(TAG, "Initializing SPIFFS");esp_vfs_spiffs_conf_t conf = {.base_path = "/spiffs",.partition_label = NULL,.max_files = 5,.format_if_mount_failed = true};//挂载spiffs文件系统,挂载之后可以使用C库进行读写文件esp_err_t ret = esp_vfs_spiffs_register(&conf);if (ret != ESP_OK) {if (ret == ESP_FAIL) {ESP_LOGE(TAG, "Failed to mount or format filesystem");} else if (ret == ESP_ERR_NOT_FOUND) {ESP_LOGE(TAG, "Failed to find SPIFFS partition");} else {ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret));}return;}size_t total = 0, used = 0;//获取文件系统已经使用的大小和剩余的大小ret = esp_spiffs_info(NULL, &total, &used);if (ret != ESP_OK) {ESP_LOGE(TAG, "Failed to get SPIFFS partition information (%s)", esp_err_to_name(ret));} else {ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used);}// 使用 POSIX and C标准接口进行操作文件//首先建立文件/spiffs/hello.txtESP_LOGI(TAG, "Opening file");FILE* f = fopen("/spiffs/hello.txt", "w");if (f == NULL) {ESP_LOGE(TAG, "Failed to open file for writing");return;}char * p = "Hello World!\n";//在文件里面写入Hello World!\nfwrite(p,strlen(p),1,f);fclose(f);ESP_LOGI(TAG, "File written");//检查/spiffs/foo.txt这个文件是否存在,如果存在删除它struct stat st;if (stat("/spiffs/foo.txt", &st) == 0) {// 删除/spiffs/foo.txt文件unlink("/spiffs/foo.txt");}// 将/spiffs/hello.txt重新命名为/spiffs/foo.txtESP_LOGI(TAG, "Renaming file");if (rename("/spiffs/hello.txt", "/spiffs/foo.txt") != 0) {ESP_LOGE(TAG, "Rename failed");return;}// 打开/spiffs/foo.txt文件ESP_LOGI(TAG, "Reading file");f = fopen("/spiffs/foo.txt", "r");if (f == NULL) {ESP_LOGE(TAG, "Failed to open file for reading");return;}char line[64];//读取一行数据,就是读取之前写入的“Hello World!\n”fgets(line, sizeof(line), f);//关闭文件fclose(f);//找打“Hello World!\n”字符串的\n,然后替换成'\0'char* pos = strchr(line, '\n');if (pos) {*pos = '\0';}//将“Hello World!”打印出来ESP_LOGI(TAG, "Read from file: '%s'", line);//和挂载函数esp_vfs_spiffs_register反向操作,卸载spiffs文件系统esp_vfs_spiffs_unregister(NULL);ESP_LOGI(TAG, "SPIFFS unmounted");
}/和挂载函数esp_vfs_spiffs_register反向操作,卸载spiffs文件系统esp_vfs_spiffs_unregister(NULL);ESP_LOGI(TAG, "SPIFFS unmounted");
}

esp8266教程:文件系统之spiffs相关推荐

  1. Xamarin Essentials应用教程文件系统FileSystem

    Xamarin Essentials应用教程文件系统FileSystem 文件系统用于管理设备内的各类文件.通过文件系统,应用程序可以创建永久文件和临时文件,也可以获取预先打包的文件,如预设数据库文件 ...

  2. esp8266灯上电闪一下_【零知ESP8266教程】快速入门2-点亮外部LED灯

    [零知ESP8266教程]快速入门2-点亮外部LED灯 [复制链接] 一.工具原料 电脑,windows系统 ESP8266开发板 micro-usb线 LED灯1个 220Ω 电阻1个 面包板一个+ ...

  3. micropython esp8266教程_micropython for esp8266

    esp8266的确是一款超值的芯片,不仅可以是一款WIFI的芯片,可以兼容arduino,还可以使用micropython编程. 价廉物美,小巧灵活.在IOT领域有很好的前景. adafruit_pr ...

  4. ESP8266 NodeMCU 闪存文件系统(SPIFFS)

    目录 闪存文件系统 ESP8266闪存文件系统基本操作 1. 通过程序向闪存文件系统写入信息 2. 通过程序从闪存文件系统读取信息 3. 通过程序向闪存文件系统文件添加信息 4. 通过程序读取目录内容 ...

  5. 【ESP8266教程】零基础入门学用物联网-基础知识篇(太极创客团队)学习笔记

    前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容. 提示:以下是本篇文章正文内容, ...

  6. micropython esp8266教程_(一)ESP8266/nodemcu如何使用MicroPython进行开发

    简介 大家都知道ESP8266(nodemcu)可以使用arduino的语法(C)进行开发,也有些小伙伴可能也知道可以使用lua语言进行开发的.但是现在我们也可以使用python来开发esp8266( ...

  7. micropython esp8266教程_ESP8266 快速开发指南

    这是针对 ESP8266 版的快速指南,请大家注意与 pyboard 版的区别.简单介绍一组有关 ESP8266 开发板下使用 MicroPython 开发的范例程序. machine 和频率控制 i ...

  8. micropython esp8266教程_ESP8266 Micropython – 连接大学Wi-Fi(WPA2 Enterprise PEAP)

    我有一块带ESP8266芯片的电路板,运行Micropython固件v1.8.7.我的要求是通过大学Wi-Fi使用WebREPL,它使用WPA2 Enterprise EAP-MSCHAPv2身份验证 ...

  9. ESP8266教程5 — MCU和机智云APP之间互相通信

    目录 1.前期准备 1.1.材料准备 1.2.理论准备 2.创建项目数据点 3.下载MCU开发固件包 4.esp8266模块输入官方的SDK固件 5.实际操作 这段时间里有空就自己玩玩ESP8266, ...

  10. 【零知ESP8266教程】快速入门10-使用PWM进行调光

    前面的分享热身完毕,接下来,我们要进入更专业电子技术的深入哦! PWM科普:PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所 ...

最新文章

  1. SAP QM IDI Interface
  2. 创客常用开发板“四剑客”对比,谁最“快”?
  3. C语言中嵌入正则表达式
  4. 技术宝典 | WebRTC ADM 源码流程分析
  5. 软件工程 --第七章 -- 实现(未完)
  6. 计算机英语短文互译,中英文互译的英语短文
  7. 《SpringCloud超级入门》Eureka自我保护模式和InstanceID的配置《十四》
  8. 信贷风控必知必会:逾期相关的知识点总结
  9. .Net实现发送邮件功能
  10. go使用redis——redigo使用HMSET存储结构体
  11. MySQL 5.6.21 最新版的安装
  12. 自从用了 OkHttp,别的都完全不想用了!
  13. WIN10便签怎么样开启免打扰时间 如何设置休息日消息免打扰
  14. 以太网 TCP协议交互过程中出现丢包时的解决机制,超时重传、快速重传、SACK与DSACK
  15. 【深度学习技巧】数据扩充--常规手法
  16. python游戏初探:拍子打小球
  17. php 获取手机设备id,H5获取手机设备信息、app版本信息、ip地址
  18. Android 音频源码分析——AndroidRecord录音(一)
  19. 细数最暖心的地铁营销事件,你最喜欢哪一个?
  20. 2019SUCTF EasyWeb

热门文章

  1. Protel99SE推荐使用英文版
  2. 【书籍阅读】-人在回路机器学习 Human-in-the-Loop Machine Learning(一)
  3. eclipse html插件的下载和安装
  4. 有效值/峰-峰值/幅值/瞬时值
  5. 安装包制作工具 SetupFactory 详解
  6. 【贫穷网】PHP在线讨饭源码+支付宝当面付DEMO+自动在线要饭源码+安装教程
  7. 按键精灵通过句柄获取窗口坐标_按键精灵 句柄 获得句柄 控制windows窗口 后台...
  8. 齿轮的正负变位设计要点
  9. python小欢喜(八)俄罗斯方块 (12) 添加游戏音效
  10. 平板电脑能不能学计算机,一不小心成为学习神器的平板电脑 原来就是它