基于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 ", 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, ' '); 58 if (pos) { 59 *pos = '