背景及问题:开发项目时,操作内部flash,调用getsetcor时,进入hardfault,经调试发现FLASH_BANK_SIZE读不到值,FLASH_BANK_SIZE取值来源于以下步骤:一时没有任何思路
((((*((uint16_t *)FLASHSIZE_BASE)) == 0xFFFFU)) ? FLASH_SIZE_DEFAULT : \
((((*((uint16_t *)FLASHSIZE_BASE)) == 0x0000U)) ? FLASH_SIZE_DEFAULT : \
(((uint32_t)(*((uint16_t *)FLASHSIZE_BASE)) & (0xFFFFU)) << 10U)))
解决方案:
在擦除操作开始前加上以下语句,问题解决
/* Disable instruction cache prior to internal cacheable memory update */
if (HAL_ICACHE_Disable() != HAL_OK)
{
Error_Handler();
}
分析:查阅资料,如果擦除前不关闭缓存的话会发生缓存不一致现象。这种现象会引发大问题的,具体什么问题还不清楚,需要继续深入分析。