|
发表于 2011-4-17 11:42:15
|
显示全部楼层
今天再仔细研究了一下楼主的代码,终于找到了问题的所在,我在簇跳转之间花了太长时间,代码如下:mUINT8 readfileSector()
{
mUINT8 Sector_count_Max=7;
mUINT16 i;
mLONG32 ItemSizeTemp;
if(ItemSize==0)
return 0;
SD_readsector(ClusterToSector(CurrentClusterNumber)+Sector_count,SECTORBUFF); //读当前活动扇区
if(FlagSector==0) //|
{ //|这个计数标志用来控制每次读一个簇的时候只判断一次是否为最后簇
FlagSector=1; //|
if(GetNextCluster(CurrentClusterNumber)==0x0fffffff) //判断当前簇是否为最后一簇
{
ItemSizeTemp=ItemSize%(BytesPerSector*SectorPerCluster); //算出在最后一簇里面还有多少个扇区的数据是有效的
Sector_count_Max=(ItemSizeTemp/BytesPerSector); //将扇区计数器上限重新设定
EndOfItem=ItemSizeTemp%BytesPerSector; //计算出最后一个有效扇区内的有效字节
FlagEndOfItem=1; //置位末端对齐标志
}
}
if(Sector_count==Sector_count_Max)
{
Sector_count=0;
FlagSector=0;
CurrentClusterNumber=GetNextCluster(CurrentClusterNumber); //如果不是最后簇,返回下一簇簇号
if(CurrentClusterNumber==0X0fffffff)
return 0;
return 1;
}
Sector_count++;
return 1;
}
后来把上面代码改成如下:
mUINT8 readfileSector()
{
mUINT8 Sector_count_Max=7;
//mUINT16 i;
//mLONG32 ItemSizeTemp;
if(ItemSize==0)
return 0;
SD_readsector(ClusterToSector(CurrentClusterNumber)+Sector_count,SECTORBUFF); //读当前活动扇区
//if(FlagSector==0) //|
// { //|这个计数标志用来控制每次读一个簇的时候只判断一次是否为最后簇
// FlagSector=1; //|
// if(GetNextCluster(CurrentClusterNumber)==0x0fffffff) //判断当前簇是否为最后一簇
// {
// ItemSizeTemp=ItemSize%(BytesPerSector*SectorPerCluster); //算出在最后一簇里面还有多少个扇区的数据是有效的
// Sector_count_Max=(ItemSizeTemp/BytesPerSector); //将扇区计数器上限重新设定
// EndOfItem=ItemSizeTemp%BytesPerSector; //计算出最后一个有效扇区内的有效字节
// FlagEndOfItem=1; //置位末端对齐标志
// }
// }
if(Sector_count==Sector_count_Max)
{
Sector_count=0;
FlagSector=0;
CurrentClusterNumber++;
//=GetNextCluster(CurrentClusterNumber); //如果不是最后簇,返回下一簇簇号
if(CurrentClusterNumber==0X0fffffff)
return 0;
return 1;
}
Sector_count++;
return 1;
}
OK! |
|