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

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

?? ff.c

?? 最新的LPC214X FATFS驅(qū)動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
////  $Id: ff.c 42 2008-10-04 18:40:36Z jcw $//  $Revision: 42 $//  $Author: jcw $//  $Date: 2008-10-04 14:40:36 -0400 (Sat, 04 Oct 2008) $//  $HeadURL: http://tinymicros.com/svn_public/arm/lpc2148_demo/trunk/fatfs/ff.c $///*--------------------------------------------------------------------------/  /  FatFs - FAT file system module  R0.04b                    (C)ChaN, 2007  /---------------------------------------------------------------------------/  / The FatFs module is an experimenal project to implement FAT file system to  / cheap microcontrollers. This is a free software and is opened for education,  / research and development under license policy of following trems.  /  /  Copyright (C) 2007, ChaN, all right reserved.  /  / * The FatFs module is a free software and there is no warranty.  / * You can use, modify and/or redistribute it for personal, non-profit or  /   profit use without any restriction under your responsibility.  / * Redistributions of source code must retain the above copyright notice.  /  /---------------------------------------------------------------------------/  /  Feb 26, 2006  R0.00  Prototype.  /  Apr 29, 2006  R0.01  First stable version.  /  Jun 01, 2006  R0.02  Added FAT12 support.  /                       Removed unbuffered mode.  /                       Fixed a problem on small (<32M) patition.  /  Jun 10, 2006  R0.02a Added a configuration option (_FS_MINIMUM).  /  Sep 22, 2006  R0.03  Added f_rename().  /                       Changed option _FS_MINIMUM to _FS_MINIMIZE.  /  Dec 11, 2006  R0.03a Improved cluster scan algolithm to write files fast.  /                       Fixed f_mkdir() creates incorrect directory on FAT32.  /  Feb 04, 2007  R0.04  Supported multiple drive system.  /                       Changed some interfaces for multiple drive system.  /                       Changed f_mountdrv() to f_mount().  /                       Added f_mkfs().  /  Apr 01, 2007  R0.04a Supported multiple partitions on a plysical drive.  /                       Added a capability of extending file size to f_lseek().  /                       Added minimization level 3.  /                       Fixed an endian sensitive code in f_mkfs().  /  May 05, 2007  R0.04b Added a configuration option _USE_NTFLAG.  /                       Added FSInfo support.  /                       Fixed DBCS name can result FR_INVALID_NAME.  /                       Fixed short seek (<= csize) collapses the file object.  /---------------------------------------------------------------------------*/#include <stdio.h> // ####include <string.h>#include "ff.h"     /* FatFs declarations */#include "disk.h"   /* Include file for user provided disk functions *//*--------------------------------------------------------------------------  Module Private Functions  ---------------------------------------------------------------------------*/static FATFS *FatFs [_DRIVES]; /* Pointer to the file system objects (logical drives) */static U16 fsid;        /* File system mount ID *//*-----------------------------------------------------------------------*//* Change window offset                                                  *//*-----------------------------------------------------------------------*/staticBOOL move_window (    /* TRUE: successful, FALSE: failed */    FATFS *fs,      /* File system object */    U32 sector    /* Sector number to make apperance in the fs->win[] */    )           /* Move to zero only writes back dirty window */{  U32 wsect;  wsect = fs->winsect;  if (wsect != sector) {  /* Changed current window */#if _FS_READONLY == 0    U8 n;    if (fs->winflag) {  /* Write back dirty window if needed */      if (diskWrite(fs->drive, fs->win, wsect, 1) != DRESULT_OK)        return FALSE;      fs->winflag = 0;      if (wsect < (fs->fatbase + fs->sects_fat)) {  /* In FAT area */        for (n = fs->n_fats; n >= 2; n--) { /* Refrect the change to FAT copy */          wsect += fs->sects_fat;          diskWrite(fs->drive, fs->win, wsect, 1);        }      }    }#endif    if (sector) {      if (diskRead(fs->drive, fs->win, sector, 1) != DRESULT_OK)        return FALSE;      fs->winsect = sector;    }  }  return TRUE;}/*-----------------------------------------------------------------------*//* Clean-up cached data                                                  *//*-----------------------------------------------------------------------*/#if _FS_READONLY == 0staticFRESULT sync (      /* FR_OK: successful, FR_RW_ERROR: failed */    FATFS *fs     /* File system object */    ){  fs->winflag = 1;  if (!move_window(fs, 0)) return FR_RW_ERROR;#if _USE_FSINFO  if (fs->fs_type == FS_FAT32 && fs->fsi_flag) {    /* Update FSInfo sector if needed */    fs->winsect = 0;    memset(fs->win, 0, 512);    ST_U16(&fs->win[BS_55AA], 0xAA55);    ST_U32(&fs->win[FSI_LeadSig], 0x41615252);    ST_U32(&fs->win[FSI_StrucSig], 0x61417272);    ST_U32(&fs->win[FSI_Free_Count], fs->free_clust);    ST_U32(&fs->win[FSI_Nxt_Free], fs->last_clust);    diskWrite(0, fs->win, fs->fsi_sector, 1);    fs->fsi_flag = 0;  }#endif  if (diskIoctl(fs->drive, IOCTL_CTRL_SYNC, NULL) != DRESULT_OK) return FR_RW_ERROR;  return FR_OK;}#endif/*-----------------------------------------------------------------------*//* Get a cluster status                                                  *//*-----------------------------------------------------------------------*/staticU32 get_cluster (   /* 0,>=2: successful, 1: failed */    FATFS *fs,      /* File system object */    U32 clust     /* Cluster# to get the link information */    ){  U16 wc, bc;  U32 fatsect;  if (clust >= 2 && clust < fs->max_clust) {    /* Valid cluster# */    fatsect = fs->fatbase;    switch (fs->fs_type) {      case FS_FAT12 :        bc = (U16)clust * 3 / 2;        if (!move_window(fs, fatsect + (bc / S_SIZ))) break;        wc = fs->win[bc & (S_SIZ - 1)]; bc++;        if (!move_window(fs, fatsect + (bc / S_SIZ))) break;        wc |= (U16)fs->win[bc & (S_SIZ - 1)] << 8;        return (clust & 1) ? (wc >> 4) : (wc & 0xFFF);      case FS_FAT16 :        if (!move_window(fs, fatsect + (clust / (S_SIZ / 2)))) break;        return LD_U16(&fs->win[((U16)clust * 2) & (S_SIZ - 1)]);      case FS_FAT32 :        if (!move_window(fs, fatsect + (clust / (S_SIZ / 4)))) break;        return LD_U32(&fs->win[((U16)clust * 4) & (S_SIZ - 1)]) & 0x0FFFFFFF;    }  }  return 1; /* There is no cluster information, or an error occured */}/*-----------------------------------------------------------------------*//* Change a cluster status                                               *//*-----------------------------------------------------------------------*/#if _FS_READONLY == 0staticBOOL put_cluster (    /* TRUE: successful, FALSE: failed */    FATFS *fs,      /* File system object */    U32 clust,    /* Cluster# to change */    U32 val     /* New value to mark the cluster */    ){  U16 bc;  U8 *p;  U32 fatsect;  fatsect = fs->fatbase;  switch (fs->fs_type) {    case FS_FAT12 :      bc = (U16)clust * 3 / 2;      if (!move_window(fs, fatsect + (bc / S_SIZ))) return FALSE;      p = &fs->win[bc & (S_SIZ - 1)];      *p = (clust & 1) ? ((*p & 0x0F) | ((U8)val << 4)) : (U8)val;      bc++;      fs->winflag = 1;       if (!move_window(fs, fatsect + (bc / S_SIZ))) return FALSE;      p = &fs->win[bc & (S_SIZ - 1)];      *p = (clust & 1) ? (U8)(val >> 4) : ((*p & 0xF0) | ((U8)(val >> 8) & 0x0F));      break;    case FS_FAT16 :      if (!move_window(fs, fatsect + (clust / (S_SIZ / 2)))) return FALSE;      ST_U16(&fs->win[((U16)clust * 2) & (S_SIZ - 1)], (U16)val);      break;    case FS_FAT32 :      if (!move_window(fs, fatsect + (clust / (S_SIZ / 4)))) return FALSE;      ST_U32(&fs->win[((U16)clust * 4) & (S_SIZ - 1)], val);      break;    default :      return FALSE;  }  fs->winflag = 1;  return TRUE;}#endif /* !_FS_READONLY *//*-----------------------------------------------------------------------*//* Remove a cluster chain                                                *//*-----------------------------------------------------------------------*/#if _FS_READONLY == 0staticBOOL remove_chain (   /* TRUE: successful, FALSE: failed */    FATFS *fs,      /* File system object */    U32 clust     /* Cluster# to remove chain from */    ){  U32 nxt;  while (clust >= 2 && clust < fs->max_clust) {    nxt = get_cluster(fs, clust);    if (nxt == 1) return FALSE;    if (!put_cluster(fs, clust, 0)) return FALSE;    if (fs->free_clust != 0xFFFFFFFF) {      fs->free_clust++;#if _USE_FSINFO      fs->fsi_flag = 1;#endif    }    clust = nxt;  }  return TRUE;}#endif/*-----------------------------------------------------------------------*//* Stretch or create a cluster chain                                     *//*-----------------------------------------------------------------------*/#if _FS_READONLY == 0staticU32 create_chain (  /* 0: no free cluster, 1: error, >=2: new cluster number */    FATFS *fs,      /* File system object */    U32 clust     /* Cluster# to stretch, 0 means create new */    ){  U32 cstat, ncl, scl, mcl = fs->max_clust;  if (clust == 0) {   /* Create new chain */    scl = fs->last_clust;     /* Get suggested start point */    if (scl == 0 || scl >= mcl) scl = 1;  }  else {          /* Stretch existing chain */    cstat = get_cluster(fs, clust); /* Check the cluster status */    if (cstat < 2) return 1;    /* It is an invalid cluster */    if (cstat < mcl) return cstat;  /* It is already followed by next cluster */    scl = clust;  }  ncl = scl;        /* Start cluster */  for (;;) {    ncl++;              /* Next cluster */    if (ncl >= mcl) {       /* Wrap around */      ncl = 2;      if (ncl > scl) return 0;  /* No free custer */    }    cstat = get_cluster(fs, ncl); /* Get the cluster status */    if (cstat == 0) break;      /* Found a free cluster */    if (cstat == 1) return 1;   /* Any error occured */    if (ncl == scl) return 0;   /* No free custer */  }  if (!put_cluster(fs, ncl, 0x0FFFFFFF)) return 1;    /* Mark the new cluster "in use" */  if (clust && !put_cluster(fs, clust, ncl)) return 1;  /* Link it to previous one if needed */  fs->last_clust = ncl;       /* Update fsinfo */  if (fs->free_clust != 0xFFFFFFFF) {    fs->free_clust--;#if _USE_FSINFO    fs->fsi_flag = 1;#endif  }  return ncl;   /* Return new cluster number */}#endif /* !_FS_READONLY *//*-----------------------------------------------------------------------*//* Get sector# from cluster#                                             *//*-----------------------------------------------------------------------*/staticU32 clust2sect (  /* !=0: sector number, 0: failed - invalid cluster# */    FATFS *fs,    /* File system object */    U32 clust   /* Cluster# to be converted */    ){  clust -= 2;  if (clust >= (fs->max_clust - 2)) return 0;   /* Invalid cluster# */  return clust * fs->sects_clust + fs->database;}/*-----------------------------------------------------------------------*//* Move directory pointer to next                                        *//*-----------------------------------------------------------------------*/staticBOOL next_dir_entry ( /* TRUE: successful, FALSE: could not move next */    DIR *dirobj     /* Pointer to directory object */    ){  U32 clust;  U16 idx;  FATFS *fs = dirobj->fs;  idx = dirobj->index + 1;  if ((idx & ((S_SIZ - 1) / 32)) == 0) {    /* Table sector changed? */    dirobj->sect++;     /* Next sector */    if (!dirobj->clust) {   /* In static table */      if (idx >= fs->n_rootdir) return FALSE; /* Reached to end of table */    } else {          /* In dynamic table */      if (((idx / (S_SIZ / 32)) & (fs->sects_clust - 1)) == 0) {  /* Cluster changed? */        clust = get_cluster(fs, dirobj->clust);   /* Get next cluster */        if (clust < 2 || clust >= fs->max_clust)  /* Reached to end of table */          return FALSE;        dirobj->clust = clust;        /* Initialize for new cluster */        dirobj->sect = clust2sect(fs, clust);      }    }  }  dirobj->index = idx;  /* Lower 4 bit of dirobj->index indicates offset in dirobj->sect */  return TRUE;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产伦精一区二区三区| 国产91露脸合集magnet| 国产原创一区二区三区| 在线欧美小视频| 久久综合狠狠综合久久综合88| 亚洲欧美福利一区二区| 国产精品一区二区91| 欧美日韩一区视频| 亚洲欧美国产77777| 粉嫩av一区二区三区| 欧美va天堂va视频va在线| 亚洲图片欧美综合| 91猫先生在线| 国产精品久久久久毛片软件| 国产精品综合二区| 日韩欧美色电影| 欧美aaaaaa午夜精品| 欧美色综合天天久久综合精品| 国产精品久久久久久久浪潮网站| 久久精品国产99| 日韩欧美一二三区| 免费观看日韩av| 欧美一区二区三区小说| 五月天激情小说综合| 欧美性生活影院| 亚洲成在线观看| 欧美三级欧美一级| 亚洲午夜精品在线| 在线观看免费亚洲| 亚洲大片在线观看| 7777精品伊人久久久大香线蕉超级流畅 | 欧美日韩一区二区在线观看| 国产精品区一区二区三区| 国产在线视视频有精品| 日韩欧美不卡在线观看视频| 日韩在线卡一卡二| 欧美一二三四区在线| 日本欧美一区二区| 欧美白人最猛性xxxxx69交| 免费高清不卡av| 亚洲精品一区二区三区蜜桃下载 | 欧美日韩久久久一区| 欧美哺乳videos| 色爱区综合激月婷婷| 成人视屏免费看| 成人免费视频免费观看| av亚洲精华国产精华精| 国产精品99久久久久久有的能看 | 午夜精品在线视频一区| 国产欧美va欧美不卡在线| 久久中文字幕电影| 久久青草国产手机看片福利盒子| 欧美α欧美αv大片| 国产精品视频在线看| 亚洲丝袜另类动漫二区| 一区二区三区日韩精品| 国产久卡久卡久卡久卡视频精品| 亚洲h精品动漫在线观看| 亚洲图片自拍偷拍| 亚洲狠狠丁香婷婷综合久久久| 亚洲精品一区二区精华| 69久久夜色精品国产69蝌蚪网| 欧美精品一级二级三级| 亚洲色图制服诱惑 | av在线不卡免费看| 欧美精品一区二区不卡| 国产成人综合视频| 亚洲激情网站免费观看| 日韩情涩欧美日韩视频| 国产成人精品三级| 亚洲午夜精品在线| 久久久亚洲高清| 欧美日韩卡一卡二| 国产91综合网| 日韩小视频在线观看专区| 中文字幕的久久| 韩国三级在线一区| 91精品国产综合久久精品麻豆| 久久久久久久综合色一本| 中文字幕亚洲在| 丁香另类激情小说| 欧美一级免费大片| 亚洲不卡一区二区三区| 欧美亚洲综合久久| 欧美视频在线一区| 日本道色综合久久| 精品久久久久久无| 欧美色图第一页| 成a人片亚洲日本久久| 免费在线观看视频一区| 亚洲女人小视频在线观看| 精品国产百合女同互慰| 欧美色图天堂网| av在线一区二区三区| 精品一区二区三区在线播放视频 | 欧美专区日韩专区| 国产98色在线|日韩| 毛片av一区二区| 亚洲成人动漫在线观看| 亚洲色大成网站www久久九九| 国产亚洲一区二区在线观看| 欧美大片在线观看| 欧美浪妇xxxx高跟鞋交| 93久久精品日日躁夜夜躁欧美| 精品亚洲国产成人av制服丝袜| 日日夜夜精品视频天天综合网| 一区二区三区在线看| 欧美国产激情一区二区三区蜜月| 337p亚洲精品色噜噜| 精品婷婷伊人一区三区三| 91免费版在线| 91久久精品一区二区三| 色综合天天综合网天天看片| 高清不卡在线观看| 成人v精品蜜桃久久一区| 国产精品系列在线播放| 国产成人久久精品77777最新版本| 韩国视频一区二区| 欧美精品欧美精品系列| 欧美日韩另类一区| 欧美一区二区日韩一区二区| 欧美老肥妇做.爰bbww视频| 欧美日韩国产综合久久| 在线成人高清不卡| 91麻豆精品国产91久久久资源速度| 精品视频999| 制服视频三区第一页精品| 91精品国产综合久久精品| 日韩欧美一区中文| 精品美女一区二区| 久久久久久久久久久久电影| 国产亚洲精品免费| 国产精品欧美久久久久一区二区| 国产精品国产三级国产| 亚洲视频1区2区| 肉丝袜脚交视频一区二区| 免费在线观看精品| 国产东北露脸精品视频| 972aa.com艺术欧美| 欧美日韩一区视频| 精品国精品国产尤物美女| 国产精品婷婷午夜在线观看| 亚洲精品日韩综合观看成人91| 亚洲成在人线在线播放| 国产精品资源网| 在线免费精品视频| 91精品国产综合久久久久久久| 国产视频视频一区| 一区二区高清在线| 国产资源在线一区| 日本高清免费不卡视频| 欧美一区二区免费观在线| 久久精品人人爽人人爽| 亚洲国产美国国产综合一区二区| 青娱乐精品视频在线| 91影视在线播放| 精品国产一区二区三区av性色| 国产精品美女一区二区在线观看| 婷婷开心激情综合| 成人av电影在线| 91麻豆精品91久久久久久清纯| 国产精品午夜免费| 美国十次综合导航| 色综合天天综合网天天狠天天| 亚洲精品一区二区精华| 亚洲影院在线观看| 成人国产精品免费网站| 在线成人高清不卡| 亚洲欧美日韩人成在线播放| 美脚の诱脚舐め脚责91| 欧美日韩一二三| 亚洲国产高清在线| 精品一区二区三区蜜桃| 欧美色精品天天在线观看视频| 国产欧美一区二区三区沐欲| 美女视频一区二区三区| 色婷婷国产精品久久包臀| 久久精品一区四区| 免费在线观看一区| 欧美人与z0zoxxxx视频| 亚洲欧美另类图片小说| 成人av午夜影院| 久久久久国产一区二区三区四区| 五月天亚洲精品| 欧美最猛性xxxxx直播| 国产精品久久久久久久久免费桃花| 蜜臀a∨国产成人精品| 欧美日韩免费高清一区色橹橹| 亚洲欧美综合色| 不卡的av电影| 国产精品久久午夜| 国产成人福利片| 欧美激情在线看| 国产寡妇亲子伦一区二区| 精品91自产拍在线观看一区| 日韩vs国产vs欧美| 91麻豆精品国产91久久久更新时间| 亚洲最新视频在线观看| 欧美日韩在线观看一区二区 | 亚洲人午夜精品天堂一二香蕉|