20240909-DXSPX-emb/Src/Usr/Task/FatfsTask.c

98 lines
2.3 KiB
C

#include "ff.h"
#include "FatfsTask.h"
#include "RTCTask.h"
#include "os.h"
#include <stdio.h>
#include <string.h>
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);
}
}