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

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

?? fs.c

?? filesystem for at91sam9263ek,編輯器為keil for arm mdk
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*****************************************************************************\*              efs - General purpose Embedded Filesystem library              **          --------------------- -----------------------------------          **                                                                             ** Filename : fs.c                                                             ** Description : These are general filesystem functions, supported by the      **               functions of dir.c and fat.c  file.c uses these functions     **               heavily, but is not used by fs.c (not true anymore)           **                                                                             ** This program is free software; you can redistribute it and/or               ** modify it under the terms of the GNU General Public License                 ** as published by the Free Software Foundation; version 2                     ** of the License.                                                             *                                                                              ** This program is distributed in the hope that it will be useful,             ** but WITHOUT ANY WARRANTY; without even the implied warranty of              ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               ** GNU General Public License for more details.                                **                                                                             ** As a special exception, if other files instantiate templates or             ** use macros or inline functions from this file, or you compile this          ** file and link it with other works to produce a work based on this file,     ** this file does not by itself cause the resulting work to be covered         ** by the GNU General Public License. However the source code for this         ** file must still be made available in accordance with section (3) of         ** the GNU General Public License.                                             **                                                                             ** This exception does not invalidate any other reasons why a work based       ** on this file might be covered by the GNU General Public License.            **                                                                             **                                                    (c)2006 Lennart Yseboodt **                                                    (c)2006 Michael De Nil   *\*****************************************************************************//*****************************************************************************/#include "fs.h"#include "fat.h"#include "dir.h"/*****************************************************************************//* ****************************************************************************   * eint16 fs_initFs(FileSystem *fs,Partition *part) * Description: This functions glues the initialisation of the filesystem together. * It loads the volumeID, computes the FS type and searches for the rootsector. * Return value: Returns 0 on succes and -1 on error (if magic code is wrong)*/eint16 fs_initFs(FileSystem *fs,Partition *part){	if(!fs_isValidFat(part)){		return(-1);	}	fs->part=part;	fs_loadVolumeId(fs,part);	if(!fs_verifySanity(fs))return(-2);  	fs_countDataSectors(fs);	fs_determineFatType(fs);	fs_findFirstSectorRootDir(fs);	fs_initCurrentDir(fs); 	return(0);}/*****************************************************************************/ /* ****************************************************************************   * eint16 fs_isValidFat(Partition *part) * Description: This functions loads the volumeID and checks if the magic * value is present. * Return value: returns 0 when magic code is missing, 1 if it is there.*/eint16 fs_isValidFat(Partition *part){	euint8 *buf;		buf=part_getSect(part,0,IOM_MODE_READONLY|IOM_MODE_EXP_REQ); /* Load Volume label */	if( ex_getb16(buf,0x1FE) != 0xAA55 ){		return (0);	}	part_relSect(part,buf);	return(1);}/*****************************************************************************/ /* ****************************************************************************   * void fs_loadVolumeId(FileSystem *fs, Partition *part) * Description: This function loads all relevant fields from the volumeid.*/void fs_loadVolumeId(FileSystem *fs, Partition *part){	euint8 *buf;		buf=part_getSect(part,0,IOM_MODE_READONLY|IOM_MODE_EXP_REQ);		fs->volumeId.BytesPerSector=ex_getb16(buf,0x0B);	fs->volumeId.SectorsPerCluster=*((eint8*)(buf+0x0D));	fs->volumeId.ReservedSectorCount=ex_getb16(buf,0x0E);	fs->volumeId.NumberOfFats=*((eint8*)(buf+0x10));	fs->volumeId.RootEntryCount=ex_getb16(buf,0x11);	fs->volumeId.SectorCount16=ex_getb16(buf,0x13);	fs->volumeId.FatSectorCount16=ex_getb16(buf,0x16);	fs->volumeId.SectorCount32=ex_getb32(buf,0x20);	fs->volumeId.FatSectorCount32=ex_getb32(buf,0x24);	fs->volumeId.RootCluster=ex_getb32(buf,0x2C);		part_relSect(part,buf);	}/*****************************************************************************/ /* ****************************************************************************   * esint16 fs_verifySanity(FileSystem *fs) * Description: Does some sanity calculations. * Return value: 1 on success, 0 when discrepancies were found.*/esint16 fs_verifySanity(FileSystem *fs){	esint16 sane=1; /* Sane until proven otherwise */	/* First check, BPS, we only support 512 */	if(fs->volumeId.BytesPerSector!=512)sane=0;	/* Check is SPC is valid (multiple of 2, and clustersize >=32KB */	if(!((fs->volumeId.SectorsPerCluster == 1 ) |	     (fs->volumeId.SectorsPerCluster == 2 ) |	     (fs->volumeId.SectorsPerCluster == 4 ) |	     (fs->volumeId.SectorsPerCluster == 8 ) |	     (fs->volumeId.SectorsPerCluster == 16) |	     (fs->volumeId.SectorsPerCluster == 32) |	     (fs->volumeId.SectorsPerCluster == 64) ))sane=0;	/* Any number of FAT's should be supported... (untested) */	/* There should be at least 1 reserved sector */	if(fs->volumeId.ReservedSectorCount==0)sane=0;	if(fs->volumeId.FatSectorCount16 != 0){		if(fs->volumeId.FatSectorCount16 > fs->part->disc->partitions[fs->part->activePartition].numSectors)sane=0;	}else{		if(fs->volumeId.FatSectorCount32 > fs->part->disc->partitions[fs->part->activePartition].numSectors)sane=0;	} 	return(sane);}/*****************************************************************************//* ****************************************************************************   * void fs_countDataSectors(FileSystem *fs) * Description: This functions calculates the sectorcounts, fatsectorcounts and * dataclustercounts. It fills in the general fields.*/void fs_countDataSectors(FileSystem *fs){  euint32 rootDirSectors,dataSectorCount;  rootDirSectors=((fs->volumeId.RootEntryCount*32) +                 (fs->volumeId.BytesPerSector - 1)) /                 fs->volumeId.BytesPerSector;  if(fs->volumeId.FatSectorCount16 != 0)  {    fs->FatSectorCount=fs->volumeId.FatSectorCount16;    fs->volumeId.FatSectorCount32=0;  }  else  {    fs->FatSectorCount=fs->volumeId.FatSectorCount32;    fs->volumeId.FatSectorCount16=0;  }  if(fs->volumeId.SectorCount16!=0)  {    fs->SectorCount=fs->volumeId.SectorCount16;    fs->volumeId.SectorCount32=0;  }  else  {    fs->SectorCount=fs->volumeId.SectorCount32;    fs->volumeId.SectorCount16=0;  }  dataSectorCount=fs->SectorCount - (                  fs->volumeId.ReservedSectorCount +                  (fs->volumeId.NumberOfFats * fs->FatSectorCount) +                  rootDirSectors);  fs->DataClusterCount=dataSectorCount/fs->volumeId.SectorsPerCluster;}/*****************************************************************************/ /* ****************************************************************************   * void fs_determineFatType(FileSystem *fs) * Description: This function looks af the Dataclustercount and determines the * FAT type. It fills in fs->type.*/void fs_determineFatType(FileSystem *fs){	if(fs->DataClusterCount < 4085)	{		fs->type=FAT12;		fs->volumeId.RootCluster=0;	}	else if(fs->DataClusterCount < 65525)	{		fs->type=FAT16;		fs->volumeId.RootCluster=0;	}	else	{		fs->type=FAT32;	}}/*****************************************************************************/ /* ****************************************************************************   * void fs_findFirstSectorRootDir(FileSystem *fs) * Description: This functions fills in the fs->FirstSectorRootDir field, even * for FAT32, although that is not necessary (because you have FirstClusterRootDir).*/void fs_findFirstSectorRootDir(FileSystem *fs){	if(fs->type==FAT32)		fs->FirstSectorRootDir = fs->volumeId.ReservedSectorCount + 		                         (fs->volumeId.NumberOfFats*fs->volumeId.FatSectorCount32) +								 (fs->volumeId.RootCluster-2)*fs->volumeId.SectorsPerCluster;	else		fs->FirstSectorRootDir = fs->volumeId.ReservedSectorCount + 		                         (fs->volumeId.NumberOfFats*fs->volumeId.FatSectorCount16);}/*****************************************************************************/ void fs_initCurrentDir(FileSystem *fs){	fs->FirstClusterCurrentDir = fs_getFirstClusterRootDir(fs);}/*****************************************************************************//* ****************************************************************************   * long fs_clusterToSector(FileSystem *fs,euint32 cluster) * Description: This function converts a clusternumber in the effective sector * number where this cluster starts. Boundary check is not implemented * Return value: A long is returned representing the sectornumber.*/euint32 fs_clusterToSector(FileSystem *fs,euint32 cluster){	eint32 base;		if(fs->type==FAT32)	{		base=			fs->volumeId.ReservedSectorCount+			fs->FatSectorCount*fs->volumeId.NumberOfFats;	}	else	{		base=			fs->volumeId.ReservedSectorCount+			fs->FatSectorCount*fs->volumeId.NumberOfFats+			fs->volumeId.RootEntryCount/16;	}	return( base + (cluster-2)*fs->volumeId.SectorsPerCluster );}/*****************************************************************************/ /* Function is unused, but may be usefull */euint32 fs_sectorToCluster(FileSystem *fs,euint32 sector){	eint32 base;		if(fs->type==FAT32)	{		base=

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
懂色av中文字幕一区二区三区| 欧美三级电影在线看| 日韩欧美国产一二三区| 国产午夜精品福利| 亚洲福利一区二区| 成人激情免费网站| 欧美精品一区二区三区在线播放| 中文字幕中文字幕在线一区 | 久久久99精品免费观看| 亚洲综合成人在线视频| 懂色av中文一区二区三区 | 日韩av中文字幕一区二区三区| 国产成人精品在线看| 精品乱人伦小说| 天天av天天翘天天综合网色鬼国产| 成人免费的视频| 久久精品在线观看| 欧美日韩激情一区| 亚洲精品一线二线三线| 亚洲地区一二三色| 成人app软件下载大全免费| 精品国产伦一区二区三区免费| 亚洲美女在线一区| 成人午夜短视频| 欧美—级在线免费片| 国产精品99久久不卡二区| 精品福利一二区| 蜜臀久久久久久久| 91精品国产麻豆国产自产在线| 亚洲无线码一区二区三区| 在线视频欧美区| 一区二区三区色| 欧美性一区二区| 奇米综合一区二区三区精品视频 | 亚洲欧美一区二区不卡| 99久久久免费精品国产一区二区| 国产精品传媒在线| 色婷婷久久久综合中文字幕| 亚洲午夜私人影院| 亚洲欧洲综合另类| 91网站最新地址| 国产精品久久久久久久久搜平片| 国产成人aaa| 中文字幕日韩一区| 91久久精品一区二区三| 亚洲一区在线观看网站| 欧美精品三级日韩久久| 另类专区欧美蜜桃臀第一页| 精品粉嫩超白一线天av| 国产99久久久国产精品潘金网站| 中文字幕在线不卡一区| 日本韩国一区二区三区视频| 午夜伦理一区二区| 日韩一本二本av| 狠狠狠色丁香婷婷综合久久五月| 日本一区二区三区视频视频| 91免费版在线| 日本91福利区| 国产欧美一区视频| 在线免费观看视频一区| 久久99热国产| 欧美久久久一区| 欧美日韩视频专区在线播放| 亚洲综合精品久久| 欧美一区二区在线观看| 国产69精品久久久久777| 一区二区三区高清| 日韩午夜av一区| k8久久久一区二区三区| 偷拍日韩校园综合在线| 国产午夜一区二区三区| 欧美午夜片在线观看| 国产精品影音先锋| 亚洲福利视频导航| 中文字幕成人在线观看| 欧美丰满一区二区免费视频| 成人免费三级在线| 久久精品国产秦先生| 亚洲女与黑人做爰| 18成人在线观看| 欧美日韩国产欧美日美国产精品| 国产不卡在线一区| 蜜臀99久久精品久久久久久软件| 国产精品另类一区| 亚洲精品一区二区三区四区高清| 一区二区三区欧美久久| 日韩欧美一区在线观看| 91亚洲男人天堂| 激情文学综合网| 亚洲自拍偷拍麻豆| 国产精品久久久久久妇女6080 | 久久国内精品视频| 曰韩精品一区二区| 久久久久久久久99精品| 欧美一级日韩免费不卡| 91成人免费电影| bt7086福利一区国产| 国产一区二区三区四区在线观看| 午夜精品一区二区三区免费视频| 国产精品国产三级国产普通话99 | 一区二区三区日韩精品视频| 国产无一区二区| 久久一夜天堂av一区二区三区| 欧美国产成人精品| 久久奇米777| 日韩欧美一级片| 91麻豆精品91久久久久同性| 欧美日韩一区三区| 欧美亚洲尤物久久| 欧美视频中文字幕| 欧美网站大全在线观看| 91社区在线播放| 色综合视频在线观看| 不卡高清视频专区| 91香蕉视频黄| 91在线一区二区三区| 99热99精品| 91久久精品一区二区二区| 一本到三区不卡视频| 91浏览器入口在线观看| 91免费观看在线| 日本韩国一区二区| 欧美日韩一区二区三区高清| 在线视频国内自拍亚洲视频| 欧美在线视频不卡| 欧美日本精品一区二区三区| 69av一区二区三区| 精品奇米国产一区二区三区| 久久综合色8888| 中文幕一区二区三区久久蜜桃| 中文字幕一区二区三区不卡| 亚洲人成小说网站色在线| 亚洲一区二区三区在线| 日本视频中文字幕一区二区三区| 成人黄色小视频在线观看| jlzzjlzz欧美大全| 欧美色窝79yyyycom| 午夜精品久久久久久久久| 亚洲精品欧美激情| 国产精品小仙女| 国产成人av一区二区| 精品一区二区三区免费视频| 六月丁香综合在线视频| 狠狠色综合播放一区二区| 日韩av电影一区| 精品在线观看视频| 国产麻豆视频一区二区| 欧美性受xxxx黑人xyx性爽| 亚洲国产成人tv| 亚洲一级电影视频| 狠狠色狠狠色合久久伊人| 国产suv一区二区三区88区| 色婷婷激情综合| 日韩你懂的在线观看| 国产精品嫩草影院av蜜臀| 一区二区久久久久久| 国产一区二区在线电影| 色国产精品一区在线观看| 91精品国产综合久久精品| 国产精品久久久久久久久动漫| 一区二区三区中文免费| 韩国成人精品a∨在线观看| 不卡影院免费观看| 精品剧情在线观看| 亚洲大片精品永久免费| 国产传媒日韩欧美成人| 91麻豆精品国产91久久久使用方法| 国产精品视频一区二区三区不卡| 天堂蜜桃一区二区三区| 不卡的电影网站| 精品久久久网站| 亚洲成人免费在线观看| 99国产精品国产精品久久| 欧美成人午夜电影| 亚洲一区在线视频| 成人毛片视频在线观看| 日韩精品一区在线| 亚洲成人久久影院| 91美女在线视频| 欧美韩日一区二区三区| 男人的天堂久久精品| 在线观看日韩精品| 成人app软件下载大全免费| 欧美网站一区二区| 国产精品福利一区二区| 国产精品自拍三区| 91精品国产综合久久久久久久久久 | 国产成人综合亚洲网站| 欧美大片一区二区| 日韩精品色哟哟| 欧美三区在线视频| 亚洲欧美电影一区二区| 波多野结衣一区二区三区| 在线不卡免费欧美| 日本亚洲视频在线| 日韩av成人高清| 一区二区三区四区不卡视频| 欧美在线视频你懂得| 国产福利一区二区三区视频| 中文字幕精品一区二区三区精品|