基于ESP-IDF4.1

 1 /*
2 FAT文件系统存储文件,使用磨损均衡库wear-leveling
3 */
4
5 #include <stdlib.h>
6 #include <stdio.h>
7 #include <string.h>
8 #include "esp_vfs.h"
9 #include "esp_vfs_fat.h"
10 #include "esp_system.h"
11
12 static const char *TAG = "example";
13
14 // 磨损均衡处理实例
15 static wl_handle_t s_wl_handle = WL_INVALID_HANDLE;
16
17 // 分区挂在路径
18 const char *base_path = "/spiflash";
19
20 void app_main(void)
21 {
22 ESP_LOGI(TAG, "Mounting FAT filesystem");
23
24 // 命名设备分区,定义base_path。如果是新分区并且没有格式化过则允许格式化分区
25 const esp_vfs_fat_mount_config_t mount_config = {
26 .max_files = 4,
27 .format_if_mount_failed = true,
28 .allocation_unit_size = CONFIG_WL_SECTOR_SIZE
29 };
30 esp_err_t err = esp_vfs_fat_spiflash_mount(base_path, "storage", &mount_config, &s_wl_handle);
31 if (err != ESP_OK) {
32 ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err));
33 return;
34 }
35 ESP_LOGI(TAG, "Opening file");
36 FILE *f = fopen("/spiflash/hello.txt", "wb"); // 读写或建立一个二进制文件
37 if (f == NULL) {
38 ESP_LOGE(TAG, "Failed to open file for writing");
39 return;
40 }
41 fprintf(f, "written using ESP-IDF %s\n", esp_get_idf_version());
42 fclose(f);
43 ESP_LOGI(TAG, "File written");
44
45 // 打开
46 ESP_LOGI(TAG, "Reading file");
47 f = fopen("/spiflash/hello.txt", "rb"); // 读写打开一个二进制文件
48 if (f == NULL) {
49 ESP_LOGE(TAG, "Failed to open file for reading");
50 return;
51 }
52 char line[128];
53 // 从指定的流 f 读取一行,并把它存储在 line 所指向的字符串内
54 fgets(line, sizeof(line), f);
55 fclose(f);
56 // 查找换行符
57 char *pos = strchr(line, '\n');
58 if (pos) {
59 *pos = '\0'; //放置一个空字符串
60 }
61 ESP_LOGI(TAG, "Read from file: '%s'", line);
62
63 // 卸载FAT文件系统
64 ESP_LOGI(TAG, "Unmounting FAT filesystem");
65 ESP_ERROR_CHECK( esp_vfs_fat_spiflash_unmount(base_path, s_wl_handle));
66
67 ESP_LOGI(TAG, "Done");
68 }

原文:https://gitee.com/EspressifSystems/esp-idf

ESP32-FAT文件系统使用磨损均衡存储文件笔记的更多相关文章

  1. FAT文件系统规范v1.03学习笔记---4.文件和目录数据区之长目录项

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  2. FAT文件系统规范v1.03学习笔记---3.根目录区之FAT目录项结构

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  3. FAT文件系统规范v1.03学习笔记---1.保留区之 Fat32 FSInfo扇区结构和备份启动扇区

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  4. FAT文件系统规范v1.03学习笔记---2.FAT区之FAT数据结构(Fat Data Structure)

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  5. FAT文件系统规范v1.03学习笔记---1.保留区之启动扇区与BPB

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  6. FAT文件系统学习和思考

    FAT(File Allocation Table)文件系统 前两天面试,导师说我基础差,要赶紧补起来了.今天晚上看了FAT32文件系统,基本的信息都是百度百科中"FAT文件系统" ...

  7. <FAT文件系统> -- DBR

    FAT16是比较简单的文件系统,相比NFTS等文件系统,该系统的学习比较easy,容易上手,同时对于数据存储的机理以及数据的恢复有一定的帮助.FAT文件系统有一定的弊端,不能支持太大的数据存储. FA ...

  8. RTT下spi flash+elm fat文件系统移植小记

    背景: MCU:STM32F207 SPI flash: Winbond W25Q16BV OS: RTT V1.1.1 bsp: STM32F20x 1 将spi_core.c,spi_dev.c及 ...

  9. 在XC2440的uboot中挂载U盘,利用FAT文件系统读写U盘文件

    转:http://blog.chinaunix.net/uid-22030783-id-3347608.html 在XC2440的uboot_V1.3版本中已经支持USB HOST驱动和FAT文件系统 ...

随机推荐

  1. 阿里云AIoT云端一体:迎接云原生+低代码时代的到来

    距上次2019年参加上海阿里云开发者大会已经近2年的时间了,也许因为疫情的原因,这一两年线下大型活动基本很少了,这次在北京国家会议中心举办的阿里云开发者大会,无论是参会人员的规模,还有演讲嘉宾的级别和 ...

  2. object_pool对象池

    object_pool对象池 object_pool是用于类实例(对象)的内存池,它能够在析构时调用所有已经分配的内存块调用析构函数,从而正确释放资源,需要包含以下头文件: #include < ...

  3. 06.ElementUI 2.X 源码学习:源码剖析之工程化(一)

    0x.00 前言 在用了5章篇幅 ElementUI源码学习:从零开始搭建Vue组件库汇总 讲解了如何编写一个组件.发布npm以及生成展示文档之后.接下来将分析Element项目的代码结构,学习其工程 ...

  4. TensorFlow用法

    TensorFlow用法 什么是TensorFlow TensorFlow是一个开源软件库,用于使用数据流图进行数值计算.图中的节点表示数学运算,而图的边缘表示流动的多维数据数组(张量).这种灵活的体 ...

  5. Spring boot未授权访问造成的数据库外联

    一.spring boot 日常测试或攻防演练中像shiro,fastjson等漏洞已经越来越少了,但是随着spring boot框架的广泛使用,spring boot带来的安全问题也越来越多,本文仅 ...

  6. Spring Cloud09: Config 配置中心

    一.概述 什么是配置中心呢,在基于微服务的分布式系统中,每个业务模块都可以拆分成独立自主的服务,由多个请求来协助完成某个需求,那么在某一具体的业务场景中,某一个请求需要调用多个服务来完成,那么就存在一 ...

  7. yum的配置

    1. 创建两台虚拟机[root@room9pc01 ~]# clone-vm7Enter VM number: 8 [root@room9pc01 ~]# clone-vm7Enter VM numb ...

  8. 【模拟8.10】Weed(线段树)

    考试只好随便骗骗分过去啦啦啦..... 正解是玄学线段树: 以每个操作为叶子节点,我们定义几个变量ce表示层数,h表示高度,add表示所减的层数 那么问题转化为单点修改的问题输出直接是根节点答案 但是 ...

  9. C# 设置Word文本框中的文字旋转方向

    在Word中可插入文本框,默认情况下插入的文本框中的文字方向为横向排列,对于一些特殊文档的设计要求,需要改变文字方向,如本次测试中的文档排版为考生试卷类型,考生信息栏的内容为下图中的这种, 本文将以C ...

  10. Message、Handler、Message Queue、Looper 之间的关系

    单线程模型中Message.Handler.Message Queue.Looper之间的关系 1.Message Message即为消息,可以理解为线程间交流的信息.处理数据后台线程需要更新UI,你 ...