1. 删除延后定时器, 使用立刻同步

This commit is contained in:
coffee 2025-12-25 19:28:57 +08:00
parent 06486210e1
commit 1292ac8fc2
4 changed files with 40 additions and 3 deletions

View File

@ -104,6 +104,6 @@ void HFlashMemSync();
/**
* @brief
*/
void HFlashFreeCache();
void HFlashMemFreeCache();
#endif // __H_FLASH_MEM_H__

View File

@ -314,4 +314,9 @@ uint32_t HFlashCalcCrc32(HFlashAddr_t addr);
*/
void HFlashSync();
/**
* @brief HFlashFreeCache
*/
void HFlashFreeCache();
#endif // __H_FLASH_SERVER_H__

View File

@ -453,7 +453,7 @@ void HFlashMemSync()
SyncCache();
}
void HFlashFreeCache()
void HFlashMemFreeCache()
{
HFlashMemSync();
sInfo.useNum = 0;

View File

@ -108,11 +108,13 @@ static union PageInfo sPageInfo;
// 备份定时器
static HTimer_t sBackupTimer = HTIMER_INVALID;
#ifndef USE_FLASH_MEM
// 同步页定时器
static HTimer_t sSyncPageTimer = HTIMER_INVALID;
// 同步定时器
// 同步页表缓存定时器
static HTimer_t sSyncCacheTimer = HTIMER_INVALID;
#endif
// 存储需要备份的保护区地址页偏移
static HVECTOR_DEFINE32(sNeedBackupOffset, 10);
@ -537,10 +539,12 @@ static uint8_t RestorePage(uint32_t index)
static void SyncPageInfo()
{
#ifndef USE_FLASH_MEM
if (sSyncPageTimer != HTIMER_INVALID) {
HTimerRemove(sSyncPageTimer);
sSyncPageTimer = HTIMER_INVALID;
}
#endif
const uint32_t crcValue = GetFlashCrc32(AdjustPageAddr(sInfo.pageAddr), AdjustPageByte(sPageInfo.useNum));
if (crcValue == sPageInfo.crc32) {
@ -552,6 +556,7 @@ static void SyncPageInfo()
StartSyncBackupTimer();
}
#ifndef USE_FLASH_MEM
static void StartSyncPageInfo()
{
if (sSyncPageTimer != HTIMER_INVALID) {
@ -562,6 +567,7 @@ static void StartSyncPageInfo()
sSyncPageTimer = HTimerAdd(HFLASH_TIMER_ID, HFLASH_SYNC_PAGE_INFO_TIME, SyncPageInfo, kHTimerOnce);
StartSyncBackupTimer();
}
#endif
static void ReadPage(uint32_t index, HFlashPageInfo *info)
{
@ -583,16 +589,22 @@ static void WritePage(uint32_t index, HFlashPageInfo *info)
const HFlashAddr_t addr = AdjustPageAddrOffset(sInfo.pageAddr, index);
WriteFlash(addr, info, sizeof(HFlashPageInfo));
#ifdef USE_FLASH_MEM
SyncPageInfo();
#else
StartSyncPageInfo();
#endif
}
static void SyncCachePage()
{
#ifndef USE_FLASH_MEM
if (sSyncCacheTimer != HTIMER_INVALID) {
HTimerRemove(sSyncCacheTimer);
sSyncCacheTimer = HTIMER_INVALID;
}
#endif
for (uint32_t i = 0; i < sInfo.pageCacheUseNum; ++i) {
// 更新Crc32
@ -608,9 +620,14 @@ static void SyncCachePage()
}
}
#ifdef USE_FLASH_MEM
SyncPageInfo();
#else
StartSyncPageInfo();
#endif
}
#ifndef USE_FLASH_MEM
static void StartSyncCachePage()
{
if (sSyncCacheTimer != HTIMER_INVALID) {
@ -621,12 +638,18 @@ static void StartSyncCachePage()
sSyncCacheTimer = HTimerAdd(HFLASH_TIMER_ID, HFLASH_SYNC_CACHE_PAGE_TIME, SyncCachePage, kHTimerOnce);
StartSyncPageInfo();
}
#endif
static void WriteCachePage(HFlashCacheInfo *info)
{
++info->info.modifyCount;
info->waitWrite = 1;
#ifdef USE_FLASH_MEM
SyncCachePage();
SyncPageInfo();
#else
StartSyncCachePage();
#endif
}
/// 检查是否重叠, 重叠返回1, 非重叠返回0
@ -1425,3 +1448,12 @@ void HFlashSync()
HFlashMemSync();
#endif
}
void HFlashFreeCache()
{
HFlashSync();
sInfo.pageCacheUseNum = 0;
#ifdef USE_FLASH_MEM
HFlashMemFreeCache();
#endif
}