98 lines
2.3 KiB
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);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|