1. 修复越位问题
This commit is contained in:
parent
e1d52c26de
commit
92bfa80e77
@ -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 大小, 必须和保护地址大小相同
|
||||
*/
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user