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

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

?? disk.c

?? ZLG文件系統
?? C
字號:
/****************************************Copyright (c)**************************************************
**                               廣州周立功單片機發展有限公司
**                                     研    究    所
**                                        ARM開發組
**
**                                 http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: disk.c
**創   建   人: 陳明計
**最后修改日期: 2003年9月3日
**描        述: FAT文件系統關于邏輯盤管理的部分
**              
**--------------歷史版本信息----------------------------------------------------------------------------
** 創建人: 陳明計
** 版  本: V1.0
** 日 期: 2003年9月3日
** 描 述: 原始版本
**
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人: 陳明計
** 日 期: 2004年4月10日
** 描 述: 增加注釋
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define IN_DISK
#include "config.h"
Disk_Info DiskInfo[MAX_DRIVES];     //邏輯盤信息

/*********************************************************************************************************
** 函數名稱: DiskInit
** 功能描述: 初始化邏輯盤管理模塊
**
** 輸 入: 無
**
** 輸 出: 無
**         
** 全局變量: DiskInfo
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2003年9月3日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陳明計
** 日 期: 2004年4月10日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void DiskInit(void)
{
    uint8 i;
    
    for (i = 0; i < MAX_DRIVES; i++)
    {
        DiskInfo[i].Drive = EMPTY_DRIVE;    // 沒有分配
        DiskInfo[i].FATType = 0xff;         // 無效的文件系統
        DiskInfo[i].SecPerClus = 0;         // 每簇扇區數
        DiskInfo[i].NumFATs = 0;            // FAT表數
        DiskInfo[i].SecPerDisk = 0xffffffff;// 邏輯驅動器包含扇區數
        DiskInfo[i].BytsPerSec = 0;         // 每扇區字節數
        DiskInfo[i].RootDirTable = 0;       // 根目錄開始扇區號(FAT32為開始簇號)
        DiskInfo[i].RootSecCnt = 0;         // 根目錄占用扇區數
        DiskInfo[i].FATStartSec = 0;        // FAT表開始扇區號
        DiskInfo[i].FATSecCnt = 0;          // 每個FAT占用扇區數
        DiskInfo[i].DataStartSec = 0;       // 數據區開始扇區號
        DiskInfo[i].PathClusIndex = 0;      // 當前目錄
        DiskInfo[i].DiakCommand = NULL;     // 驅動程序
    }
    CacheInit();                //初始化磁盤cache
}

/*********************************************************************************************************
** 函數名稱: GetDiskInfo
** 功能描述: 獲取指定邏輯盤信息
**
** 輸 入: 邏輯盤號
**
** 輸 出: 指向邏輯盤信息的結構體指針
**         
** 全局變量: DiskInfo
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2003年9月3日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        Disk_Info * GetDiskInfo(uint8 Drive)
{
    Disk_Info *Rt;
    Rt = NULL;
    if (Drive < MAX_DRIVES)
    {
        if (DiskInfo[Drive].Drive != EMPTY_DRIVE)
        {
            Rt = DiskInfo + Drive;
        }
    }
    return Rt;
}

/*********************************************************************************************************
** 函數名稱: GetEmptyDiskInfoAddr
** 功能描述: 獲取空閑邏輯盤
**
** 輸 入: 無
**
** 輸 出: 指向邏輯盤信息的結構體指針
**         
** 全局變量: DiskInfo
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2003年9月3日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        Disk_Info * GetEmptyDiskInfoAddr(void)
{
    uint8 i;
    Disk_Info *Rt;
    
    Rt = NULL;
    for (i = 0; i < MAX_DRIVES; i++)
    {
        if (DiskInfo[i].Drive == EMPTY_DRIVE)     // 邏輯盤號空閑
        {
            Rt = DiskInfo + i;
            DiskInfo[i].Drive = i;
            break;
        }
    }
    return Rt;
}

/*********************************************************************************************************
** 函數名稱: AddFileDriver
** 功能描述: 增加一個底層驅動程序
**
** 輸 入: DiakCommand:驅動程序接口函數
**
** 輸 出: 無
**         
** 全局變量: DiskInfo
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2003年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陳明計
** 日 期: 2004年4月10日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void AddFileDriver(uint16  (* DiakCommand)(uint8 Cammand, void *Parameter))
{
    uint8 i;
    uint8 *Buf;
    uint16 temp;
    uint32 temp1;
    
    if (DiakCommand == NULL)        // 參數無效退出
    {
        return;
    }

    if (DiakCommand(DISK_INIT, NULL) == DISK_INIT_NOT_OK)   // 底層驅動初始化不成功退出
    {
        return;
    }
    
    /* 重新獲取邏輯盤信息 */
    for (i = 0; i < MAX_DRIVES; i++)
    {
        if (DiskInfo[i].Drive != EMPTY_DRIVE)       /* 邏輯盤已分配 */
        {
            Buf = OpenSec(DiskInfo[i].Drive, 0);    /* 打開扇區0(保留扇區) */
            ReadSec(DiskInfo[i].Drive, 0);
            if (Buf != NULL)
            {
                /* 每扇區字節數 */
                DiskInfo[i].BytsPerSec = Buf[11] | (Buf[12] << 8);
                /* 每簇扇區數 */
                DiskInfo[i].SecPerClus = Buf[13];
                /* FAT開始扇區號 */
                DiskInfo[i].FATStartSec = Buf[14] | (Buf[15] << 8);
                /* FAT表個數 */
                DiskInfo[i].NumFATs = Buf[16];
                /* 根目錄占扇區數 */ 
                DiskInfo[i].RootSecCnt = ((Buf[17] | (Buf[18] << 8)) * 32 + 
                                           DiskInfo[i].BytsPerSec - 1) /
                                           DiskInfo[i].BytsPerSec;
                /* 邏輯盤(卷)占扇區數 */
                temp = Buf[19] | (Buf[20] << 8);
                if (temp != 0)
                {
                    DiskInfo[i].SecPerDisk = temp;
                }
                else
                {
                    DiskInfo[i].SecPerDisk = Buf[32] | (Buf[33] << 8);
                    DiskInfo[i].SecPerDisk |= (((uint32)Buf[34] << 16) | ((uint32)Buf[35] << 24));
                }
                /* FAT表占用扇區數 */
                temp = Buf[22] | (Buf[23] << 8);
                if (temp != 0)
                {
                    DiskInfo[i].FATSecCnt = temp;
                }
                else
                {
                    DiskInfo[i].FATSecCnt = Buf[36] | (Buf[37] << 8);
                    DiskInfo[i].FATSecCnt |= (((uint32)Buf[38] << 16) | (uint32)(Buf[39] << 24));
                }
                
                /* 當前目錄為根目錄 */
                DiskInfo[i].PathClusIndex = 0;
            }
            /* 根目錄開始扇區號 */
            DiskInfo[i].RootDirTable = DiskInfo[i].NumFATs * DiskInfo[i].FATSecCnt + 
                                       DiskInfo[i].FATStartSec;
            /* 數據區開始扇區號 */
            DiskInfo[i].DataStartSec = DiskInfo[i].RootDirTable + DiskInfo[i].RootSecCnt;
            temp1 = DiskInfo[i].SecPerDisk - DiskInfo[i].DataStartSec;
            temp1 = temp1 / DiskInfo[i].SecPerClus;
            DiskInfo[i].ClusPerData = temp1;
            /* 判斷是FAT12、FAT16還是FAT32 */
            if (temp1 < 4085)
            {
                DiskInfo[i].FATType = FAT12;
            }
            else if (temp1 < 65525)
            {
                DiskInfo[i].FATType = FAT16;
            }
            else
            {
                DiskInfo[i].FATType = FAT32;
                /* FAT32 RootDirTable為開始簇號 */
                DiskInfo[i].RootDirTable = Buf[44] | (Buf[45] << 8);
                DiskInfo[i].RootDirTable |= (((uint32)Buf[46] << 16) | ((uint32)Buf[47] << 24));
                DiskInfo[i].PathClusIndex = DiskInfo[i].RootDirTable;
            }
            CloseSec(DiskInfo[i].Drive, 0);     /* 關閉扇區 */
        }
    }
}

/*********************************************************************************************************
** 函數名稱: RemoveFileDriver
** 功能描述: 刪除一個底層驅動程序
**
** 輸 入: Drive:邏輯驅動器號
**
** 輸 出: 無
**         
** 全局變量: DiskInfo
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2003年9月5日
**-------------------------------------------------------------------------------------------------------
** 修改人: 陳明計
** 日 期: 2004年4月10日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void RemoveFileDriver(uint8 Drive)
{
    Disk_RW_Parameter Pa;
    
    if (Drive < MAX_DRIVES)
    if (DiskInfo[Drive].Drive != EMPTY_DRIVE)
    {
        AllCacheWriteBack();
        Pa.Drive = Drive;
        Pa.RsvdForLow = DiskInfo[Drive].RsvdForLow;
        DiskInfo[Drive].DiakCommand(DISK_CLOSE, &Pa);

        DiskInfo[Drive].Drive = EMPTY_DRIVE;    // 沒有分配
        DiskInfo[Drive].FATType = 0xff;         // 無效的文件系統
        DiskInfo[Drive].SecPerClus = 0;         // 每簇扇區數
        DiskInfo[Drive].NumFATs = 0;            // FAT表數
        DiskInfo[Drive].SecPerDisk = 0xffffffff;// 邏輯驅動器包含扇區數
        DiskInfo[Drive].BytsPerSec = 0;         // 每扇區字節數
        DiskInfo[Drive].RootDirTable = 0;       // 根目錄開始扇區號(FAT32為開始簇號)
        DiskInfo[Drive].RootSecCnt = 0;         // 根目錄占用扇區數
        DiskInfo[Drive].FATStartSec = 0;        // FAT表開始扇區號
        DiskInfo[Drive].FATSecCnt = 0;          // 每個FAT占用扇區數
        DiskInfo[Drive].DataStartSec = 0;       // 數據區開始扇區號
        DiskInfo[Drive].PathClusIndex = 0;      // 當前目錄
        DiskInfo[Drive].DiakCommand = NULL;     // 驅動程序
    }
}


/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜电影网| 久久精品在线免费观看| 亚洲毛片av在线| 在线欧美日韩国产| 日韩高清电影一区| 2021久久国产精品不只是精品| 国内精品第一页| 国产精品美女一区二区在线观看| 成人动漫中文字幕| 亚洲国产成人av好男人在线观看| 日韩欧美视频一区| 成人黄色综合网站| 精品夜夜嗨av一区二区三区| 亚洲欧美中日韩| 欧美日韩一区二区在线观看视频 | 国产在线播精品第三| 亚洲三级电影全部在线观看高清| 5月丁香婷婷综合| 色女孩综合影院| 99国产精品99久久久久久| 日本在线不卡视频| 天天av天天翘天天综合网| 国产精品国产三级国产三级人妇 | gogo大胆日本视频一区| 久久久国产精品午夜一区ai换脸| 91丨porny丨首页| 亚洲美女在线一区| 精品日韩欧美在线| 蓝色福利精品导航| 午夜激情一区二区| 一区免费观看视频| 日韩欧美另类在线| 欧美在线免费观看亚洲| 懂色av一区二区夜夜嗨| 亚洲国产成人av| 亚洲最大色网站| 欧美国产成人在线| 久久久久久久久99精品| 91精品国产91综合久久蜜臀| 欧美日韩精品福利| 欧美午夜电影网| 欧美日韩精品免费观看视频| 欧亚一区二区三区| 777xxx欧美| 国产成人在线看| 国产精品一区免费在线观看| 亚洲v中文字幕| 欧美国产乱子伦| 国产午夜久久久久| 日韩欧美一二三区| 国产欧美一区二区精品婷婷| 欧美精品电影在线播放| 欧美高清激情brazzers| 99re成人在线| 制服.丝袜.亚洲.另类.中文| 欧美日韩亚洲另类| 日韩一级黄色片| 国产精品久久久久久久久果冻传媒| 91精品国产美女浴室洗澡无遮挡| 日韩免费性生活视频播放| 欧美无人高清视频在线观看| 欧美精品黑人性xxxx| 久久综合九色综合97婷婷女人 | 欧美成人精品1314www| 久久青草欧美一区二区三区| 日韩理论片在线| 亚洲成人福利片| 一本一道久久a久久精品| 欧美日韩极品在线观看一区| 日韩一区二区电影网| 中文字幕一区在线观看| 国产一区二区剧情av在线| 成人精品国产一区二区4080| 欧美亚洲自拍偷拍| 久久精品综合网| 精品一区二区在线视频| 99热这里都是精品| 欧美精品在线视频| 日韩精品电影在线观看| 成人在线视频一区二区| 欧美高清在线视频| 亚洲影院久久精品| 色综合婷婷久久| 久久久久国色av免费看影院| 麻豆精品一区二区| 欧美日本在线播放| 日韩和欧美一区二区三区| 99国产精品久久久久久久久久久| 精品国产乱码久久久久久浪潮| 亚洲黄色av一区| 成人avav在线| 一区二区在线电影| a美女胸又www黄视频久久| 国产精品久久久久影视| av电影在线观看完整版一区二区| 日本一区二区三区在线不卡| 久久不见久久见免费视频7| 在线免费观看成人短视频| 一区二区在线观看免费| 欧美一级在线免费| 精品一区二区久久| 国产欧美一区二区在线观看| 91成人国产精品| 丰满少妇在线播放bd日韩电影| 中文字幕亚洲在| 欧美色综合网站| 青青草精品视频| 欧美激情一区二区在线| 欧美日韩激情在线| 成人国产精品视频| 久久成人免费网| 综合av第一页| 2021久久国产精品不只是精品| 欧美视频一区二区三区在线观看| 青草av.久久免费一区| 亚洲欧美日韩在线不卡| 精品国产一区二区三区不卡| 96av麻豆蜜桃一区二区| 亚洲乱码中文字幕| 国产欧美日产一区| 91精品国产入口在线| 日韩一级片在线观看| 91在线视频免费观看| 久久精品国产一区二区三区免费看| 欧美激情一区二区三区全黄| 在线不卡一区二区| 91精品福利在线| 欧美另类z0zxhd电影| 欧美日韩一区二区三区四区| 色综合久久久久综合99| 欧美在线观看视频一区二区 | 久久精品亚洲乱码伦伦中文| 久久久久久9999| 一区二区中文字幕在线| 亚洲国产毛片aaaaa无费看| 午夜伦欧美伦电影理论片| 精品一区二区三区影院在线午夜 | 日本三级亚洲精品| 久久精品国产亚洲一区二区三区| 激情综合色综合久久| 国产jizzjizz一区二区| 91成人在线观看喷潮| 欧美喷潮久久久xxxxx| 久久综合久色欧美综合狠狠| 久久久99精品久久| 日韩国产欧美在线视频| 91浏览器在线视频| 亚洲欧美另类图片小说| 国产成人免费视频网站| 久久嫩草精品久久久精品| 日本三级韩国三级欧美三级| 色视频成人在线观看免| 亚洲视频免费观看| 国产ts人妖一区二区| 国产精品网站在线| 国产一区二区三区在线观看免费视频| 欧美一区日韩一区| 亚洲国产wwwccc36天堂| 99精品偷自拍| 午夜欧美一区二区三区在线播放| 成人午夜电影网站| 国产精品家庭影院| av一区二区三区| 日本在线不卡一区| 精品国一区二区三区| 大尺度一区二区| 亚洲一区在线播放| 欧美mv和日韩mv的网站| 高清日韩电视剧大全免费| 国产欧美精品一区aⅴ影院 | wwwwxxxxx欧美| 9久草视频在线视频精品| 一区二区三区美女| 精品成人私密视频| 色综合中文字幕国产 | 一区二区三区 在线观看视频| 色呦呦日韩精品| 成人美女在线视频| 亚洲日本在线a| 欧美成人女星排名| 欧美日韩日日摸| 成人免费毛片a| 精品在线一区二区| 水蜜桃久久夜色精品一区的特点 | 日韩亚洲欧美成人一区| 国产乱国产乱300精品| 日产国产高清一区二区三区| 国产精品久久毛片a| 国产精品无码永久免费888| 欧美大片顶级少妇| 这里只有精品免费| 欧美日韩一区中文字幕| 国产成人在线免费| 国产老妇另类xxxxx| 午夜精品影院在线观看| 老司机精品视频在线| 免费成人在线网站| 韩国三级在线一区| 国产成人免费视频网站高清观看视频| 天堂一区二区在线免费观看|