基于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. SystemVerilog MCDF验证结构

    MCDF的设计和验证花费的时间:(工作中假设的时间) design  cycle time  ==10days how about 验证?verify? 模块越往上(大')验证花费的时间越来越大,但是 ...

  2. 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql

    阿里云服务器安装Docker并部署nginx.jdk.redis.mysql 一.安装Docker 1.安装Docker的依赖库 yum install -y yum-utils device-map ...

  3. 对狂神的shiro的学习总结

    1.shiro的10分钟快速开始 导入依赖 新建一个普通的maven项目,然后new一个hello-shiro(moudle)作为第一个测试项目 具体框架如下: 导入对应的依赖在pom.xml文件里 ...

  4. MLIR中间表示和编译器框架

    MLIR中间表示和编译器框架 TensorFlow生态系统包含许多在软件和硬件堆栈的多个级别上运行的编译器和优化器.作为TensorFlow的日常用户,使用不同类型的硬件(GPU,TPU,移动设备)时 ...

  5. RGBD动作识别的多视图层融合模型

    摘要 基于视觉的动作识别在实践中遇到了不同的挑战,包括从任何角度识别主题,实时处理数据以及在现实环境中提供隐私.甚至识别基于配置文件的人类动作(基于视觉的动作识别的一个子集),在计算机视觉中也是一个巨 ...

  6. SQL Parameter参数的用法

    SqlParameter 类 表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射. 无法继承此类. 命名空间:  System.Data.SqlClient 程序集:  Sys ...

  7. 用CLion实现本地方法并给java调用

    众所周知,PHP是世界上最好的语言,java排第二,因为PHP无所不能.但是在某些场景下java还要调用本地方法来提高执行的效率,故java只能排第二.java提供了jni(Java Native I ...

  8. jquery给动态生成的元素绑定事件,on函数

    首先先解释一下什么是动态生成的元素:动态生成的元素即我们用jquery的内部插入函数append()所生成的html代码.相对的也有静态生成的元素:即直接编写在页面的html代码. 下面通过例子来讲解 ...

  9. 【NX二次开发】Block UI对话框-代码生成部分

    常规: 语言:生成的代码语言 生成附注:是否生成注释代码 生成特定与块的代码: 输入点: 回调:对话框通过回调函数调用,例如通过另一个对话框的按钮调用本对话框 菜单:对话框通过菜单调用 用户出口:对话 ...

  10. 【NX二次开发】NX内部函数,libuifw.dll文件中的内部函数

    本文分为两部分:"带参数的函数"和 "带修饰的函数". 浏览这篇博客前请先阅读: [NX二次开发]NX内部函数,查找内部函数的方法 带参数的函数: void U ...