1. 修复越位问题

This commit is contained in:
coffee 2025-12-02 11:04:31 +08:00
parent e1d52c26de
commit 92bfa80e77
2 changed files with 13 additions and 7 deletions

View File

@ -107,7 +107,7 @@ void HFlashSetPageCache(HFlashCacheInfo *pageInfo, uint16_t size);
void HFlashSetPageAddr(HFlashAddr_t addr, uint32_t size);
/**
* @brief HFlashSetPageBackupAddr
* @brief HFlashSetPageBackupAddr ,
* @param addr
* @param size ,
*/
@ -121,7 +121,7 @@ void HFlashSetPageBackupAddr(HFlashAddr_t addr, uint32_t size);
void HFlashSetProtectAddr(HFlashAddr_t addr, uint32_t size);
/**
* @brief HFlashSetProtectBackupAddr
* @brief HFlashSetProtectBackupAddr ,
* @param addr
* @param size ,
*/

View File

@ -591,7 +591,7 @@ static HFlashCacheInfo *FindCache(HFlashAddr_t addr)
memset(&cache, 0, sizeof(HFlashCacheInfo));
cache.info.addr = addr;
if (ScanPage(_FindCacheHelper, &cache)) {
const uint16_t index = sInfo.pageCacheUseNum;
const uint16_t index = FLASH_MIN(uint16_t, sInfo.pageCacheUseNum, sInfo.pageCacheSize - 1);
if (sInfo.pageCacheUseNum < sInfo.pageCacheSize) {
++sInfo.pageCacheUseNum;
}
@ -605,6 +605,7 @@ static HFlashCacheInfo *FindCache(HFlashAddr_t addr)
return &sInfo.pageCache[index];
}
LogE("addr[0x%08x] not find", addr);
return NULL;
}
@ -618,6 +619,7 @@ void HFlashInitCallback(HFlashReadCallback read, HFlashWriteCallback write, HFla
void HFlashSetPageCache(HFlashCacheInfo *pageInfo, uint16_t size)
{
sInfo.pageCache = pageInfo;
sInfo.pageCacheUseNum = 0;
sInfo.pageCacheSize = size;
}
@ -729,7 +731,6 @@ void HFlashRegister(HFlashAddr_t addr, uint32_t size)
sPageInfo.needBackupPage = 1;
StartBackupTimer();
// RestoreBackup(sInfo.protectAddr, sInfo.protectBackupAddr, sInfo.protectSize);
return ;
}
@ -761,9 +762,12 @@ void HFlashRegister(HFlashAddr_t addr, uint32_t size)
return ;
}
// 恢复后数据还是错误的, 需要将页表数据使用长度修正0, 避免异常数据导致程序异常
// 恢复后数据还是错误的, 需要将该页表数据重新初始化
LogE("addr[0x%08x] size[%d] crc32 not match", cache->info.addr, cache->info.size);
memset(cache->info.reverse, 0, sizeof(cache->info));
cache->info.addr = addr;
cache->info.useSize = 0;
cache->info.size = size;
cache->info.crc32 = GetFlashCrc32(cache->info.addr, cache->info.useSize);
WriteCachePage(cache);
}
@ -780,7 +784,7 @@ uint8_t HFlashWrite(HFlashAddr_t addr, void *data, uint32_t size)
// 检查写入数据大小是否超出注册提供的大小范围
if (cache->info.size < size) {
FATAL_ERROR("addr[0x%08x] size[%d] overflow", addr, size);
FATAL_ERROR("addr[0x%08x], size[%d], max size[%d] overflow", addr, size, cache->info.size);
return result;
}
@ -869,7 +873,8 @@ uint8_t HFlashStreamWrite(HFlashAddr_t addr, void *data, uint32_t size)
return result;
}
WriteFlash(addr + cache->info.useSize, data, size);
result = WriteFlash(addr + cache->info.useSize, data, size);
cache->waitWrite = 1;
cache->info.useSize += size;
++cache->info.modifyCount;
return result;
@ -964,6 +969,7 @@ void HFlashUpdateVersion(HFlashAddr_t addr, uint16_t newVersion, HFlashUpdateVer
callback(addr, oldVersion, newVersion, userData);
}
// 如果回调没有进行页写入, 需要进行页写入
if (cache->waitWrite) {
WriteCachePage(cache);
}