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

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

?? fatfunction.c

?? 單片機(jī)讀寫U盤源碼 基于51單片機(jī)和國(guó)產(chǎn)USB芯片CH374
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
/****************************************Copyright (c)**************************************************
**                               CH374做主機(jī)操作U盤讀寫程序
**                                     FAT16文件系統(tǒng)層
**                                        功能函數(shù)
**
**                                        VBeat 0.5
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: FATFunction.C
**創(chuàng)   建   人: 徐亦朱
**最后修改日期: 2007年9月27日
**描        述: FAT文件系統(tǒng)層功能函數(shù)
**              
**--------------歷史版本信息----------------------------------------------------------------------------
** 創(chuàng)建人: 徐亦朱
** 版  本: VBeat 0.3
** 日 期: 2007年9月21日
** 描 述: 完善程序風(fēng)格
**
**--------------當(dāng)前版本修訂------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007年9月27日
** 描 述: 優(yōu)化數(shù)據(jù)結(jié)構(gòu)及算法
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include  <stdio.h>
#include  <string.h>

#include  "HAL.H"
#include  "HAL_BASE2.C"
#include  "PARA_HW2.C"
#include  "FAT.H"
#include  "FATFunction.H"

/*********************************************************************************************************
** 函數(shù)名稱: ProcessName
** 功能描述: 8 + 3文件名處理
**
** 輸 入: string:   指向一個(gè)普通的文件名
**         filename: 指向一個(gè)11字節(jié)的空數(shù)組
** 輸 出: string指向的文件名被處理為11字節(jié)大小8 + 3文件名數(shù)組
**         
** 全局變量: 無
** 調(diào)用模塊: 無
** 調(diào)試碼:   DEBUG_NAME
**  
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  ProcessName( const UINT8 * string, UINT8 * filename )
{ 
     #ifdef DEBUG_NAME
     UINT8  i ;
     #endif
     UINT8  ExtFlag ;
     UINT8  * POINT0 ;
     UINT8  * POINT1 ;
     UINT8  * POINT2 ;
     
     //文件名數(shù)組初始化
     for ( POINT0 = filename; POINT0 < ( filename + 11 ); POINT0 ++ )
               * POINT0 = ' ' ;
     //確認(rèn)是否有擴(kuò)展名
     ExtFlag = 0 ;
     for ( POINT0 = string ; *POINT0 != '\0' && POINT0 < ( string + 9 ) ; POINT0 ++ )
     {
          if ( *POINT0 != '.' )
               continue ;
          ExtFlag = 1 ;
          break ;
     }
     //文件名處理
     if ( ExtFlag )
     {
          for ( POINT0 = string, POINT1 = filename ; *POINT0 != '.' && POINT0 < string + 8 ; POINT0 ++, POINT1 ++ )
               * POINT1 = * POINT0 ;
          POINT2 = ++ POINT0 ;
          for ( POINT1 = filename + 8 ; *POINT0 != '\0' && POINT0 < POINT2 + 3 ; POINT0 ++, POINT1 ++ )
               * POINT1 = * POINT0 ;
     }
     else
     {
          for ( POINT0 = string, POINT1 = filename ; *POINT0 != '\0' && POINT0 < string + 8 ; POINT0 ++, POINT1 ++ )
               * POINT1 = * POINT0 ;
     }
     //調(diào)試語句,查看轉(zhuǎn)換是否正確
     #ifdef DEBUG_NAME
     for ( i = 0; i < 11; i ++ )
          printf( " Process the conversion result : %c\n ", filename[ i ] ) ;
     #endif
}

/*********************************************************************************************************
** 函數(shù)名稱: ProcessPath
** 功能描述: 文件路徑處理
**
** 輸 入: string:   指向要操作的文件路徑,路徑輸入格式: /……/……/……
**         filename: 指向一個(gè)11字節(jié)的空數(shù)組
** 輸 出: string指向的文件路徑被處理為8 + 3字符數(shù)組
**           A.返回EndPath報(bào)告路徑處理結(jié)束,當(dāng)前處理的是最終文件名
**           B.否則返回繼續(xù)標(biāo)識(shí)符NextContinue
**         
** 全局變量: 無
** 調(diào)用模塊: ProcessName
** 調(diào)試碼:   DEBUG_PATH
**
**PS:      A.暫時(shí)文件名輸入需要盡可能準(zhǔn)確,例如不要輸入10個(gè)字符的基本名   
**         B.此程序因?yàn)闆]有對(duì)static變量Count初始化而導(dǎo)致POINT2指針亂飛,由于編譯器會(huì)經(jīng)常出現(xiàn)莫名其妙的問題
**           對(duì)static顯式初始化很有必要  
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT8  ProcessPath( const UINT8 *string, UINT8 * filename )
{
     UINT8  s ;
     UINT8  *POINT0 ;
     UINT8  *POINT1 ;
     UINT8  *POINT3 ;
     UINT8  temp[ 13 ] ;
     static UINT8  *POINT2 ;
     static UINT8 Count = 0 ;
     
     POINT3 = strrchr( string, '/' ) ;
     if ( ! Count )
          POINT2 = string + 1 ;
     //調(diào)試語句
     #ifdef DEBUG_PATH
     printf( " 路徑字符串內(nèi)存地址 = %p\n ", string ) ;
     printf( " 靜態(tài)指針變量POINT2地址 = %p\n ", POINT2 ) ;
     printf( " 最后一個(gè)路徑符號(hào)POINT3地址 = %p\n " , POINT3 ) ;
     #endif 
     //臨時(shí)數(shù)組初始化
     for ( POINT0 = temp; POINT0 < ( temp + 13 ); POINT0 ++ )
          * POINT0 = ' ' ;
     
     if( POINT2 != POINT3 + 1 )
     {
          s = NextContinue ;
          //將路徑截取到臨時(shí)數(shù)組中
          for ( POINT0 = POINT2, POINT1 = temp; *POINT0 != '/' && POINT0 < ( POINT2 + 13 ) ; POINT0 ++, POINT1 ++ )
               * POINT1 = * POINT0 ;
          ( * ++ POINT1 ) = '\0' ;
          POINT2 = ++ POINT0 ;
          ProcessName( temp, filename ) ;
          Count ++ ;
     }
     else
     {
          Count = 0 ;    
          s = EndPath ;
          ProcessName( POINT3+1, filename ) ;
     }
     //調(diào)試語句
     #ifdef DEBUG_PATH
     printf( " 本次要查找的文件/目錄名 = %s\n ", filename ) ;
     #endif
     
     return( s ) ;       
}  

/*********************************************************************************************************
** 函數(shù)名稱: x16List
** 功能描述: 根據(jù)簇號(hào)計(jì)算并讀取FAT16表中相關(guān)信息
**
** 輸 入: clus  : 要計(jì)算的簇號(hào)
**         value : 要更新的值
**         ProcessMode: 函數(shù)工作模式
**           A.ModeZ1: 更新FAT表
**           B.ModeZ2: 查找FAT表中下個(gè)簇的值
** 輸 出: A.返回ERR_List報(bào)告異常傳輸錯(cuò)誤
**         B.返回ListSuccess表示操作成功完成
**         C.ModeZ2下會(huì)返回下個(gè)簇的值
** 全局變量: FAT.SecPerClus, FAT.FirstDataSector, DISKBUF
** 調(diào)用模塊: mReadSector, mWriteSector
** 調(diào)試碼:   DEBUG_LIST
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

UINT16 x16List( UINT16 clus, UINT16 value, UINT8 ProcessMode ) 
{
     UINT8  s ; 
     UINT16 Cluster ;
     UINT16 ThisFATEntOffset ;
     UINT32 FATOffset ;
     UINT32 ThisFATSecNum ;
     
     //計(jì)算該簇號(hào)對(duì)應(yīng)的起始扇區(qū)數(shù)以及FAT中偏移
     FATOffset = clus << 1 ;            //簇N在FAT16表中的偏移 
     ThisFATSecNum = FAT.RsvdSecCnt + ( FATOffset >> FAT.shift ) ;        //簇N在FAT16表中的扇區(qū)號(hào)
     ThisFATEntOffset = FATOffset - ( FATOffset >> FAT.shift << FAT.shift ) ;  //簇N在FAT16表中的相對(duì)偏移
     
     #ifdef DEBUG_LIST
     printf( "簇%d在FAT16表中的相對(duì)偏移 = %d\n", clus, ThisFATEntOffset ) ;
     printf( "簇N在FAT16表中的偏移 = %ld\n", FATOffset ) ;
     printf( "簇N在FAT16表中的扇區(qū)號(hào) = %ld\n", ThisFATSecNum ) ;
     #endif
     
     s = mReadSector( ThisFATSecNum , 0x01, DISKBUF );
     if ( s != USB_INT_SUCCESS )
          return( ERR_List ) ;
     
     if ( ProcessMode == ModeZ2 )
     {     
          Cluster = ( UINT16 )DISKBUF[ ThisFATEntOffset ] | ( UINT16 )DISKBUF[ ThisFATEntOffset + 1 ] << 8 ;
          return( Cluster ) ;
     }
     else  if ( ProcessMode == ModeZ1 )
     {
          DISKBUF[ ThisFATEntOffset ] = ( UINT8 )value ;
		        DISKBUF[ ThisFATEntOffset + 1 ] = ( UINT8 )( value >> 8 ) ;  
		        s = mWriteSector( ThisFATSecNum , 0x01, DISKBUF );
		        if ( s != USB_INT_SUCCESS )
		             return( ERR_List ) ;    
          return( ListSuccess ) ;
     } 
}

/*********************************************************************************************************
** 函數(shù)名稱: x16CheckClus
** 功能描述: FAT16查可寫簇以便寫入數(shù)據(jù)
**
** 輸 入: 無
** 輸 出: 返回找到的可寫簇簇號(hào)
**           A.返回ERR_CheckClus報(bào)告異常傳輸錯(cuò)誤
**           B.若磁盤簇已寫滿,返回簇號(hào)0
**         
** 全局變量: FAT.RsvdSecCnt, FAT.FirstRootSector, FAT.BytesPerSec
** 調(diào)用模塊: mReadSector, mWriteSector
** 調(diào)試碼:   無
**
**
** 作 者: 徐亦朱
** 日 期: 2007年9月21日
**-------------------------------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 2007.9.27
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
UINT16  x16CheckClus( void ) 
{
     UINT8  s ;
     UINT8  FindFlag ;                  //查找成功標(biāo)記
     UINT8  *POINT0 ;
     UINT16 Cluster ;                   
     UINT32 ProcessSector ;
     
     //初始化查找標(biāo)記
     FindFlag = 0 ;
     
     for ( ProcessSector = FAT.RsvdSecCnt, POINT0 = DISKBUF + 4; ProcessSector < FAT.FirstRootSector; ProcessSector ++ )
     {
          s = mReadSector( ProcessSector, 0x01, DISKBUF );       //每次讀取一個(gè)扇區(qū)的FAT表到DISKBUF中
		        if ( s != USB_INT_SUCCESS )
		             return( ERR_CheckClus ) ;
          
          for ( ; POINT0 < DISKBUF + FAT.BytesPerSec; POINT0 += 2 )   //在DISKBUF里查找可寫簇
          {
               if( ! ( *POINT0 ) && ! ( *( POINT0 + 1 ) ) )
               {
                    FindFlag = 1 ;
                    break ;
               }
          }
          //判斷本次查找情況:
          //  A. 查到可寫簇 -- 跳出查找循環(huán)
          //  B. 沒有查到 -- 重置DISK_BUF內(nèi)偏移量,繼續(xù)下一次查找循環(huán)
          if( ! FindFlag )
          {
               POINT0 = DISKBUF ;
               continue ;
          }
          break ;
     }
     
     //查找結(jié)束,根據(jù)結(jié)果判斷返回值
     //  A. 找到簇,返回實(shí)際簇號(hào)
     //  B. 磁盤簇已寫滿,返回0x00
     if( FindFlag )

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清免费一级二级三级| 国产精品免费视频网站| 91老师片黄在线观看| 国内成人免费视频| 精品亚洲aⅴ乱码一区二区三区| 秋霞午夜av一区二区三区 | 婷婷激情综合网| 亚洲欧美一区二区三区孕妇| 中文字幕在线一区免费| 国产精品福利一区二区三区| 国产精品拍天天在线| 中文字幕一区二区三区在线不卡| 1区2区3区欧美| 亚洲最快最全在线视频| 亚洲成人黄色小说| 蜜乳av一区二区三区| 国产在线乱码一区二区三区| 国产福利一区二区三区| 成人福利视频网站| 色婷婷精品久久二区二区蜜臀av | 一区二区三区在线播| 亚洲一区二区三区小说| 青青草国产精品亚洲专区无| 国产一区二区三区不卡在线观看 | 在线观看国产日韩| 欧美电影在线免费观看| 久久伊人中文字幕| 亚洲人成伊人成综合网小说| 亚洲一区在线电影| 国产乱妇无码大片在线观看| 97精品电影院| 欧美一区二区三区成人| 国产清纯美女被跳蛋高潮一区二区久久w | 国产三级精品三级在线专区| 中文字幕一区二区在线观看 | 日韩女优av电影在线观看| 久久综合国产精品| 一区二区三区四区在线播放| 美女视频网站黄色亚洲| 97超碰欧美中文字幕| 日韩三区在线观看| 亚洲婷婷在线视频| 狠狠色丁香九九婷婷综合五月| 色婷婷精品久久二区二区蜜臂av | 欧美视频第二页| 2014亚洲片线观看视频免费| 亚洲精品国产无天堂网2021| 精品一区二区三区免费毛片爱| 色偷偷久久人人79超碰人人澡| 日韩一区二区三区免费看| 亚洲同性gay激情无套| 黄色成人免费在线| 欧美三级三级三级| 亚洲视频小说图片| 国产一区二区久久| 欧美一区二区三区视频在线 | 青青草一区二区三区| 色婷婷综合久久久久中文 | 欧美日韩激情一区二区三区| 国产精品―色哟哟| 韩国女主播一区二区三区| 欧美综合一区二区| 一区二区三区四区亚洲| 99久久综合国产精品| 久久久久久一二三区| 麻豆极品一区二区三区| 欧美久久一二区| 亚洲成人在线网站| 欧美午夜电影网| 亚洲靠逼com| 91免费版在线| 亚洲私人影院在线观看| www.av精品| 一区在线观看免费| 91色.com| 夜色激情一区二区| 欧美视频日韩视频| 午夜精品福利一区二区三区av| 欧美这里有精品| 亚洲影院在线观看| 欧美色中文字幕| 香蕉加勒比综合久久| 欧美日韩在线精品一区二区三区激情| 亚洲精品中文字幕在线观看| 色老汉一区二区三区| 亚洲一区在线视频观看| 欧美日韩国产a| 日欧美一区二区| 精品国精品国产| 国产成人av电影| 国产精品每日更新在线播放网址| 成人国产视频在线观看| 国产精品不卡在线| 91福利国产精品| 日本亚洲视频在线| 在线日韩一区二区| 亚洲www啪成人一区二区麻豆| 欧美日韩久久久久久| 精品中文字幕一区二区小辣椒| 精品国产1区2区3区| 成人一级黄色片| 亚洲综合免费观看高清完整版 | 国产大片一区二区| 国产清纯在线一区二区www| 91一区二区在线观看| 亚洲成av人影院| 久久亚洲精华国产精华液| 91一区二区三区在线观看| 日韩高清不卡在线| 国产欧美日韩另类一区| 在线亚洲+欧美+日本专区| 捆绑变态av一区二区三区| 欧美激情一区二区三区不卡| 在线免费观看视频一区| 久久99热国产| 自拍偷拍亚洲激情| 欧美成人一区二区三区| 色天天综合色天天久久| 久久99深爱久久99精品| 亚洲精品视频在线观看免费| 欧美精品日日鲁夜夜添| 成人性生交大片免费看视频在线| 亚洲国产日日夜夜| 国产精品美女一区二区在线观看| 欧美日韩一区小说| 成人性生交大片免费看中文网站| 天堂av在线一区| 亚洲精品日日夜夜| 久久精品亚洲国产奇米99| 欧美日韩国产经典色站一区二区三区 | 七七婷婷婷婷精品国产| 亚洲色图另类专区| 国产香蕉久久精品综合网| 欧美日本在线视频| 91福利区一区二区三区| 不卡一区二区三区四区| 精东粉嫩av免费一区二区三区| 午夜视频久久久久久| 综合色天天鬼久久鬼色| 久久精品视频在线免费观看| 日韩精品一区在线观看| 在线成人小视频| 欧美三级韩国三级日本三斤| 91丨九色丨黑人外教| 成人一区二区三区中文字幕| 久久精品国产久精国产| 日韩精品乱码av一区二区| 亚洲精品菠萝久久久久久久| 中文字幕一区日韩精品欧美| 国产欧美日韩综合精品一区二区| 精品免费国产一区二区三区四区| 欧美色窝79yyyycom| 欧美天堂一区二区三区| 色综合久久久久久久久久久| 99国产一区二区三精品乱码| heyzo一本久久综合| 成人av在线影院| 成熟亚洲日本毛茸茸凸凹| 粉嫩嫩av羞羞动漫久久久| 国产老肥熟一区二区三区| 国产精品影音先锋| 国产不卡一区视频| a4yy欧美一区二区三区| 91免费看视频| 欧美午夜片在线看| 欧美一区二区三区视频免费| 在线不卡a资源高清| 91精品欧美久久久久久动漫| 欧美一区二区三区免费| 精品欧美黑人一区二区三区| 久久精品在线观看| 中文字幕中文字幕中文字幕亚洲无线| 中文字幕制服丝袜一区二区三区 | 欧美三区在线视频| 欧美一区二区三区啪啪| 久久蜜桃av一区精品变态类天堂| 久久精品免费在线观看| 亚洲欧美视频在线观看| 亚洲国产美女搞黄色| 奇米精品一区二区三区四区 | 国产精品五月天| 一片黄亚洲嫩模| 久久精品国产久精国产| 成人网在线播放| 欧美日韩黄色一区二区| 久久色在线视频| 一区二区三区视频在线观看| 奇米在线7777在线精品| 成人av一区二区三区| 538在线一区二区精品国产| 精品国产免费一区二区三区四区 | 国产日韩精品一区二区浪潮av| 亚洲女同女同女同女同女同69| 日韩精品免费视频人成| 成人一级视频在线观看| 777欧美精品| 亚洲欧洲国产专区| 久久国产麻豆精品| 在线观看日韩高清av| 26uuu色噜噜精品一区二区|