#include "ff.h" #include "FatfsTask.h" #include "RTCTask.h" #include "os.h" #include #include FATFS fs; FIL file; FRESULT res; // 初始化,挂载文件系统 void InitFileSystem() { // 尝试挂载文件系统 res = f_mount(&fs, "", 1); if (res != FR_OK) { // 如果挂载失败,尝试创建文件系统 MKFS_PARM fs_params = {FM_ANY, 0, 0, 0, 0}; BYTE work[FF_MAX_SS]; // 工作缓冲区 res = f_mkfs("", &fs_params, work, sizeof(work)); if (res != FR_OK) { // printf("Failed to create filesystem: %d\n", res); return; } // 重新挂载文件系统 res = f_mount(&fs, "", 1); if (res != FR_OK) { // printf("Failed to mount filesystem after creation: %d\n", res); return; } } // 创建目录“RTCData” res = f_mkdir("RTCData"); if (res != FR_OK && res != FR_EXIST) { // printf("Failed to create directory: %d\n", res); return; } } // 将timeStr放入RTC.txt文件中 void FATFSTask() { UINT bw; char timeStr[12]; // int i = sizeof(file); // printf("Size of file structure: %d bytes\n", i); while (1) { // 打开文件 res = f_open(&file, "RTCData/RTC.txt", FA_WRITE | FA_OPEN_ALWAYS); if (res != FR_OK) { OSTimeDlyHMSM(0, 0, 1, 0); continue; } // 移动到文件末尾 res = f_lseek(&file, f_size(&file)); if (res != FR_OK) { f_close(&file); OSTimeDlyHMSM(0, 0, 1, 0); continue; } while (1) { // 获取时间并格式化 sprintf(timeStr, "%02u:%02u:%02u\n", time.hour, time.minute, time.second); // 写入文件 res = f_write(&file, timeStr, strlen(timeStr), &bw); if (res != FR_OK || bw != strlen(timeStr)) { break; } // 刷新文件缓冲区 res = f_sync(&file); if (res != FR_OK) { break; } // 延迟1秒 OSTimeDlyHMSM(0, 0, 1, 0); } // 确保文件关闭 f_close(&file); // 延迟1秒后重试 OSTimeDlyHMSM(0, 0, 1, 0); } }