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

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

?? fatfunction.c

?? 單片機讀寫U盤源碼 基于51單片機和國產(chǎn)USB芯片CH374
?? C
?? 第 1 頁 / 共 3 頁
字號:
/****************************************Copyright (c)**************************************************
**                               CH374做主機操作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)格
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人: 徐亦朱
** 日 期: 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:   指向一個普通的文件名
**         filename: 指向一個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 = ' ' ;
     //確認是否有擴展名
     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: 指向一個11字節(jié)的空數(shù)組
** 輸 出: string指向的文件路徑被處理為8 + 3字符數(shù)組
**           A.返回EndPath報告路徑處理結(jié)束,當前處理的是最終文件名
**           B.否則返回繼續(xù)標識符NextContinue
**         
** 全局變量: 無
** 調(diào)用模塊: ProcessName
** 調(diào)試碼:   DEBUG_PATH
**
**PS:      A.暫時文件名輸入需要盡可能準確,例如不要輸入10個字符的基本名   
**         B.此程序因為沒有對static變量Count初始化而導(dǎo)致POINT2指針亂飛,由于編譯器會經(jīng)常出現(xiàn)莫名其妙的問題
**           對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( " 最后一個路徑符號POINT3地址 = %p\n " , POINT3 ) ;
     #endif 
     //臨時數(shù)組初始化
     for ( POINT0 = temp; POINT0 < ( temp + 13 ); POINT0 ++ )
          * POINT0 = ' ' ;
     
     if( POINT2 != POINT3 + 1 )
     {
          s = NextContinue ;
          //將路徑截取到臨時數(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ù)簇號計算并讀取FAT16表中相關(guān)信息
**
** 輸 入: clus  : 要計算的簇號
**         value : 要更新的值
**         ProcessMode: 函數(shù)工作模式
**           A.ModeZ1: 更新FAT表
**           B.ModeZ2: 查找FAT表中下個簇的值
** 輸 出: A.返回ERR_List報告異常傳輸錯誤
**         B.返回ListSuccess表示操作成功完成
**         C.ModeZ2下會返回下個簇的值
** 全局變量: 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 ;
     
     //計算該簇號對應(yīng)的起始扇區(qū)數(shù)以及FAT中偏移
     FATOffset = clus << 1 ;            //簇N在FAT16表中的偏移 
     ThisFATSecNum = FAT.RsvdSecCnt + ( FATOffset >> FAT.shift ) ;        //簇N在FAT16表中的扇區(qū)號
     ThisFATEntOffset = FATOffset - ( FATOffset >> FAT.shift << FAT.shift ) ;  //簇N在FAT16表中的相對偏移
     
     #ifdef DEBUG_LIST
     printf( "簇%d在FAT16表中的相對偏移 = %d\n", clus, ThisFATEntOffset ) ;
     printf( "簇N在FAT16表中的偏移 = %ld\n", FATOffset ) ;
     printf( "簇N在FAT16表中的扇區(qū)號 = %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ù)
**
** 輸 入: 無
** 輸 出: 返回找到的可寫簇簇號
**           A.返回ERR_CheckClus報告異常傳輸錯誤
**           B.若磁盤簇已寫滿,返回簇號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 ;                  //查找成功標記
     UINT8  *POINT0 ;
     UINT16 Cluster ;                   
     UINT32 ProcessSector ;
     
     //初始化查找標記
     FindFlag = 0 ;
     
     for ( ProcessSector = FAT.RsvdSecCnt, POINT0 = DISKBUF + 4; ProcessSector < FAT.FirstRootSector; ProcessSector ++ )
     {
          s = mReadSector( ProcessSector, 0x01, DISKBUF );       //每次讀取一個扇區(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. 找到簇,返回實際簇號
     //  B. 磁盤簇已寫滿,返回0x00
     if( FindFlag )

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美v国产在线一区二区三区| 91视频免费播放| 久久久蜜桃精品| 成人黄色网址在线观看| 亚洲婷婷综合色高清在线| 欧美综合在线视频| 久久国产精品露脸对白| 国产精品午夜久久| 在线免费观看日本欧美| 日韩精品亚洲一区| 精品国偷自产国产一区| 成人一级视频在线观看| 亚洲欧美视频一区| 日韩视频一区在线观看| 成人中文字幕在线| 天堂成人国产精品一区| 欧美激情一区二区三区全黄| 在线精品视频一区二区三四| 久久精品国产亚洲aⅴ| 国产精品国产三级国产普通话三级| 91久久免费观看| 久久不见久久见中文字幕免费| 日韩1区2区日韩1区2区| 欧美精品一区二区三区一线天视频| heyzo一本久久综合| 天堂va蜜桃一区二区三区 | 欧美日韩一级视频| 蜜桃久久久久久久| 亚洲视频在线观看三级| 精品裸体舞一区二区三区| 91丨九色丨蝌蚪富婆spa| 美女一区二区视频| 亚洲日本在线观看| 精品国产91久久久久久久妲己| 色呦呦国产精品| 国产乱一区二区| 午夜精品久久久久久久久久久| 国产欧美日韩不卡| 日韩一区二区在线观看视频| 色av一区二区| 国产成人免费在线| 男男视频亚洲欧美| 亚洲午夜在线电影| 亚洲欧美一区二区在线观看| 2023国产精品自拍| 欧美日本乱大交xxxxx| 91婷婷韩国欧美一区二区| 国产在线一区观看| 美女脱光内衣内裤视频久久影院| 亚洲夂夂婷婷色拍ww47| 中文字幕永久在线不卡| 国产喷白浆一区二区三区| 欧美成人免费网站| 欧美一区二区高清| 在线播放/欧美激情| 欧美综合久久久| 一本久久精品一区二区| 成人av电影在线| 成人亚洲精品久久久久软件| 韩国欧美国产1区| 九色|91porny| 精品一区二区三区免费播放| 日本少妇一区二区| 日韩成人精品在线观看| 亚洲高清久久久| 亚洲成人av资源| 亚洲超碰精品一区二区| 亚洲sss视频在线视频| 亚洲va韩国va欧美va精品 | 日本va欧美va精品| 日韩精品电影在线观看| 日韩中文字幕麻豆| 三级欧美韩日大片在线看| 亚洲成年人网站在线观看| 婷婷成人激情在线网| 天天亚洲美女在线视频| 免费在线观看一区二区三区| 美女视频黄免费的久久 | 午夜精品福利视频网站| 午夜激情综合网| 日韩av在线发布| 狠狠色狠狠色合久久伊人| 韩国v欧美v日本v亚洲v| 成人一区二区三区中文字幕| a4yy欧美一区二区三区| 91国偷自产一区二区开放时间| 欧美日韩一级二级| 欧美成人精品福利| 日本一区二区在线不卡| 亚洲图片另类小说| 午夜精品福利视频网站| 精久久久久久久久久久| 成人国产精品免费观看动漫| 一本一道久久a久久精品 | 欧美影院一区二区| 欧美人与z0zoxxxx视频| 337p日本欧洲亚洲大胆色噜噜| 欧美激情自拍偷拍| 亚洲人成小说网站色在线| 天天做天天摸天天爽国产一区| 精品亚洲成a人在线观看| 成人开心网精品视频| 在线视频欧美精品| 精品入口麻豆88视频| 国产免费久久精品| 亚洲国产综合视频在线观看| 韩国理伦片一区二区三区在线播放| 粉嫩在线一区二区三区视频| 欧美最新大片在线看| 精品国产成人在线影院| 亚洲精品国产高清久久伦理二区| 日日夜夜精品视频天天综合网| 国产黑丝在线一区二区三区| 在线视频你懂得一区二区三区| 欧美不卡在线视频| 亚洲精品国产无套在线观| 麻豆专区一区二区三区四区五区| 成人小视频在线| 欧美精品免费视频| 18欧美乱大交hd1984| 日韩**一区毛片| 色8久久人人97超碰香蕉987| 久久免费精品国产久精品久久久久 | 中文字幕一区二区日韩精品绯色| 亚洲成人av免费| va亚洲va日韩不卡在线观看| 日韩三级视频在线观看| 一区二区三区精密机械公司| 国产成人午夜99999| 欧美日韩国产综合草草| 1024成人网| 国产成人在线免费| 日韩欧美国产三级电影视频| 艳妇臀荡乳欲伦亚洲一区| 国产精品一区二区久激情瑜伽| 欧美猛男超大videosgay| 亚洲特级片在线| 国产99久久精品| 久久亚区不卡日本| 蜜臀av性久久久久蜜臀av麻豆| 欧美视频在线观看一区| 亚洲欧洲国产日韩| 国产老肥熟一区二区三区| 欧美一区永久视频免费观看| 一区二区三区在线视频免费| 成人18精品视频| 中文字幕欧美激情| 国产乱码精品1区2区3区| 欧美一级在线观看| 五月天丁香久久| 欧美精品1区2区3区| 亚洲小说欧美激情另类| 在线免费观看不卡av| 一区二区三区不卡在线观看 | 91免费视频网| 中文无字幕一区二区三区| 国产二区国产一区在线观看| 精品国内片67194| 久久99精品久久久久久久久久久久| 欧美精品色一区二区三区| 午夜精品123| 777午夜精品免费视频| 天天影视涩香欲综合网| 欧美精品自拍偷拍| 青青青爽久久午夜综合久久午夜| 3d成人h动漫网站入口| 午夜日韩在线观看| 欧美一区日本一区韩国一区| 蜜桃一区二区三区在线观看| 欧美大片免费久久精品三p| 精品在线视频一区| 久久久www免费人成精品| 国产精品亚洲一区二区三区妖精 | 日本精品一区二区三区高清| 亚洲综合另类小说| 91.xcao| 国产一区二区精品在线观看| 国产三级久久久| 色综合久久综合中文综合网| 亚洲一区二区三区激情| 91精品国产综合久久婷婷香蕉| 蜜桃视频一区二区| 欧美精品一区二区三区一线天视频 | 国产清纯在线一区二区www| 国产91丝袜在线观看| 亚洲女同女同女同女同女同69| 亚洲国产岛国毛片在线| 高清久久久久久| 国产精品情趣视频| 91在线视频官网| 性欧美疯狂xxxxbbbb| 欧美电影免费观看完整版| 丁香另类激情小说| 亚洲女与黑人做爰| 欧美精品乱码久久久久久按摩| 精品亚洲免费视频| 一区精品在线播放| 欧美精品精品一区| 国产乱码精品一区二区三区忘忧草| 国产精品色在线|