中级会员
 
- 积分
- 395
- 金钱
- 395
- 注册时间
- 2018-7-16
- 在线时间
- 52 小时
|
最近在调试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;
}
|
|