基于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. C语言编程 菜鸟练习100题(01-10)

    [练习1]输出 "Hello, World!" 0. 题目: 输出 "Hello, World!" 1. 分析: 使用 printf() 输出 "He ...

  2. Python+Selenium学习笔记12 - 窗口大小和滚动条

    涉及到的三个方法 set_window_size()  用于设置浏览器窗口的大小 e.gset_window_size(600,600) window.scrollTo() 用于设置浏览器窗口滚动条的 ...

  3. 论文阅读:MDNet: Learning Multi-Domain Convolutional Neural Networks for Visual Tracking

    前言 CVPR2016 来自Korea的POSTECH这个团队   大部分算法(例如HCF, DeepLMCF)只是用在大量数据上训练好的(pretrain)的一些网络如VGG作为特征提取器,这些做法 ...

  4. TheSuperego 实验六 团队作业3:项目需求分析与原型设计

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 团队名称 TheSuperego 团队成员分工描述 杨丽霞:组织QQ会议,合理明确组内分工,推进任务,实施关于我们原型设计陈来弟:负 ...

  5. PyTorch 自动微分

    PyTorch 自动微分 autograd 包是 PyTorch 中所有神经网络的核心.首先简要地介绍,然后将会去训练的第一个神经网络.该 autograd 软件包为 Tensors 上的所有操作提供 ...

  6. nvJPEG Codec库

    nvJPEG Codec库 nvJPEG库是高性能的GPU加速库,用于解码,编码和转码JPEG格式的图像.nvJPEG2000库用于解码JPEG 2000格式的图像.与单CPU解码相比,依赖nvJPE ...

  7. springcloud-config配置异常Cannot clone or checkout repository 和 Authentication is required but no CredentialsProvider has been registered解决过程

    Cannot clone or checkout repository, 出现这个异常,通过检查是因为自己本地没有配置 ssh,所以配置了, https://blog.csdn.net/zy_2818 ...

  8. CArray CList CMap 插入与遍历效率对比

    前言:程序中经常用到不定量数组,选择上可以使用CArray,CList,CMap,而这三者插入及遍历的效率,未测试过,随着数据量越来越大,需要做程序上的优化,于是比较下三种类型的插入盒遍历的效率. 一 ...

  9. JVM面试题(史上最强、持续更新、吐血推荐)

    文章很长而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三部 ...

  10. Spring Boot WebFlu-05——WebFlux 中 Thymeleaf 和 MongoDB 实践

    第05课:WebFlux 中 Thymeleaf 和 MongoDB 实践 前言 本节内容主要还是总结上面两篇内容的操作,并实现一个复杂查询的小案例,那么没安装 MongoDB 的可以进行下面的安装流 ...