亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? znfat.c

?? f340的MP3程序,通過SD卡讀入解碼器
?? C
?? 第 1 頁 / 共 4 頁
字號:
   for(i=0;i<pArg->BytesPerSector;i++)
   {
    if(counter>=len) 
    {
      return len;
    }
    pbuf[counter]=znFAT_Buffer[i];
    counter++;
    pfi->FileCurPos++;
    pfi->FileCurPos%=pArg->BytesPerSector;
    pfi->FileCurOffset++;
   }   
  }
  pfi->FileCurSector=j;
  znFAT_ReadSector(pfi->FileCurSector,znFAT_Buffer);
  temp=len-counter;
  for(i=0;i<temp;i++)
  {
   if(counter>=len) 
   {
     return len;
   }
   pbuf[counter]=znFAT_Buffer[i];
   counter++;
   pfi->FileCurPos++;
   pfi->FileCurPos%=pArg->BytesPerSector;
   pfi->FileCurOffset++;  
  }
 }
 else
 {
  len=0;
 }
 return len;
}

#endif
/**************************************************************************
 - 功能描述:從文件某一位置讀取一定長度的數據,由pfun所指向的函數來處理
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:外部,使用戶使用
 - 參數說明:pfi:FileInfoStruct類型的結構體指針,用于裝載文件參數信息,文件
             讀取的過程中,此結構體中的相關參數會更新,比如文件的當前偏移量、
             文件的當前扇區,文件的當前簇等等
             offset:要定位的偏移量,要小于文件的大小 
             len:要讀取的數據的長度,如果len+offset大于文件的大小,則實際讀
             取的數據量是從offset開始到文件結束
             pfun:對讀取的數據的處理函數,pfun指向處理函數,這樣可以靈活的
             配置數據如何去處理,比如是放在緩沖區中,還是把數據通過串口發送
             出去,只需要pfun去指向相應的處理函數可以了
 - 返回說明:讀取到的實際的數據長度,如果讀取失敗,比如指定的偏移量大于了文件
             大小,則返回0
 - 注:在讀取一個文件的數據前,必須先將該文件用znFAT_Open_File打開
 **************************************************************************/
#ifdef ZNFAT_READ_FILEX

UINT32 znFAT_Read_FileX(struct FileInfoStruct *pfi,UINT32 offset,UINT32 len,void (*pfun)(UINT8))
{
 UINT32 i,j,k,temp;
 UINT32 counter=0;
 if(offset<pfi->FileSize)
 {
  if(offset+len>pfi->FileSize) len=pfi->FileSize-offset;
  znFAT_Seek_File(pfi,offset);
  
  znFAT_ReadSector(pfi->FileCurSector,znFAT_Buffer);
  for(i=pfi->FileCurPos;i<pArg->BytesPerSector;i++)
  {
   if(counter>=len) 
   {
     return len;
   }
   (*pfun)(znFAT_Buffer[i]);
   counter++;
   pfi->FileCurPos++;
   pfi->FileCurOffset++;
  }
  if(pfi->FileCurSector-(SOC(pfi->FileCurCluster))!=(pArg->SectorsPerClust-1))
  {
   for(j=pfi->FileCurSector+1;j<(SOC(pfi->FileCurCluster))+pArg->SectorsPerClust;j++)
   {
    znFAT_ReadSector(j,znFAT_Buffer);
    pfi->FileCurSector=j;
    for(i=0;i<pArg->BytesPerSector;i++)
    {
     if(counter>=len)
     {
       return len;
     }
     (*pfun)(znFAT_Buffer[i]);
     counter++;
     pfi->FileCurPos++;
     pfi->FileCurOffset++;
    }
   }
  } 
  temp=(len-counter)/(pArg->BytesPerSector*pArg->SectorsPerClust);
  for(k=0;k<temp;k++)
  {
   pfi->FileCurCluster=znFAT_GetNextCluster(pfi->FileCurCluster);
   for(j=(SOC(pfi->FileCurCluster));j<(SOC(pfi->FileCurCluster))+pArg->SectorsPerClust;j++)
   {
    znFAT_ReadSector(j,znFAT_Buffer);
    pfi->FileCurSector=j;
    for(i=0;i<pArg->BytesPerSector;i++)
    {
     if(counter>=len)  
 	 {
       return len;
     }
     (*pfun)(znFAT_Buffer[i]);
     counter++;
     pfi->FileCurOffset++;
	 pfi->FileCurPos++;
	 pfi->FileCurPos%=pArg->BytesPerSector;
    } 
   }    
  }
  pfi->FileCurCluster=znFAT_GetNextCluster(pfi->FileCurCluster);
  temp=(SOC(pfi->FileCurCluster))+((len-counter)/pArg->BytesPerSector);
  pfi->FileCurSector=(SOC(pfi->FileCurCluster));
  for(j=(SOC(pfi->FileCurCluster));j<temp;j++)
  {
   znFAT_ReadSector(j,znFAT_Buffer);
   pfi->FileCurSector=j;
   for(i=0;i<pArg->BytesPerSector;i++)
   {
    if(counter>=len) 
    {
      return len;
    }
    (*pfun)(znFAT_Buffer[i]);
    counter++;
    pfi->FileCurPos++;
    pfi->FileCurPos%=pArg->BytesPerSector;
    pfi->FileCurOffset++;
   }   
  }
  pfi->FileCurSector=j;
  znFAT_ReadSector(pfi->FileCurSector,znFAT_Buffer);
  temp=len-counter;
  for(i=0;i<temp;i++)
  {
   if(counter>=len) 
   {
     return len;
   }
   (*pfun)(znFAT_Buffer[i]);
   counter++;
   pfi->FileCurPos++;
   pfi->FileCurPos%=pArg->BytesPerSector;
   pfi->FileCurOffset++;  
  }
 }
 else
 {
  len=0;
 }
 return len;
}

#endif
/**************************************************************************
 - 功能描述:尋找可用的空閑簇
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:無
 - 返回說明:如果找到了空閑簇,返回空閑簇的簇號,否則返回0
 - 注:尋找空閑簇是創建目錄/文件以及向文件寫入數據的基礎,它如果能很快的尋
       找到空閑簇,那么創建目錄/文件以及向文件寫入數據這些操作也會比較快。
       所以我們絕不會從最開始的簇依次去尋找,而是使用了二分搜索的算法,以達
       到較好的效果。如果空閑簇沒有找到,很有可能就說明存儲設備已經沒有空間
 **************************************************************************/
#ifdef ZNFAT_FIND_FREE_CLUST

UINT32 znFAT_Find_Free_Clust(UINT8 flag)
{
 UINT32 iClu,iSec;
 struct znFAT_FAT *pFAT;
 for(iSec=pArg->FirstFATSector+temp_last_cluster/128;iSec<pArg->FirstFATSector+pArg->FATsectors;iSec++)
 {
  znFAT_ReadSector(iSec,znFAT_Buffer);
  pFAT=(struct znFAT_FAT *)znFAT_Buffer;
  for(iClu=0;iClu<pArg->BytesPerSector/4;iClu++)
  {
   if(LE2BE((UINT8 *)(&((pFAT->Items))[iClu]),4)==0)
   {
    if(!flag)
	{
	 znFAT_Update_FSInfo_Free_Clu(0);
	 temp_last_cluster=128*(iSec-pArg->FirstFATSector)+iClu;
	 znFAT_Empty_Cluster(temp_last_cluster);	   
     return temp_last_cluster;
	}
	else
	{
	 znFAT_Update_FSInfo_Last_Clu(128*(iSec-pArg->FirstFATSector)+iClu);
	 return 128*(iSec-pArg->FirstFATSector)+iClu;
	}
   }
  }
 }
 return 0;
}

#endif
/**************************************************************************
 - 功能描述:填充文件/目錄項
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:prec:指向一個direntry類型的結構體,它的結構就是znFAT中文件/
             目錄項的結構
             name:文件或目錄的名稱
             is_dir:指示這個文件/目錄項是文件還是目錄,分別用來實現文件、
             目錄的創建 1表示創建目錄 0表示創建文件
 - 返回說明:無
 - 注:這里創建文件或目錄的方法是,先將文件或目錄的信息填充到一個結構體中,
       然后再將這個結構體的數據寫入到存儲設備的相應的扇區的相應位置上去,這
       樣就完成了文件或目錄的創建。
       在填充文件或目錄的信息時,文件或目錄的首簇并沒有填進去,而是全0
 **************************************************************************/
#ifdef FILL_REC_INF

void Fill_Rec_Inf(struct direntry *prec,INT8 *name,UINT8 is_dir,UINT8 *ptd)
{
 UINT8 i=0,len=0,h=0;
 UINT16 temp;

 if(is_dir)
 {
  len=strlen(name);
  if(len>8)
  {
   for(i=0;i<6;i++)
   {
    (prec->deName)[i]=L2U(name[i]);
   }
   (prec->deName)[6]='~';
   (prec->deName)[7]='1';
  }
  else
  {
   for(i=0;i<len;i++)
   {
    (prec->deName)[i]=L2U(name[i]);
   }
   for(;i<8;i++)
   {
    (prec->deName)[i]=' ';
   }
  }
  for(i=0;i<3;i++)
  {
   (prec->deExtension)[i]=' ';
  }
 }
 else
 {
  while(name[len]!=0) {if(name[len]=='.') h=1;len++;}
  if(!h) {name[len]='.';name[len+1]=0;}  
  len=0;
  while(name[len]!='.' && name[len]!=0) len++;
  if(len>8)
  {
   for(i=0;i<6;i++)
   {
    (prec->deName)[i]=L2U(name[i]);
   }
   (prec->deName)[6]='~';
   (prec->deName)[7]='1';
  }
  else
  {
   for(i=0;i<len;i++)
   {
    (prec->deName)[i]=L2U(name[i]);
   }
   for(;i<8;i++)
   {
    (prec->deName)[i]=' ';
   }
  }
  if(name[len]==0)
  {
   for(i=0;i<3;i++)
   {
    (prec->deExtension)[i]=' ';
   }
  }
  else
  {
   for(i=0;i<3;i++)
   {
    (prec->deExtension)[i]=' ';
   }
   len++;
   i=0;
   while(name[len]!=0)
   {
    (prec->deExtension)[i++]=L2U(name[len]);
	len++;
   }
  }
 }
 if(is_dir)
  (prec->deAttributes)=0x10;
 else
  (prec->deAttributes)=0x20;
 
 temp=MAKE_FILE_TIME(ptd[3],ptd[4],ptd[5]);
 (prec->deCTime)[0]=temp;
 (prec->deCTime)[1]=temp>>8;
 temp=MAKE_FILE_DATE(ptd[0],ptd[1],ptd[2]);
 (prec->deCDate)[0]=temp;
 (prec->deCDate)[1]=temp>>8;

 (prec->deLowerCase)=0;
 (prec->deHighClust)[0]=0;
 (prec->deHighClust)[1]=0;
 (prec->deLowCluster)[0]=0;
 (prec->deLowCluster)[1]=0;
 for(i=0;i<4;i++)
 {
  (prec->deFileSize)[i]=0;
 }				
}

#endif
/**************************************************************************
 - 功能描述:更新FAT表
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:cluster:要更新的簇項號
             dat:要將相應的簇項更新為dat
 - 返回說明:無
 - 注:在向文件寫入了數據后,需要對FAT表進行更表,以表明新數據的簇鏈關系 
       刪除文件的時候,也需要將該文件的簇項進行清除,銷毀文件的簇鏈關系
 **************************************************************************/
#ifdef ZNFAT_MODIFY_FAT

void znFAT_Modify_FAT(UINT32 cluster,UINT32 dat)
{
 znFAT_ReadSector(pArg->FirstFATSector+(cluster*4/pArg->BytesPerSector),znFAT_Buffer);
 znFAT_Buffer[((cluster*4)%pArg->BytesPerSector)+0]=dat&0x000000ff;
 znFAT_Buffer[((cluster*4)%pArg->BytesPerSector)+1]=(dat&0x0000ff00)>>8;
 znFAT_Buffer[((cluster*4)%pArg->BytesPerSector)+2]=(dat&0x00ff0000)>>16;
 znFAT_Buffer[((cluster*4)%pArg->BytesPerSector)+3]=(dat&0xff000000)>>24;
 znFAT_WriteSector(pArg->FirstFATSector+(cluster*4/pArg->BytesPerSector),znFAT_Buffer);

 znFAT_ReadSector(pArg->FirstFATSector+pArg->FATsectors+(cluster*4/pArg->BytesPerSector),znFAT_Buffer);
 znFAT_Buffer[((cluster*4)%pArg->BytesPerSector)+0]=dat&0x000000ff;
 znFAT_Buffer[((cluster*4)%pArg->BytesPerSector)+1]=(dat&0x0000ff00)>>8;
 znFAT_Buffer[((cluster*4)%pArg->BytesPerSector)+2]=(dat&0x00ff0000)>>16;
 znFAT_Buffer[((cluster*4)%pArg->BytesPerSector)+3]=(dat&0xff000000)>>24;
 znFAT_WriteSector(pArg->FirstFATSector+pArg->FATsectors+(cluster*4/pArg->BytesPerSector),znFAT_Buffer); 
}

#endif

/**************************************************************************
 - 功能描述:在存儲設備中創建一個文件/目錄項
 - 隸屬模塊:znFAT文件系統模塊
 - 函數屬性:內部
 - 參數說明:pfi:指向FileInfoStruct類型的結構體,用于裝載剛創建的文件的信息
                 也就是說,如果創建的是目錄,則此結構體不會被更新
             cluster:在cluster這個簇中創建文件/目錄項,用于實現在任意目錄下
                 創建文件或目錄,可以通過znFAT_Enter_Dir來獲取某一個目錄的開
                 始簇
             name:文件/目錄的名稱
             is_dir:指示要創建的是文件還是目錄,文件與目錄的創建方法是不同的
                 1表示創建目錄 0表示創建文件
 - 返回說明:成功返回1,失敗返回-1
 **************************************************************************/
#ifdef ZNFAT_CREATE_REC

UINT8 znFAT_Create_Rec(struct FileInfoStruct *pfi,UINT32 cluster,INT8 *name,UINT8 is_dir,UINT8 *ptd)
{
 UINT32 iSec,iRec,temp_sec,temp_clu,new_clu,i,old_clu;
 UINT8 flag=0;
 UINT16 temp_Rec;
 struct direntry *pRec;
 Fill_Rec_Inf(&temp_rec,name,is_dir,ptd);
 do
 {
  old_clu=cluster;
  temp_sec=SOC(cluster);
  for(iSec=temp_sec;iSec<temp_sec+pArg->SectorsPerClust;iSec++)
  {
   znFAT_ReadSector(iSec,znFAT_Buffer);
   for(iRec=0;iRec<pArg->BytesPerSector;iRec+=sizeof(struct direntry))
   {
    pRec=(struct direntry *)(znFAT_Buffer+iRec);
	if((pRec->deName)[0]==0)
	{
	 flag=1;
	 if(is_dir)
	 {
	  if(!(new_clu=znFAT_Find_Free_Clust(0))) return -1;
	  znFAT_Modify_FAT(new_clu,0x0fffffff);
	  (temp_rec.deHighClust)[0]=(new_clu&0x00ff0000)>>16;
      (temp_rec.deHighClust)[1]=(new_clu&0xff000000)>>24;
      (temp_rec.deLowCluster)[0]=(new_clu&0x000000ff);
      (temp_rec.deLowCluster)[1]=(new_clu&0x0000ff00)>>8;
	 }
	 znFAT_ReadSector(iSec,znFAT_Buffer);
	 for(i=0;i<sizeof(struct direntry);i++)
	 {
	  ((UINT8 *)pRec)[i]=((UINT8 *)(&temp_rec))[i];
	 }
	 znFAT_WriteSector(iSec,znFAT_Buffer);
	 temp_sec=iSec;
	 temp_Rec=iRec;
	 iRec=pArg->BytesPerSector;
	 iSec=temp_sec+pArg->SectorsPerClust;
	}
   }
  }
 }while(!flag && (cluster=znFAT_GetNextCluster(cluster))!=0x0fffffff);
 if(!flag)
 {
  if(!(temp_clu=znFAT_Find_Free_Clust(0))) return -1;
  znFAT_Modify_FAT(temp_clu,0x0fffffff);
  znFAT_Modify_FAT(old_clu,temp_clu);
  temp_sec=SOC(temp_clu);
  temp_Rec=0;
  znFAT_ReadSector(temp_sec,znFAT_Buffer);
  if(is_dir)
  {
   if(!(new_clu=znFAT_Find_Free_Clust(0))) return -1;
   znFAT_Modify_FAT(new_clu,0x0fffffff);
   znFAT_ReadSector(temp_sec,znFAT_Buffer);
   (temp_rec.deHighClust)[0]=(new_clu&0x00ff0000)>>16;
   (temp_rec.deHighClust)[1]=(new_clu&0xff000000)>>24;
   (temp_rec.deLowCluster)[0]=(new_clu&0x000000ff);
   (temp_rec.deLowCluster)[1]=(new_clu&0x0000ff00)>>8;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国欧美国产1区| 亚洲精品一线二线三线无人区| 欧美在线观看视频在线| 日韩精品资源二区在线| 亚洲欧洲无码一区二区三区| 亚洲国产色一区| 国产成人一级电影| 欧美一区二区三区视频在线 | 精品视频一区二区三区免费| 日韩一级视频免费观看在线| 国产精品久久网站| 国模冰冰炮一区二区| 欧美日韩国产区一| 亚洲精品你懂的| 成人黄色综合网站| 久久亚洲免费视频| 蜜桃传媒麻豆第一区在线观看| 色综合激情五月| 国产精品久久三| 成人教育av在线| www久久久久| 麻豆91在线播放免费| 欧美肥大bbwbbw高潮| 亚洲一区二区中文在线| 97久久超碰国产精品| 国产精品免费看片| 国产成人精品免费| 久久久国产精品不卡| 久久国产福利国产秒拍| 欧美一区二区视频在线观看 | 99精品欧美一区| 国产精品大尺度| 成人综合激情网| 国产欧美日韩一区二区三区在线观看| 美女网站色91| 精品sm捆绑视频| 国产乱子伦视频一区二区三区| 日韩精品综合一本久道在线视频| 日韩精品91亚洲二区在线观看| 欧美疯狂性受xxxxx喷水图片| 亚洲无线码一区二区三区| 91福利区一区二区三区| 亚洲一区二三区| 欧美高清性hdvideosex| 青草av.久久免费一区| 精品乱码亚洲一区二区不卡| 久久99精品国产.久久久久久| 欧美videossexotv100| 国内精品写真在线观看| 国产色一区二区| 色综合视频在线观看| 亚洲国产成人av网| 日韩欧美一区二区久久婷婷| 国内精品免费**视频| 中文字幕久久午夜不卡| 色哟哟在线观看一区二区三区| 亚洲自拍都市欧美小说| 91精品免费在线观看| 精品一区二区在线视频| 国产日产精品一区| 日本精品一区二区三区高清| 一区二区三区日韩欧美精品| 欧美高清dvd| 国产成人精品aa毛片| 亚洲一区中文日韩| 精品国产一二三| 9i在线看片成人免费| 午夜精品免费在线| 久久久.com| 欧美日韩精品免费| 国产乱码精品1区2区3区| 亚洲精品国产第一综合99久久| 欧美一三区三区四区免费在线看 | 成人avav影音| 日韩av不卡在线观看| 国产精品水嫩水嫩| 7777精品伊人久久久大香线蕉经典版下载 | 精品区一区二区| 成人va在线观看| 男男视频亚洲欧美| 亚洲靠逼com| 久久综合色鬼综合色| 91小视频在线| 国内成人精品2018免费看| 一区二区三区中文免费| 精品人在线二区三区| 色诱亚洲精品久久久久久| 精品一区二区在线看| 亚洲永久免费av| 国产精品福利在线播放| 精品日韩99亚洲| 欧美夫妻性生活| 日本大香伊一区二区三区| 国产精品一区二区男女羞羞无遮挡| 亚洲午夜羞羞片| 有码一区二区三区| 亚洲国产精品v| 久久久国产精品午夜一区ai换脸| 欧美日韩午夜在线| 91视视频在线直接观看在线看网页在线看 | 在线视频欧美区| 国产精品99久久久久久久女警| 日本少妇一区二区| 午夜伦理一区二区| 亚洲午夜精品网| 一区二区三区av电影| 1024精品合集| 自拍偷在线精品自拍偷无码专区| 国产亚洲欧美日韩俺去了| 精品99一区二区三区| 日韩欧美精品在线| 欧美不卡一区二区三区四区| 欧美性感一类影片在线播放| 色88888久久久久久影院按摩| 99精品国产热久久91蜜凸| 暴力调教一区二区三区| 成人少妇影院yyyy| 成人app软件下载大全免费| 国产成人av电影在线| 国产福利91精品一区二区三区| 国产一区二区调教| 国产精品系列在线观看| 大桥未久av一区二区三区中文| 国产乱国产乱300精品| 国产黄人亚洲片| av不卡免费在线观看| 91电影在线观看| 91精品中文字幕一区二区三区| 欧美日韩在线精品一区二区三区激情 | 欧美理论电影在线| 欧美电影影音先锋| 欧美电影免费观看高清完整版在线| 欧美不卡在线视频| 国产蜜臀97一区二区三区| 综合精品久久久| 亚洲18色成人| 国内不卡的二区三区中文字幕| 国产91综合网| 色菇凉天天综合网| 日韩亚洲欧美在线观看| 精品1区2区在线观看| 国产性色一区二区| 亚洲黄色录像片| 蜜桃精品在线观看| 成人av中文字幕| 欧美精选午夜久久久乱码6080| 欧美成人艳星乳罩| 日韩美女精品在线| 日韩经典一区二区| 国产成人亚洲综合a∨猫咪| 一本到三区不卡视频| 欧美一区二区三区免费| 中文乱码免费一区二区| 亚洲电影你懂得| 国产成人av一区| 欧美人与z0zoxxxx视频| 国产日产精品1区| 日本va欧美va精品| 99久精品国产| 精品国产免费视频| 一区二区三区成人在线视频| 麻豆高清免费国产一区| 色综合亚洲欧洲| 日韩午夜小视频| 国产精品国产三级国产| 日本vs亚洲vs韩国一区三区二区 | 日本道在线观看一区二区| 日韩免费高清视频| 一区二区三区丝袜| 成人国产亚洲欧美成人综合网| 欧美日韩亚洲综合在线 | 日韩一级大片在线观看| 国产精品嫩草影院com| 免费一级片91| 欧美三级在线播放| 国产精品久久久久三级| 国产一区二区三区免费播放| 欧美日韩三级一区二区| 亚洲欧洲av在线| 国产成+人+日韩+欧美+亚洲| 7777精品伊人久久久大香线蕉完整版 | 成人精品免费视频| 日韩久久久精品| 日韩精品亚洲一区| 欧美日韩国产精品自在自线| 国产精品夫妻自拍| 风间由美一区二区三区在线观看 | 蜜臀久久久久久久| 欧美视频三区在线播放| 欧美国产1区2区| 国产精品一区三区| 亚洲精品在线网站| 九九精品视频在线看| 制服视频三区第一页精品| 亚洲自拍偷拍欧美| 色猫猫国产区一区二在线视频| 国产精品久久三区| 丁香一区二区三区| 国产精品不卡在线| 91麻豆国产在线观看|