给HC32L136做在线升级ISP功能,发现对FLASH进行大数据写操作时,校验不通过,写进去函数返回成功,但实际上还是0xFF。
查阅相关资料后,是写FLASH时没有关闭其他中断,影响到FLASH操作导致,关闭中断后,问题解决。源码如下:
en_result_t FlashWrite(unsigned short u32Addr, unsigned char *DatInf, unsigned short DatLen)
{
en_result_t enResult = Error;
int i;
__disable_irq(); /* 禁止全局中断*/
///< FLASH目标扇区擦除
while(Flash_SectorErase(u32Addr)!=0);
for(i=0; i<DatLen; i++){
enResult = Flash_WriteByte(u32Addr+i, DatInf[i]);
if (Ok == enResult)
{
if(*((volatile uint8_t*)(u32Addr+i)) == DatInf[i])
{
enResult = Ok;
}
else
{
enResult = 128;
break;
}
}
}
__enable_irq(); /* 使能全局中断 */
return enResult;
}
MARK!20230420