mmc_card: use same ram for format buffer and file structure

This commit is contained in:
Andrey Gusakov 2025-02-14 20:08:11 +03:00 committed by rusefillc
parent 8a6c34bf45
commit 90a019e720
1 changed files with 22 additions and 23 deletions

View File

@ -276,8 +276,15 @@ void printError(const char *str, FRESULT f_error) {
efiPrintf("FATfs Error \"%s\" %d %s", str, f_error, f_error <= FR_INVALID_PARAMETER ? fatErrors[f_error] : "unknown");
}
// Warning: shared between all FS users, please release it after use
static FIL FDLogFile NO_CACHE;
// format and file access are used exclusively, we can union.
// TODO: also add MSD's blkbuf1 to this union
static union {
// Warning: shared between all FS users, please release it after use
FIL fd;
// TODO: optimal cluster size?
#define FATFS_CLUSTER_SIZE 1024
BYTE formatBuff[FATFS_CLUSTER_SIZE];
} resources NO_CACHE;
extern int logFileIndex;
static char logName[_MAX_FILLER + 20];
@ -381,9 +388,6 @@ static void sdLoggerCloseFile(FIL *fd)
// close file
f_close(fd);
// f_sync is called internally
//f_sync(&FDLogFile);
// SD logger is inactive
sdLoggerSetReady(false);
}
@ -609,14 +613,14 @@ static int sdTriggerLogger();
static bool sdLoggerInitDone = false;
static bool sdLoggerFailed = false;
static int sdLogger()
static int sdLogger(FIL *fd)
{
int ret = 0;
if (!sdLoggerInitDone) {
incLogFileName(&FDLogFile);
sdLoggerCreateFile(&FDLogFile);
logBuffer.start(&FDLogFile);
incLogFileName(fd);
sdLoggerCreateFile(fd);
logBuffer.start(fd);
resetFileLogging();
sdLoggerInitDone = true;
}
@ -639,12 +643,12 @@ static int sdLogger()
// TODO: use f_tell() instead ?
if (logBuffer.writen() + ret > LOGGER_MAX_FILE_SIZE) {
logBuffer.stop();
sdLoggerCloseFile(&FDLogFile);
sdLoggerCloseFile(fd);
//start new file
incLogFileName(&FDLogFile);
sdLoggerCreateFile(&FDLogFile);
logBuffer.start(&FDLogFile);
incLogFileName(fd);
sdLoggerCreateFile(fd);
logBuffer.start(fd);
resetFileLogging();
}
#endif
@ -667,7 +671,7 @@ static void sdLoggerStart(void)
static void sdLoggerStop(void)
{
sdLoggerCloseFile(&FDLogFile);
sdLoggerCloseFile(&resources.fd);
#if EFI_TOOTH_LOGGER
// TODO: cache this config option untill sdLoggerStop()
if (engineConfiguration->sdTriggerLog) {
@ -676,15 +680,10 @@ static void sdLoggerStop(void)
#endif
}
// TODO: optimal cluster size?
// buffer is needed only for f_mkfs, use some shared buffer?
#define FATFS_CLUSTER_SIZE 1024
static NO_CACHE BYTE formatBuff[FATFS_CLUSTER_SIZE];
static bool sdFormat()
{
//FRESULT ret = f_mkfs("", nullptr, formatBuff, sizeof(formatBuff));
FRESULT ret = f_mkfs("", nullptr, formatBuff, sizeof(formatBuff));
//FRESULT ret = f_mkfs("", nullptr, resources.formatBuff, sizeof(resources.formatBuff));
FRESULT ret = f_mkfs("", nullptr, resources.formatBuff, sizeof(resources.formatBuff));
if (ret) {
printError("format failed", ret);
@ -802,7 +801,7 @@ static int sdModeExecuter()
sdNeedRemoveReports = false;
}
// execute logger
return sdLogger();
return sdLogger(&resources.fd);
}
return 0;
@ -812,7 +811,7 @@ static int sdReportStorageInit()
{
if (mountMmc()) {
// write error report file if needed
errorHandlerWriteReportFile(&FDLogFile);
errorHandlerWriteReportFile(&resources.fd);
// check for any exist reports
errorHandlerCheckReportFiles();