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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fatfunction.c

?? 單片機(jī)讀寫U盤源碼 基于51單片機(jī)和國(guó)產(chǎn)USB芯片CH374
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
          Cluster = ( ( ProcessSector - FAT.RsvdSecCnt ) << ( FAT.shift - 1 ) ) + ( ( POINT0 - DISKBUF ) >> 1 ) ;
     else
          Cluster = 0x00 ;
     return( Cluster ) ;
}

/*********************************************************************************************************
** 函數(shù)名稱: xProcessDirectory
** 功能描述: 處理目錄/文件名
**
** 輸 入: wr:        指向文件信息結(jié)構(gòu)FILE的指針
**         Attribute: 目錄/文件操作模式
**           A.模式ModeX1: 創(chuàng)建新文件
**           B.模式ModeX2: 創(chuàng)建新目錄
**           C.模式ModeX3: 對(duì)打開的文件截0
**           D.模式ModeX4: 刪除文件/目錄
** 輸 出: 根據(jù)模式選擇完成相應(yīng)的操作
**           A.返回ERR_Directory 報(bào)告異常傳輸錯(cuò)誤
**           B.返回DirectorySuccess表示操作成功完成
**         
** 全局變量: wr -> find.Offset, wr -> find.TransNum, wr -> find.Sector, FAT.FirstSectofClu
** 調(diào)用模塊: mReadSector, mWriteSector, x16CheckClus, x16List
** 調(diào)試碼:   無
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱  
** 日 期: 2007.9.27 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8  xProcessDirectory( FILE * wr, UINT8 Attribute )
{
     UINT8  s ;
     UINT16 i ;
     UINT8  TransNum ;
     UINT8  *POINT0 ;
     UINT8  *POINT1 ;
     UINT8  Directory[ 32 ]  = { 0x2E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,     0x00,0x00,0x00,
                                 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                 0x00,0x00,0x00,0x00,0x00,0x00 } ; 
     UINT16 time ;
     UINT16 date ;
     UINT16 Cluster ;
	    UINT32 ProcessSector ;
     
     //計(jì)算系統(tǒng)日期、時(shí)間
     time = sysclock.time.hour << 11 + sysclock.time.min << 5 + sysclock.time.sec >> 1 ;
     date = sysclock.date.year >> 9 + sysclock.date.month << 5 + sysclock.date.day ;
     
     if ( Attribute == ModeX2 )
     {
          Cluster = x16CheckClus( ) ;
          if ( Cluster == 0x00 )
               return( ERR_FullDisk ) ;
          else  if ( Cluster == ERR_CheckClus )
               return( ERR_CheckClus ) ;
          
		        s = x16List( Cluster, 0xFFFF, ModeZ1 ) ;     //更新FAT表中簇信息
          if( s != ListSuccess )
               return( s ) ;  
          
          FAT.FirstSectofClu = ( ( Cluster - 2 ) * FAT.SecPerClus ) + FAT.FirstDataSector ;    //計(jì)算該簇號(hào)對(duì)應(yīng)的起始扇區(qū)數(shù)
          
          //為新目錄分配簇后,須將該簇初始化
          for ( i = 0; i < FAT.BytesPerSec; i ++ )
               DISKBUF[ i ] = 0 ;
          for ( ProcessSector = FAT.FirstSectofClu; ProcessSector < FAT.FirstSectofClu + FAT.SecPerClus ; ProcessSector ++ )
          {
               s = mWriteSector( ProcessSector, 0x01, DISKBUF );
		             if ( s != USB_INT_SUCCESS )
		                  return( ERR_Write ) ;              
          }
          
          Directory[ 14 ] = ( UINT8 )time ;
          Directory[ 15 ] = ( UINT8 )( time >> 8 ) ;
          Directory[ 16 ] = ( UINT8 )date ;
          Directory[ 17 ] = ( UINT8 )( date >> 8 ) ;
          Directory[ 18 ] = ( UINT8 )date ;
          Directory[ 19 ] = ( UINT8 )( date >> 8 ) ;
          Directory[ 22 ] = ( UINT8 )time ;
          Directory[ 23 ] = ( UINT8 )( time >> 8 ) ;
          Directory[ 24 ] = ( UINT8 )date ;
          Directory[ 25 ] = ( UINT8 )( date >> 8 ) ;
          Directory[ 26 ] = ( UINT8 )Cluster ;
          Directory[ 27 ] = ( UINT8 )( Cluster >> 8 ) ;
          memcpy ( DISKBUF, Directory, 32 ) ;
          Directory[ 1 ]  = 0x2E ;
          Directory[ 26 ] = ( UINT8 )wr -> clus.fat16.LastClus ;
          Directory[ 27 ] = ( UINT8 )( wr -> clus.fat16.LastClus >> 8 ) ;
          memcpy ( DISKBUF+32, Directory, 32 ) ;
          s = mWriteSector( FAT.FirstSectofClu, 0x01, DISKBUF );
		        if ( s != USB_INT_SUCCESS )
		             return( ERR_Write ) ;
          
          TransNum = wr -> find.TransNum ;
          ProcessSector = wr -> find.Sector ;
          s = mReadSector( ProcessSector, TransNum ,DISKBUF );
		        if ( s != USB_INT_SUCCESS )
		             return( ERR_Check ) ;
     }
     POINT0 = wr -> find.Offset ;
     TransNum = wr -> find.TransNum ;
     ProcessSector = wr -> find.Sector ;
     //DISK_BUF內(nèi)操作
     
     POINT1 = wr -> Name ;
     if ( Attribute == ModeX4 )
          ( ( PUSB_FDT )POINT0 ) -> FileName  [ 0 ] = 0xE5 ;
     else
          ( ( PUSB_FDT )POINT0 ) -> FileName  [ 0 ] = *  POINT1 ;
     ( ( PUSB_FDT )POINT0 ) -> FileName       [ 1 ] = *( POINT1 + 1 ) ;
     ( ( PUSB_FDT )POINT0 ) -> FileName       [ 2 ] = *( POINT1 + 2 ) ;
     ( ( PUSB_FDT )POINT0 ) -> FileName       [ 3 ] = *( POINT1 + 3 ) ;
     ( ( PUSB_FDT )POINT0 ) -> FileName       [ 4 ] = *( POINT1 + 4 ) ;
     ( ( PUSB_FDT )POINT0 ) -> FileName       [ 5 ] = *( POINT1 + 5 ) ;
     ( ( PUSB_FDT )POINT0 ) -> FileName       [ 6 ] = *( POINT1 + 6 ) ;
     ( ( PUSB_FDT )POINT0 ) -> FileName       [ 7 ] = *( POINT1 + 7 ) ;
     ( ( PUSB_FDT )POINT0 ) -> FileName       [ 8 ] = *( POINT1 + 8 ) ;
     ( ( PUSB_FDT )POINT0 ) -> FileName       [ 9 ] = *( POINT1 + 9 ) ;
     ( ( PUSB_FDT )POINT0 ) -> FileName       [ 10 ]= *( POINT1 + 10 ) ;
     if ( Attribute == ModeX2 )
          ( ( PUSB_FDT )POINT0 ) -> Attribute       = 0x10 ;
     else
          ( ( PUSB_FDT )POINT0 ) -> Attribute       = 0x00 ;
     ( ( PUSB_FDT )POINT0 ) -> Reserved_NT          = 0x00 ;
     ( ( PUSB_FDT )POINT0 ) -> CtrlTimeTeenth       = 0x00 ;
     ( ( PUSB_FDT )POINT0 ) -> CrtTime        [ 0 ] = ( UINT8 )time ;
     ( ( PUSB_FDT )POINT0 ) -> CrtTime        [ 1 ] = ( UINT8 )( time >> 8 ) ;
     ( ( PUSB_FDT )POINT0 ) -> CrtDate        [ 0 ] = ( UINT8 )date ;
     ( ( PUSB_FDT )POINT0 ) -> CrtDate        [ 1 ] = ( UINT8 )( date >> 8 ) ;
     ( ( PUSB_FDT )POINT0 ) -> LastAccDate    [ 0 ] = ( UINT8 )date;
     ( ( PUSB_FDT )POINT0 ) -> LastAccDate    [ 1 ] = ( UINT8 )( date >> 8 ) ;
     ( ( PUSB_FDT )POINT0 ) -> Reserved       [ 0 ] = 0x00 ;
     ( ( PUSB_FDT )POINT0 ) -> Reserved       [ 1 ] = 0x00 ;
     ( ( PUSB_FDT )POINT0 ) -> WrtTime        [ 0 ] = ( UINT8 )time ;
     ( ( PUSB_FDT )POINT0 ) -> WrtTime        [ 1 ] = ( UINT8 )( time >> 8 ) ;
     ( ( PUSB_FDT )POINT0 ) -> WrtDate        [ 0 ] = ( UINT8 )date ;
     ( ( PUSB_FDT )POINT0 ) -> WrtDate        [ 1 ] = ( UINT8 )( date >> 8 ) ;
     if ( Attribute == ModeX2 )
     {
          ( ( PUSB_FDT )POINT0 ) -> StartClus [ 0 ] = ( UINT8 )Cluster ;
          ( ( PUSB_FDT )POINT0 ) -> StartClus [ 1 ] = ( UINT8 )( Cluster >> 8 ) ;
     }
     else
     {
          ( ( PUSB_FDT )POINT0 ) -> StartClus [ 0 ] = 0x00 ;
          ( ( PUSB_FDT )POINT0 ) -> StartClus [ 1 ] = 0x00 ;
     }
     ( ( PUSB_FDT )POINT0 ) -> FileSize       [ 0 ] = 0x00 ; 
     ( ( PUSB_FDT )POINT0 ) -> FileSize       [ 1 ] = 0x00 ;  
     ( ( PUSB_FDT )POINT0 ) -> FileSize       [ 2 ] = 0x00 ;  
     ( ( PUSB_FDT )POINT0 ) -> FileSize       [ 3 ] = 0x00 ;
     
     //回寫數(shù)據(jù)到目錄內(nèi)
		   s = mWriteSector( ProcessSector, TransNum, DISKBUF );
		   if ( s != USB_INT_SUCCESS )
		        return( ERR_Directory ) ;
		   return( DirectorySuccess ) ;
}

/*********************************************************************************************************
** 函數(shù)名稱: x16RootDirectory
** 功能描述: FAT16根目錄下新建目錄/文件名
**
** 輸 入: wr :       指向文件信息結(jié)構(gòu)FILE的指針
**         Attribute: 目錄/文件操作模式
**           A.模式ModeX1: 創(chuàng)建新文件
**           B.模式ModeX2: 創(chuàng)建新目錄
** 輸 出: 根據(jù)模式選擇完成相應(yīng)的操作
**           A.返回ERR_Directory 報(bào)告異常傳輸錯(cuò)誤
**           B.返回DirectorySuccess表示操作成功完成
**           C.返回ERR_FullRoot報(bào)告根目錄已寫滿,無法正常創(chuàng)建文件/目錄
**         
** 全局變量: wr -> find.Offset, wr -> find.TransNum, wr -> find.Sector, FAT.RootDirSectors, FAT.FirstRootSector, 
** 調(diào)用模塊: mReadSector, mWriteSector, xProcessDirectory
** 調(diào)試碼:   DEBUG_YCF
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8  x16RootDirectory( FILE * wr, UINT8 Attribute ) 
{
     UINT8  s ;
     UINT8  *POINT1 ;
     UINT8  FindFlag ;
	    UINT8  TransNum ;
     UINT16 TransBytes ;
     UINT16 TotalSectors ;
     UINT32 ProcessSector ;
                         
     //初始化變量
     FindFlag = 0 ;
     TransNum = 0 ;
     TotalSectors = FAT.RootDirSectors ;
     ProcessSector = FAT.FirstRootSector ;
     //在范圍內(nèi)( 1簇或根目錄內(nèi) )查找文件
     while ( TotalSectors )      
     {
          //更新讀取扇區(qū)參數(shù)
          ProcessSector += TransNum ;
          TransNum = TotalSectors >= DiskNums ? DiskNums : TotalSectors ;
          
          //讀取根目錄N個(gè)扇區(qū)( N <= SecNum_of_BUF )到DISK_BUF中
          s = mReadSector( ProcessSector ,TransNum ,DISKBUF );
		        if ( s != USB_INT_SUCCESS )
		             return( ERR_Check ) ;
		        
		        //在DISK_BUF中查找文件
		        TransBytes = TransNum << FAT.shift ;
          for ( POINT1 = DISKBUF ; POINT1 < DISKBUF + TransBytes ; POINT1 += 32 )     
          {
               if ( ! ( *POINT1 ) || ( *POINT1 == 0xE5 ) || ( *POINT1 == 0x05 ) )    //若是空文件項(xiàng),則退出
               {    
                    FindFlag = 1 ;
                    wr -> find.TransNum = TransNum ;
                    wr -> find.Sector = ProcessSector ;
                    wr -> find.Offset = POINT1 ;
                    //調(diào)試語句
                    #ifdef  DEBUG_YCF
                    printf( " 找到目錄/文件 !\n " ) ;
                    printf( " 文件地址信息記錄:\n " ) ;
                    printf( " 本次傳輸?shù)纳葏^(qū)數(shù):%d\n ", ( UINT16 )wr -> find.TransNum ) ;
                    printf( " 本次傳輸?shù)钠鹗忌葏^(qū)號(hào):%ld\n ", wr -> find.Sector ) ;
                    printf( " 本次傳輸?shù)纳葏^(qū)內(nèi)偏移:%p \n ", wr -> find.Offset ) ;
                    #endif
                    break ;
               }
          }
          if ( FindFlag )
               break ;
          TotalSectors -= TransNum ;
     }
     //判斷查找結(jié)果
     if ( ! FindFlag  )
          return( ERR_FullRoot ) ;
     wr -> clus.fat16.LastClus = 0 ;
     s = xProcessDirectory( wr, Attribute ) ;
          return( s ) ;
}

/*********************************************************************************************************
** 函數(shù)名稱: x16Creat
** 功能描述: FAT16目錄下處理目錄/文件名
**
** 輸 入: wr :       指向文件信息結(jié)構(gòu)FILE的指針
**         Attribute: 目錄/文件操作模式
**           A.模式ModeX1: 創(chuàng)建新文件
**           B.模式ModeX2: 創(chuàng)建新目錄
** 輸 出: 根據(jù)模式選擇完成相應(yīng)的操作
**           A.返回ERR_Creat 報(bào)告異常傳輸錯(cuò)誤
**           B.返回Creat_Success表示操作成功完成
**         
** 全局變量: wr -> find.Offset, wr -> find.TransNum, wr -> find.Sector
**           FAT.SecPerClus, FAT.FirstSectofClu, FAT.shift, DiskNums
** 調(diào)用模塊: mReadSector, mWriteSector, x16List, x16CheckClus, xProcessDirectory
** 調(diào)試碼:   DEBUG_CREAT
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8  x16Creat( FILE * wr, UINT8 Attribute ) 
{
     UINT8  s ;
     UINT8  FindFlag ;
     UINT8  *POINT0 ;
     UINT8  *POINT2 ;
     UINT8  TransNum ;
     UINT8  TotalSectors ;
     UINT16 TransBytes ;
     UINT16 Cluster ;
     UINT16 NextCluster ;
     UINT32 ProcessSector ;
     
     #ifdef  DEBUG_CREAT
     printf( " 文件不存在,創(chuàng)建新文件 " ) ;
     #endif
     
     //讀取目錄信息
     ProcessSector = wr -> find.Sector ;
     POINT0 = wr -> find.Offset ;
     TransNum = wr -> find.TransNum ;
     s = mReadSector( ProcessSector, TransNum, DISKBUF );
		   if ( s != USB_INT_SUCCESS )
		        return( ERR_Read ) ;
     Cluster = ( UINT16 )( *( POINT0 + 26 ) ) | ( UINT16 )( *( POINT0 + 27 ) ) << 8 ;
     wr -> clus.fat16.LastClus = Cluster ;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区午夜精品| 日韩免费福利电影在线观看| 成人动漫在线一区| 精品无人码麻豆乱码1区2区| 日本va欧美va精品发布| 日韩国产精品久久久| 亚洲成人av一区| 香港成人在线视频| 午夜精品爽啪视频| 日韩有码一区二区三区| 蜜臀91精品一区二区三区| 日本怡春院一区二区| 捆绑调教一区二区三区| 激情五月婷婷综合网| 国产电影精品久久禁18| 成人av在线播放网站| 91色视频在线| 欧美性猛交xxxxxxxx| 欧美日韩在线观看一区二区| 欧美揉bbbbb揉bbbbb| 91精品国产欧美一区二区18| 精品毛片乱码1区2区3区| 久久先锋影音av鲁色资源| 日本一区二区在线不卡| 综合精品久久久| 午夜电影久久久| 久久福利资源站| 成人少妇影院yyyy| 欧美在线观看视频在线| 91精品一区二区三区在线观看| 欧美va在线播放| 国产精品毛片无遮挡高清| 亚洲影视资源网| 蜜桃av一区二区| 成年人国产精品| 精品视频一区 二区 三区| 精品久久久久久久久久久久久久久 | 国内精品国产成人| 岛国一区二区在线观看| 在线观看视频一区二区欧美日韩| 91精品麻豆日日躁夜夜躁| 久久久久国产精品免费免费搜索| 亚洲欧洲制服丝袜| 蜜桃视频在线一区| 91在线观看污| 欧美变态tickling挠脚心| 中文字幕亚洲综合久久菠萝蜜| 亚洲国产精品精华液网站| 国产一区在线观看麻豆| 91久久精品日日躁夜夜躁欧美| 日韩女同互慰一区二区| 亚洲欧美另类图片小说| 久久精品国产免费| 色视频欧美一区二区三区| 日韩免费电影一区| 亚洲色图在线视频| 极品瑜伽女神91| 欧美三级在线播放| 国产精品久久777777| 另类小说综合欧美亚洲| 日本精品一区二区三区高清| 2014亚洲片线观看视频免费| 亚洲图片自拍偷拍| 成人午夜看片网址| 日韩一卡二卡三卡四卡| 97se亚洲国产综合自在线不卡| 久久爱另类一区二区小说| aaa欧美色吧激情视频| 欧美片在线播放| 国产精品久久99| 美国毛片一区二区三区| 色综合欧美在线视频区| 26uuu另类欧美亚洲曰本| 亚洲国产一区二区三区青草影视| 国产**成人网毛片九色| 欧美一二三区在线观看| 亚洲另类色综合网站| 国产乱码精品一品二品| 欧美精品在线一区二区三区| 综合精品久久久| 国产成人亚洲综合a∨猫咪| 91精品国产aⅴ一区二区| 一区二区三区在线看| 成人精品电影在线观看| 亚洲精品一区二区三区四区高清| 午夜伊人狠狠久久| 色综合久久久久综合99| 中文字幕第一区综合| 国产专区欧美精品| 日韩一区二区电影在线| 爽爽淫人综合网网站| 欧美性大战久久久久久久| 亚洲视频综合在线| 成人免费av网站| 国产欧美日韩卡一| 国产河南妇女毛片精品久久久| 日韩欧美专区在线| 蜜臂av日日欢夜夜爽一区| 91精品婷婷国产综合久久 | 免费看黄色91| 91 com成人网| 日本中文在线一区| 日韩一区二区影院| 免费黄网站欧美| 日韩精品一区二区三区四区| 麻豆成人av在线| 精品国产91久久久久久久妲己| 老司机精品视频导航| 欧美精品一区二区蜜臀亚洲| 黑人精品欧美一区二区蜜桃| 久久无码av三级| 国产超碰在线一区| 国产精品少妇自拍| 色综合天天综合网国产成人综合天 | 欧美性大战久久久| 午夜av一区二区| 欧美一区二区三区四区五区| 老鸭窝一区二区久久精品| 日韩免费一区二区| 国产传媒日韩欧美成人| 欧美国产精品一区二区三区| 99久久精品国产网站| 悠悠色在线精品| 欧美麻豆精品久久久久久| 看片的网站亚洲| 国产亚洲欧美日韩在线一区| 波多野结衣一区二区三区| 亚洲精品成人天堂一二三| 91麻豆精品国产自产在线| 久久66热偷产精品| 国产精品乱码妇女bbbb| 欧美色精品在线视频| 免费精品视频在线| 日本一区二区视频在线| 国产日韩亚洲欧美综合| 91精品1区2区| 美女一区二区三区在线观看| 中文字幕欧美区| 欧美在线观看视频在线| 激情六月婷婷久久| 亚洲欧美综合在线精品| 3d动漫精品啪啪一区二区竹菊| 国产一区二区三区免费看| 亚洲男同1069视频| 欧美一区二区在线不卡| 成人午夜看片网址| 丝袜美腿成人在线| 国产精品拍天天在线| 欧美疯狂性受xxxxx喷水图片| 国产一级精品在线| 亚洲乱码一区二区三区在线观看| 91精品国产综合久久福利软件| 懂色av中文一区二区三区| 亚洲国产欧美另类丝袜| 久久精品人人爽人人爽| 欧美三片在线视频观看 | 精品久久久久99| 色综合天天性综合| 久久精品国内一区二区三区| 亚洲视频免费在线| 精品乱码亚洲一区二区不卡| 91色视频在线| 亚洲精品乱码久久久久久| 欧美人与性动xxxx| 国产成人丝袜美腿| 日韩激情视频网站| 中文字幕欧美激情一区| 91精品国产综合久久国产大片| 成人高清免费观看| 另类的小说在线视频另类成人小视频在线 | 久久综合九色综合欧美98| 在线精品视频免费播放| 国产精品一区二区久久精品爱涩| 亚洲国产精品久久一线不卡| 日本一区二区视频在线观看| 日韩一区二区免费电影| 欧美在线三级电影| 99在线视频精品| 国产精品亚洲午夜一区二区三区 | 国产亚洲美州欧州综合国| 欧美图区在线视频| 成人avav影音| 国产九九视频一区二区三区| 五月天婷婷综合| 亚洲精品国产精华液| 国产精品女主播av| 26uuu亚洲综合色欧美| 91精品国产91久久久久久一区二区 | 欧美午夜在线一二页| www.爱久久.com| 国产·精品毛片| 精品一区二区在线免费观看| 日韩高清在线不卡| 亚洲高清免费一级二级三级| 亚洲精品乱码久久久久久黑人 | 麻豆精品视频在线观看| 日日摸夜夜添夜夜添亚洲女人| 亚洲自拍偷拍九九九| 亚洲欧美偷拍卡通变态| 国产精品国产精品国产专区不蜜 |