最近在调试IAP,升级程序时遇到数组越界的问题,用原先的函数void STMFLASH_Read(u32 ReadAddr,u16 *pBuffer,u16 NumToRead)
{
u16 i;
//一次读取2字节
for( i = 0; i< NumToRead; i++ )
{
pBuffer[i] = STMFLASH_ReadHalfWord(ReadAddr); //读取2个字节
ReadAddr += 2; //偏移2个字节
}
}
将读取到的数据保存在u8数组中u8 tempbuff1[STM_SECTOR_SIZE]; STMFLASH_Read(APP2_SAVE_ADDR+OffsetAddr, (u16 *)tempbuff1, DataLen); 大小定的是2KB,但是读回来的是4KB,
与原先预想的不一样,导致后面的数据被错误填充,程序错误了。原因就是读取的驱动有问题,数组大小与i的递增存在倍数的关系(如果buffer是u16的话就没问题)。
改后的读Flash的驱动:
void STMFLASH_Read_OnlyByte(u32 ReadAddr,u8 *TempBuffer,u16 NumToRead)
{
u16 i;
//一次读取1个字节
for( i = 0; i< NumToRead; i++ )
{
TempBuffer[i] = STMFLASH_ReadHalfWord(ReadAddr); //读取2个字节
ReadAddr ++; //偏移1个字节
}
}
u16 STMFLASH_ReadHalfWord(u32 faddr)
{
return *(vu16*)faddr;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>