【无标题】
FAT : file allocation table 文件分配表
最早,最简单,兼容性最强的 磁盘文件系统,,微软开发
esp-idf通过 FatFs库 支持这种文件系统
系统卷 volume : 卷就是一块呗格式化,可以存文件的存储区域,,,比如c盘,d盘,,等本质都是volume
VFS : virtual file system : 虚拟文件系统
给上层程序提供统一的文件操作系统
POSIX : portable operating system interface
可移植的操作系统接口 :POSIX规定了操作系统应该提供哪些接口,,让程序可以在不同的操作系统之间更容易移植
POSIX是标准,,, linux 。macOS,unix是实现
esp32是esp-idf提供了一部分POSIX的兼容层
POSIX : 是上层统一接口
VFS: 是中间抽象层
FAT / SPIFFS 是具体的文件系统

spiffs : spi flash file system
spi flash文件系统
FAT : file allocation table
- SD卡,,u盘
spiffs : esp32内部的flash,,, 把一块存储空间管理成 文件和目录,,让程序可以直接 操作
spiffs: 是给esp32内部flash用的小型文件系统
FAT: 给SD卡 u盘,,这类存储用的通用文件系统
FAT电脑可以直接看到,,, spiffs,windows不认识spiffs
传统spiffs,,目录支持较弱,,大文件写入效率低,碎片问题,,,flash不能直接覆盖,需要擦除
spiffs :
#include <stdio.h>
#include <string.h>
#include "esp_spiffs.h"
#include "esp_vfs_fat.h"
#include "nvs_flash.h"
#include "driver/sdmmc_host.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
// nvs最长15个字节
static char read_buffer[64];
#define NVS_SSID_KEY "ssid"
/**
* spiffs 做不到使用全部的大小,,,只能稳定使用百分之75左右,,分配了1M,实际不到1M
*/
void app_main(void)
{
esp_vfs_spiffs_conf_t conf = {
.base_path = "/spiffs", // 挂载点
.partition_label = NULL, // spiffs分区的名字,,标签
.max_files = 5,
.format_if_mount_failed = true
};
// 挂载 // 将文件系统 和 vfs关联起来 (virtual file system)
esp_err_t ret = esp_vfs_spiffs_register(&conf);
if (ret != ESP_OK) {
printf("failed mount spiffs \n");
return;
}
// esp-idf用来检查并修复spiffs文件系统一致性的函数,,,,
// spiffs就像一个小硬盘,,突然断电,写入中断后,里面的文件索引可能不一致,,,需要调用这个做磁盘检查
// 一般只在初始化的时候调用一次
ret = esp_spiffs_check(conf.partition_label);
if (ret != ESP_OK) {
printf("spiffs check failed \n");
return;
}
// 获取文件区域大小
size_t total = 0;
size_t used = 0;
ret = esp_spiffs_info(conf.partition_label,&total,&used);
if (ret != ESP_OK) {
printf("spiffs info failed \n");
return;
}
printf("spiffs total is %d,used is %d \n",total,used);
// 写入文件,, 要在挂载点路径下面
FILE * f = fopen("/spiffs/hello.txt","w");
if (f == NULL) {
printf("spiffs failed open file");
return;
}
fprintf(f,"hello world \n");
fclose(f);
vTaskDelay(pdMS_TO_TICKS(1000));
FILE * fr = fopen("/spiffs/hello.txt","r");
if (fr == NULL) {
printf("spiffs failed open file");
return;
}
char buffer[8];
// 缓冲区足够大,,完整读完,末尾带 \n
// 缓冲区不够,fgets读满缓冲区,就不会带\n
fgets(buffer,8,fr);
fclose(fr);
;
// 将换行符替换成 结束符 0
char *pos = strchr(buffer,'\n');
if (pos) {
*pos = 0;
}
printf("content is %s\n",buffer);
// 写在spiffs。。并从vfs中注销
esp_vfs_spiffs_unregister(conf.partition_label);
}
jpg图像数据
JPEG ,,jpg,,文件有固定的标志头和结束标志,,,
esp32摄像头mjpeg视频流,可以通过查找标志来切割jpeg数据
- jpeg开始标志 FFD8
- jpeg结束标志 FFD9
其中的数据是经过压缩的,不能直接输出到显示屏上
menuconfig 配置lvgl
更多推荐

所有评论(0)