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 * @brief
*/ */
void HFlashFreeCache(); void HFlashMemFreeCache();
#endif // __H_FLASH_MEM_H__ #endif // __H_FLASH_MEM_H__

View File

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

View File

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

View File

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