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

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

?? fat.c

?? 提供Sd卡驅動(spi模式)程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
// search til end of FAT
 while(cluster<maxcluster)
  {
   if(GetNextClusterNumber(cluster)==0) break;
   cluster++;
  }

// if we have not found a free cluster til end of FAT
// lets start a new search at beginning of FAT
 if(cluster>=maxcluster)
  {
   cluster=2; // first possible free cluster
   while(cluster<=currentcluster) // search til we come to where we have started
    {
     if(GetNextClusterNumber(cluster)==0) break;
     cluster++;
    }

   if(cluster>=currentcluster) return DISK_FULL; // no free cluster found
  }
  
 if(cluster>=maxcluster) return DISK_FULL;
    
 return cluster;
}
#endif //DOS_WRITE

#ifdef DOS_WRITE
//############################################################
// write a cluster number into fat cluster chain
#ifdef USE_FAT32
 unsigned char WriteClusterNumber(unsigned long cluster, unsigned long number)
#else
 unsigned char WriteClusterNumber(unsigned int cluster, unsigned int number)
#endif
//############################################################
{
#ifdef USE_FAT12
 unsigned int tmp, secoffset;
 unsigned long fatoffset;
 unsigned char lo,hi;
#endif

 unsigned long sector;
 unsigned char *p;
 
 if(cluster<maxcluster) //we need to check this ;-)
  {

#ifdef USE_FAT12
   if(FATtype==FAT12)
    {
     //FAT12 has 1.5 Bytes per FAT entry
     fatoffset= (cluster * 3) >>1 ; //multiply by 1.5 (rounds down)
     secoffset = fatoffset % BYTE_PER_SEC; //we need this for later
     fatoffset= fatoffset / BYTE_PER_SEC; //sector offset from FATFirstSector
     sector=FATFirstSector + fatoffset;

     tmp=(unsigned int)number;
     if(cluster & 0x01) tmp<<=4; //shift to right position
     lo=(unsigned char)tmp;
     hi=(unsigned char)(tmp>>8);
     
#ifdef USE_FATBUFFER
     UpdateFATBuffer(sector); //read FAT sector
#else //#ifdef USE_FATBUFFER
     ReadSector(sector,dirbuf); //read FAT sector
#endif //#ifdef USE_FATBUFFER
     if(secoffset == (BYTE_PER_SEC-1)) //if this is the case, cluster number is
                                   //on a sector boundary. read the next sector too
      {
#ifdef USE_FATBUFFER
       p=&fatbuf[BYTE_PER_SEC-1]; //keep first part of cluster number
#else //#ifdef USE_FATBUFFER
       p=&dirbuf[BYTE_PER_SEC-1]; //keep first part of cluster number
#endif //#ifdef USE_FATBUFFER

       if(cluster & 0x01)
        {
         *p&=0x0F;
         *p|=lo;
        }
       else *p=lo;
        
#ifdef USE_FATBUFFER
       FATStatus=1; // we have made an entry, so write before next FAT sector read
       UpdateFATBuffer(sector+1); //read FAT sector
       p=&fatbuf[0]; //second part of cluster number
#else //#ifdef USE_FATBUFFER
       WriteSector(sector,dirbuf);
       ReadSector(sector+1,dirbuf ); //read next FAT sector
       p=&dirbuf[0]; //second part of cluster number
#endif //#ifdef USE_FATBUFFER

       if(cluster & 0x01) *p=hi;
       else
        {
         *p&=0xF0;
         *p|=hi;
        }

#ifdef USE_FATBUFFER
       FATStatus=1; // we have made an entry, so write before next FAT sector read
#else //#ifdef USE_FATBUFFER
       WriteSector(sector+1,dirbuf);
#endif //#ifdef USE_FATBUFFER
      }
     else
      {
#ifdef USE_FATBUFFER
       p=&fatbuf[secoffset];
#else //#ifdef USE_FATBUFFER
       p=&dirbuf[secoffset];
#endif //#ifdef USE_FATBUFFER

       if(cluster & 0x01)
        {
         *p&=0x0F;
         *p++|=lo;
         *p=hi;
        } 
       else
        {
         *p++=lo;
         *p&=0xF0;
         *p|=hi;
        } 

#ifdef USE_FATBUFFER
       FATStatus=1; // we have made an entry, so write before next FAT sector read
#else //#ifdef USE_FATBUFFER
       WriteSector(sector,dirbuf);
#endif //#ifdef USE_FATBUFFER
      } 

    }//if(FATtype==FAT12)
#endif

#ifdef USE_FAT16
   if(FATtype==FAT16)
    {
     //two bytes per FAT entry
     sector=FATFirstSector + (cluster * 2) / BYTE_PER_SEC;

#ifdef USE_FATBUFFER
     UpdateFATBuffer(sector); //read FAT sector
     p=&fatbuf[(cluster * 2) % BYTE_PER_SEC];
#else //#ifdef USE_FATBUFFER
     ReadSector(sector, dirbuf);
     p=&dirbuf[(cluster * 2) % BYTE_PER_SEC];
#endif //#ifdef USE_FATBUFFER

     *p++=(unsigned char)(number);
     *p  =(unsigned char)(number >> 8);

#ifdef USE_FATBUFFER
     FATStatus=1; // we have made an entry, so write before next FAT sector read
#else //#ifdef USE_FATBUFFER
     WriteSector(sector, dirbuf);
#endif //#ifdef USE_FATBUFFER

    }// if(FATtype==FAT16)
#endif //#ifdef USE_FAT16

#ifdef USE_FAT32
   if(FATtype==FAT32)
    {
     //four bytes per FAT entry
     sector=FATFirstSector + (cluster * 4) / BYTE_PER_SEC;

#ifdef USE_FATBUFFER
     UpdateFATBuffer(sector); //read FAT sector
     p=&fatbuf[(cluster * 4) % BYTE_PER_SEC];
#else //#ifdef USE_FATBUFFER
     ReadSector(sector, dirbuf);
     p=&dirbuf[(cluster * 4) % BYTE_PER_SEC];
#endif //#ifdef USE_FATBUFFER

     number&=0x0FFFFFFF;
     
     *p++=(unsigned char)( number);
     *p++=(unsigned char)(number >> 8);
     *p++=(unsigned char)(number >> 16);
     *p  =(unsigned char)(number >> 24);

#ifdef USE_FATBUFFER
     FATStatus=1; // we have made an entry, so write before next FAT sector read
#else //#ifdef USE_FATBUFFER
     WriteSector(sector, dirbuf);
#endif //#ifdef USE_FATBUFFER

    }// if(FATtype==FAT32) 
#endif //#ifdef USE_FAT32
  } // if(cluster<maxcluster) //we need to check this ;-)

 return 0;
}
#endif //DOS_WRITE

//###########################################################
unsigned char GetDriveInformation(void)
//###########################################################
{
 unsigned char by;
 unsigned long DataSec,TotSec;
 unsigned long bootSecOffset;
 unsigned long FATSz; // FATSize

#ifdef USE_FAT32
  unsigned long CountofClusters;
#else
  unsigned long CountofClusters;
#endif

 unsigned int  RootEntrys;

 struct MBR *mbr;
 struct BootSec *boot;
  
 by=IdentifyMedia(); //LaufwerksInformationen holen
 if(by==0)
  {
   by=ReadSector(0,dirbuf); //Lese den MBR. Erster Sektor auf der Platte
                       //enth鋖t max. 4 Partitionstabellen mit jeweils 16Bytes
                       //Die erste f鋘gt bei 0x01BE an, und nur die nehme ich !

   mbr=(struct MBR *)dirbuf;

   bootSecOffset=mbr->part1.bootoffset; //Nur den brauche ich

   by=ReadSector(bootSecOffset,dirbuf);      //read bootsector
   boot=(struct BootSec *)dirbuf;
   
   secPerCluster=boot->BPB_SecPerClus; //Sectors per Cluster
   RootEntrys=boot->BPB_RootEntCnt;    //32 Byte Root Directory Entrys

//Number of sectors for FAT
   if(boot->BPB_FATSz16 != 0) FATSz = boot->BPB_FATSz16;
   else FATSz = boot->eb.rm32.BPB_FATSz32; //F黵 FAT32

   RootDirSectors = ((RootEntrys * 32) + (BYTE_PER_SEC - 1)) / BYTE_PER_SEC;
   
   FATFirstSector= bootSecOffset + boot->BPB_RsvdSecCnt;
   FirstRootSector = FATFirstSector + (boot->BPB_NumFATs * FATSz);
   FirstDataSector = FirstRootSector + RootDirSectors;

   if(boot->BPB_TotSec16 != 0) TotSec = boot->BPB_TotSec16;
   else TotSec = boot->BPB_TotSec32;

//Number of data sectors
   DataSec = TotSec - (boot->BPB_RsvdSecCnt + (boot->BPB_NumFATs * FATSz) + RootDirSectors);

//Number of valid clusters
   CountofClusters = DataSec / secPerCluster;
   maxcluster=CountofClusters+2;

//Note also that the CountofClusters value is exactly that: the count of data clusters
//starting at cluster 2. The maximum valid cluster number for the volume is
//CountofClusters + 1, and the "count of clusters including the two reserved clusters"
// is CountofClusters + 2.

//Das ist laut MS der einzige Weg FAT12,16,32 zu erkennen.
//Der File System String im Bootsektor wird NICHT ausgewertet
   FirstDirCluster=0; // for FAT12 and FAT16
   if(CountofClusters < 4085)
    {
     FATtype=FAT12;
     endofclusterchain=EOC12;
    }
   else
    {
     if(CountofClusters < 65525)
       {
        FATtype=FAT16;
        endofclusterchain=EOC16;
       }
     else
       {
#ifdef USE_FAT32
        FATtype=FAT32;
        endofclusterchain=EOC32;
        FAT32RootCluster=boot->eb.rm32.BPB_RootClus;
        FirstDirCluster=FAT32RootCluster;
        FirstRootSector=GetFirstSectorOfCluster(FAT32RootCluster);
#endif //#ifdef USE_FAT32
       }
    }

  }
 else
  {
   return F_ERROR; // CF gives no answer
  } 

 FileFirstCluster=0;
 FileSize=0;
 FileFlag=0;

#ifdef USE_FATBUFFER
 FATCurrentSector=FATFirstSector;
 ReadSector(FATCurrentSector,fatbuf); //read first FAT sector

 #ifdef DOS_WRITE
  FATStatus=0; // nothing to write til here
 #endif

#endif

 return F_OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩在线播放一区| 麻豆精品一区二区综合av| 91久久精品一区二区三区| 国产精品一区2区| 久久99精品国产.久久久久久| 亚洲高清免费视频| 亚洲大片精品永久免费| 亚洲国产精品自拍| 亚洲超碰97人人做人人爱| 一区二区三区欧美| 亚洲精品免费播放| 亚洲午夜国产一区99re久久| 亚洲午夜影视影院在线观看| 视频一区二区三区入口| 日韩不卡一区二区三区 | 欧美自拍偷拍一区| 精品一区二区三区免费观看| 色婷婷亚洲精品| 亚洲自拍偷拍网站| 亚洲色图在线看| 亚洲一区二区三区四区在线观看 | 亚洲最大成人综合| 亚洲在线视频免费观看| 日韩国产欧美一区二区三区| 久久电影国产免费久久电影| 国产美女在线观看一区| 99精品视频一区二区三区| 一本在线高清不卡dvd| 欧美吻胸吃奶大尺度电影| 日韩午夜小视频| 中文字幕国产精品一区二区| 亚洲美女免费视频| 美女网站一区二区| av一区二区不卡| 宅男在线国产精品| 欧美韩国日本不卡| 性久久久久久久久| 国产盗摄女厕一区二区三区 | 亚洲影院久久精品| 美腿丝袜一区二区三区| 日韩av电影免费观看高清完整版 | 国产亚洲欧美一级| 最新久久zyz资源站| 天堂久久一区二区三区| 国产成人精品一区二| 欧美午夜精品一区二区蜜桃| 国产日韩欧美精品综合| 午夜精品福利在线| 不卡的电视剧免费网站有什么| 91麻豆精品在线观看| 久久综合网色—综合色88| 一个色综合av| 国产精品亚洲人在线观看| 欧美一区2区视频在线观看| 国产精品狼人久久影院观看方式| 免费国产亚洲视频| 欧美综合一区二区| 中文字幕在线观看不卡视频| 久久精品999| 欧美美女网站色| 亚洲欧洲三级电影| 国产福利视频一区二区三区| 欧美成人在线直播| 天堂午夜影视日韩欧美一区二区| 91免费看片在线观看| 亚洲国产成人午夜在线一区| 韩国精品一区二区| 制服丝袜成人动漫| 天堂一区二区在线免费观看| 欧美三级在线播放| 亚洲精品福利视频网站| 99久久精品免费观看| 久久中文娱乐网| 欧美va亚洲va| 久久精品人人爽人人爽| 久久久久久一二三区| 六月丁香综合在线视频| 欧美一区二区在线不卡| 亚洲大型综合色站| 51久久夜色精品国产麻豆| 一区二区日韩电影| 色婷婷精品大视频在线蜜桃视频| 国产精品精品国产色婷婷| 不卡视频一二三四| 中文字幕人成不卡一区| 99久久精品国产毛片| 一区二区三区四区在线播放| 日本精品视频一区二区| 亚洲午夜私人影院| 欧美日韩视频专区在线播放| 日韩国产欧美在线视频| 精品日韩99亚洲| 国产在线精品一区在线观看麻豆| 久久午夜免费电影| 亚洲男女一区二区三区| 欧美日韩一级大片网址| 岛国精品在线播放| 国产午夜精品美女毛片视频| 成a人片亚洲日本久久| 亚洲视频在线一区观看| 欧美揉bbbbb揉bbbbb| 日韩成人精品在线| 久久久青草青青国产亚洲免观| 高清国产午夜精品久久久久久| 中文字幕在线一区免费| 欧美唯美清纯偷拍| 狠狠网亚洲精品| 日本一区二区成人| 日本电影欧美片| 麻豆精品一区二区| 国产精品三级视频| 欧美人xxxx| 国产馆精品极品| 亚洲高清视频在线| 久久久亚洲精品一区二区三区| 粉嫩高潮美女一区二区三区 | 国产自产2019最新不卡| 国产资源精品在线观看| 欧美高清性hdvideosex| 久久99国产精品麻豆| 国产精品久久久久国产精品日日| 欧美午夜精品一区二区蜜桃| 国产剧情在线观看一区二区| 亚洲综合偷拍欧美一区色| 日韩欧美黄色影院| 色爱区综合激月婷婷| 国产精品一区二区免费不卡| 一区二区三区成人| 久久这里只有精品首页| 在线91免费看| 欧洲视频一区二区| 成+人+亚洲+综合天堂| 国产一区二区美女诱惑| 日韩精品一二三区| 亚洲福中文字幕伊人影院| 亚洲视频一二三| 中文字幕av不卡| 精品日韩在线一区| 欧美亚洲日本国产| 亚洲观看高清完整版在线观看| 日韩美女视频一区二区| 成人精品一区二区三区中文字幕| 另类专区欧美蜜桃臀第一页| 五月激情丁香一区二区三区| 夜夜爽夜夜爽精品视频| 国产精品美女久久久久久| 久久久久久久性| 久久嫩草精品久久久精品一| 欧美精品乱码久久久久久按摩| 麻豆91小视频| 五月激情综合色| 久久精品一级爱片| 国产欧美日韩在线| 91精品婷婷国产综合久久 | 欧美日韩综合一区| 日韩精品中文字幕一区| 亚洲精品一二三四区| 99在线精品免费| 美女脱光内衣内裤视频久久网站 | 亚洲男人的天堂一区二区| 亚洲日穴在线视频| 日韩欧美在线123| 色婷婷综合久久久中文一区二区 | 国产精品小仙女| 亚洲国产精品成人综合| 欧美一卡二卡在线观看| 日本韩国一区二区三区| 成人午夜看片网址| 激情成人午夜视频| 风间由美一区二区三区在线观看| 久久精品国产澳门| 日韩中文字幕不卡| 一个色妞综合视频在线观看| 日产欧产美韩系列久久99| 亚洲午夜久久久久久久久电影网| 国产精品成人一区二区三区夜夜夜| 久久伊人中文字幕| 亚洲视频1区2区| 国产精品久久毛片a| 久久久久国色av免费看影院| 91精品久久久久久久久99蜜臂| 日韩女优毛片在线| 久久综合久久鬼色| 日韩欧美在线123| 在线免费观看一区| 精品99999| 久久久亚洲午夜电影| 久久久国产精品麻豆| 91精品在线麻豆| 欧美刺激脚交jootjob| 69堂亚洲精品首页| 在线91免费看| 亚洲久草在线视频| 亚洲一区二区三区在线看| 一区二区三区 在线观看视频| 制服丝袜亚洲播放| 亚洲精品中文字幕乱码三区| 亚洲最大成人综合| 日韩精品一二区| 色婷婷综合久久久久中文一区二区|