新手入门
- 积分
- 18
- 金钱
- 18
- 注册时间
- 2018-5-19
- 在线时间
- 0 小时
|
1金钱
本帖最后由 猫的天空之城 于 2018-5-20 08:15 编辑
如果要写入的数据量很大(4096的好几倍)且每个扇区都要擦除,那么红色部分secremain将多次为4096,pBuffer将在每个扇区中重复写入pBuffer[0]到第pBuffer[4095],是这样理解吗?是否改成W25QXX_BUF[i+secoff]=*pBuffer; pBuffer++;好一点呢?
while(1)
{
W25QXX_Read(W25QXX_BUF,secpos*4096,4096);//读出整个扇区的内容
for(i=0;i<secremain;i++)//校验数据
{
if(W25QXX_BUF[secoff+i]!=0XFF)break;//需要擦除
}
if(i<secremain)//需要擦除
{
W25QXX_Erase_Sector(secpos); //擦除这个扇区
for(i=0;i<secremain;i++) //复制
{
W25QXX_BUF[i+secoff]=pBuffer;
}
W25QXX_Write_NoCheck(W25QXX_BUF,secpos*4096,4096);//写入整个扇区
}else W25QXX_Write_NoCheck(pBuffer,WriteAddr,secremain);//写已经擦除了的,直接写入扇区剩余区间.
if(NumByteToWrite==secremain)break;//写入结束了
else//写入未结束
{
secpos++;//扇区地址增1
secoff=0;//偏移位置为0
pBuffer+=secremain; //指针偏移
WriteAddr+=secremain; //写地址偏移
NumByteToWrite-=secremain; //字节数递减
if(NumByteToWrite>4096)secremain=4096;//下一个扇区还是写不完
else secremain=NumByteToWrite; //下一个扇区可以写完了
}
};
|
|