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

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

?? fat.c

?? 7s64mp3系統(tǒng)開(kāi)發(fā)軟件
?? C
字號(hào):
/************************************************************/
/*		 FAT Code for   AT91SAM7S64						*/
/*				By   pasyong								*/
/*					2006-5									*/
/*				Base IAR 4.30A						*/
/************************************************************/
#include <string.h>
#include "sd.h"
#include "fat.h"

extern uchar BUFFER[512];
unsigned char  LONGNAME_BUFFER_ADDR[30];
unsigned char  DIRNAME_BUFFER_ADDR[30];
 char *LongNameBuffer =		( char *) LONGNAME_BUFFER_ADDR;
 char *DirNameBuffer =		( char *) DIRNAME_BUFFER_ADDR;
struct partrecord PartInfo;
unsigned char Fat32Enabled;
unsigned long FirstDataSector;
unsigned int  BytesPerSector;
unsigned int  SectorsPerCluster;
unsigned long FirstFATSector;
unsigned long FirstDirSector;
unsigned long FileSize;
unsigned long FatInCache = 0;

//********************************************************************************************
//讀一個(gè)扇區(qū)
void ReadBlock(unsigned long LBA)
//********************************************************************************************
{   unsigned long temp;
    temp=LBA<<9;
    SD_Read_Block(temp);
}
/*-----------------------------------------------------------------------
 查詢數(shù)據(jù)區(qū)一個(gè)簇開(kāi)始扇區(qū)號(hào)
-----------------------------------------------------------------------*/
unsigned long fatClustToSect(unsigned long clust)
{
	return ((clust-2) * SectorsPerCluster) + FirstDataSector;
}
/*-----------------------------------------------------------------------
 查詢一個(gè)簇所占扇區(qū)數(shù)
-----------------------------------------------------------------------*/
unsigned int fatClusterSize(void)
{
	// return the number of sectors in a disk cluster
	return SectorsPerCluster;
}
/*-----------------------------------------------------------------------
查詢SD卡文件系統(tǒng)信息
-----------------------------------------------------------------------*/
unsigned char fatInit()
{
   // unsigned int data;unsigned char t1,t2;

	struct bpb710 *bpb;
	// 讀MBR結(jié)構(gòu)
	ReadBlock(0);
	// 讀取分區(qū)表信息
        PartInfo = *((struct partrecord *) ((struct partsector *)BUFFER)->psPart);
	// 讀引導(dǎo)扇區(qū)
	// 引導(dǎo)扇區(qū)號(hào)在PartInfo.prStartLBA中
	ReadBlock(PartInfo.prStartLBA);  //ataReadSectors( DRIVE0, PartInfo.prStartLBA, 1, SectorBuffer );
	bpb = (struct bpb710 *) ((struct bootsector710 *) BUFFER)->bsBPB;

	FirstDataSector	= PartInfo.prStartLBA;
	if(bpb->bpbFATsecs)
	{
		// bpbFATsecs非0,為FAT16,FAT表所占的扇區(qū)數(shù)在bpbFATsecs里
		FirstDataSector	+= bpb->bpbResSectors + bpb->bpbFATs * bpb->bpbFATsecs;
	}
	else
	{
		// bpbFATsecs是0,為FAT32,FAT表所占的扇區(qū)數(shù)在bpbBigFATsecs里
		FirstDataSector	+= bpb->bpbResSectors + bpb->bpbFATs * bpb->bpbBigFATsecs;
	}
	
	SectorsPerCluster	= bpb->bpbSecPerClust;
	BytesPerSector		= bpb->bpbBytesPerSec;
	FirstFATSector		= bpb->bpbResSectors + PartInfo.prStartLBA;
//查詢SD卡文件系統(tǒng)分區(qū)類型
	switch (PartInfo.prPartType)
	{
		case PART_TYPE_DOSFAT16:
		case PART_TYPE_FAT16:
		case PART_TYPE_FAT16LBA:
			// 第一個(gè)目錄扇區(qū)號(hào)為2
			FirstDirSector	= CLUST_FIRST;
			//FirstDataSector += (bpb->bpbRootDirEnts)/DIRENTRIES_PER_SECTOR;
			Fat32Enabled = 0;
			
			break;
		case PART_TYPE_FAT32LBA:
		case PART_TYPE_FAT32:
			
			FirstDirSector = bpb->bpbRootClust;
			Fat32Enabled = 1;
			break;
		default:break;
			//return 1;
	}
//查詢SD卡文件系統(tǒng)信息
	/*switch (PartInfo.prPartType)
	{
		case PART_TYPE_DOSFAT16:
				LCD_write_english_string(0,0,"DOSFAT 16");
				break;
		case PART_TYPE_FAT16:
				LCD_write_english_string(0,0,"FAT16 ");
				break;
		case PART_TYPE_FAT16LBA:
				LCD_write_english_string(0,0,"FAT16 LBA");
				break;
		case PART_TYPE_FAT32LBA:
				LCD_write_english_string(0,0,"FAT32 LBA");
				break;
		case PART_TYPE_FAT32:
				LCD_write_english_string(0,0,"FAT32");
				break;
		default:
				LCD_write_english_string(0,0,"No Partition!");
				break;
	}
//顯示磁盤(pán)容量
data=PartInfo.prSize>>11;
    LCD_set_XY(56,0);
    t1=data/100;
	LCD_write_char(t1+48);
	data=data%100;
	t1=data/10;
	LCD_write_char(t1+48);
	t2=data%10;
	LCD_write_char(t2+48);
	LCD_write_english_string(76,0,"M");
    LCD_write_english_string(0,1,"RATE");
	*/
        return 0;	
}

/*-----------------------------------------------------------------------
查詢一個(gè)文件的開(kāi)始簇
-----------------------------------------------------------------------*/
unsigned int baseentry = 0;
unsigned int entrycount = 0;
unsigned long fatGetDirEntry(unsigned int entry)
{
	unsigned long sector;
	struct direntry *de = 0;	// 防止compiler warning
	struct winentry *we;
	unsigned int hasBuffer;
	unsigned int b;
	int i,index;
	char *p;
	
		entrycount = 0;
		DirNameBuffer = 0;
	
	
	// 讀取目錄區(qū)數(shù)據(jù)
	sector = fatClustToSect(FirstDirSector);

	hasBuffer = 0;

	index = 16;	
	do
	{
		if(index == 16)	// 是否該一人一扇區(qū)time for next sector ?
		{
			ReadBlock(sector++);
			de = (struct direntry *)BUFFER;
			index = 0;
		}	
	
		if(*de->deName != 0xE5)
		{
			// 如果if not a deleted entry
			if(de->deAttributes == ATTR_LONG_FILENAME)
			{
				// we have a long name entry
				we = (struct winentry *) de;
				b = 13 *( (we->weCnt-1) & 0x0f);				// index into string
				p = &LongNameBuffer[b];
				for (i=0;i<5;i++)	*p++ = we->wePart1[i*2];	// copy first part			
				for (i=0;i<6;i++)	*p++ = we->wePart2[i*2];	// second part
				for (i=0;i<2;i++)	*p++ = we->wePart3[i*2];	// and third part
				if (we->weCnt & 0x40) *p = 0;					// in case dirnamelength is multiple of 13
				if ((we->weCnt & 0x0f) == 1) hasBuffer = 1;		// mark that we have a long entry
			}
			else
			{
				// we have a short name entry
				// check if this is the end of a multi-part long name entry
				if(hasBuffer)
				{
					// a long entry name has been collected
					// is it a directory ?
					if(de->deAttributes == ATTR_DIRECTORY)
					{
						unsigned long save = FirstDirSector;
						unsigned int save2 = baseentry;
						unsigned long rval;
						
						strcpy(DirNameBuffer,LongNameBuffer);
						strcat(DirNameBuffer,"/");

//						rprintfStr(LongNameBuffer); rprintfProgStrM("/"); //EOL();

						// call recursively
						FirstDirSector = ((unsigned long)de->deHighClust << 16) + de->deStartCluster;
						rval = fatGetDirEntry(entry);
						FirstDirSector = save;
						baseentry = save2;
						if (rval)
							return rval;
						else	
						{
							// reload original sector
							ReadBlock(sector-1);//ataReadSectors( DRIVE0,	sector-1, 1, SectorBuffer);
							entrycount--;			// decrement entry counter		
							*DirNameBuffer = 0;
                 	}
					}
					else // normal file entry
						if(entrycount == entry)		
							break;
					hasBuffer = 0;	// clear buffer	
					entrycount++;	// increment entry counter		
				}
				// else ignore short_name_only entries
			}
		}
		de++;
		index++;
	}	while (*de->deName || index == 16);	// 0 in de->deName[0] if no more entries

	if (hasBuffer == 0)		// end of entries
		return 0;
	
	FileSize = de->deFileSize;
	return (unsigned long) ((unsigned long)de->deHighClust << 16) + de->deStartCluster;
}

/*-----------------------------------------------------------------------
 在FAT表中查詢下一個(gè)簇所在扇區(qū)號(hào)
-----------------------------------------------------------------------*/
unsigned long fatNextCluster(unsigned long cluster)
{
	unsigned long nextCluster;
	unsigned long fatMask;
	unsigned long fatOffset;
	unsigned long sector;
	unsigned int offset;
	
	if(Fat32Enabled)
	{
		// 一個(gè)表項(xiàng)為4bytes(32 bits)
		fatOffset = cluster << 2;
		// 設(shè)置 FAT32 bit mask
		fatMask = FAT32_MASK;
	}
	else
	{
		// 一個(gè)表項(xiàng)為2bytes(16 bits)
		fatOffset = cluster << 1;
		// 設(shè)置 FAT16 bit mask
		fatMask = FAT16_MASK;
	}
	
	//計(jì)算FAT扇區(qū)號(hào)
	sector = FirstFATSector + (fatOffset / BytesPerSector);
	//計(jì)算FAT扇區(qū)號(hào)中表項(xiàng)的偏移地址
	offset = fatOffset % BytesPerSector;

	ReadBlock(sector);

	// 讀取下一個(gè)簇號(hào)
	nextCluster = (*((unsigned long*) &((char*)BUFFER)[offset])) & fatMask;

	// 是否文件的結(jié)束簇
	if (nextCluster == (CLUST_EOFE & fatMask))
		nextCluster = 0;
		
	return nextCluster;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产一区二区三区地区| 久久国产免费看| 日本乱人伦aⅴ精品| 伊人色综合久久天天| 欧美日韩中文字幕一区二区| 日韩电影在线免费观看| 91精品国产乱码久久蜜臀| 美女网站视频久久| 国产情人综合久久777777| 99在线视频精品| 亚洲高清免费在线| 日韩欧美国产一区二区在线播放| 精品一区二区三区在线观看| 亚洲国产精华液网站w| 色欲综合视频天天天| 首页国产欧美久久| 久久久精品国产免大香伊| 99九九99九九九视频精品| 亚洲高清不卡在线观看| 26uuu亚洲综合色| 色悠久久久久综合欧美99| 日日夜夜免费精品| 久久精品人人做人人爽人人| 在线观看av不卡| 裸体在线国模精品偷拍| 中文字幕在线观看不卡视频| 在线电影国产精品| 粉嫩aⅴ一区二区三区四区五区| 亚洲综合色噜噜狠狠| 精品久久久久99| 91精彩视频在线| 黄色成人免费在线| 夜夜嗨av一区二区三区网页| 欧美精品一区二区精品网| 91精品福利视频| 成人综合日日夜夜| 日本欧美在线观看| 亚洲品质自拍视频| 久久女同性恋中文字幕| 欧美精品v国产精品v日韩精品| 国产成人av电影在线观看| 天使萌一区二区三区免费观看| 国产精品欧美综合在线| 精品日韩99亚洲| 在线免费观看成人短视频| 国产成人免费视频网站高清观看视频| 亚洲永久免费视频| 亚洲欧洲性图库| xfplay精品久久| 日韩一区二区电影在线| 欧美性猛交xxxxxx富婆| 97se狠狠狠综合亚洲狠狠| 国产综合色产在线精品| 免费观看一级特黄欧美大片| 午夜欧美2019年伦理| 1024亚洲合集| 中文字幕日本不卡| 国产日韩欧美a| 精品国产91亚洲一区二区三区婷婷| 欧美色图在线观看| 91久久精品网| 91日韩在线专区| 99免费精品在线观看| 国产精品羞羞答答xxdd| 毛片av中文字幕一区二区| 亚洲h在线观看| 亚洲高清不卡在线| 午夜在线电影亚洲一区| 午夜精品福利一区二区三区av| 亚洲精品国产视频| 亚洲理论在线观看| 伊人一区二区三区| 一区二区三区中文在线| 亚洲激情六月丁香| 亚洲综合清纯丝袜自拍| 亚洲国产精品一区二区久久恐怖片| 亚洲精品日韩综合观看成人91| 综合婷婷亚洲小说| 亚洲精品中文在线影院| 亚洲小说春色综合另类电影| 亚洲午夜三级在线| 性做久久久久久免费观看欧美| 亚洲成a人片综合在线| 视频一区在线视频| 蜜桃久久av一区| 国产一区二区女| 国产福利一区在线| 97久久精品人人做人人爽| 一本一道久久a久久精品 | 在线观看日韩电影| 91官网在线观看| 欧美一区二区三区爱爱| 精品国产精品一区二区夜夜嗨| 精品欧美久久久| 国产精品久久午夜| 一区二区在线看| 日精品一区二区三区| 美女www一区二区| 成人午夜碰碰视频| 欧美日韩在线播| 精品对白一区国产伦| 欧美国产精品中文字幕| 亚洲乱码国产乱码精品精的特点| 亚洲福利一区二区三区| 激情五月婷婷综合网| 成人午夜视频在线| 欧美妇女性影城| 国产色产综合色产在线视频| 国产精品欧美一区喷水| 日韩高清一区二区| 国产v综合v亚洲欧| 欧美人与z0zoxxxx视频| 久久久久国产免费免费| 亚洲一区二区三区视频在线| 激情综合色播五月| 91久久免费观看| 26uuuu精品一区二区| 亚洲最大成人综合| 激情文学综合丁香| 欧美亚洲动漫制服丝袜| 精品剧情在线观看| 国产精品久久看| 美腿丝袜亚洲三区| 色婷婷av一区| 久久久久国色av免费看影院| 亚洲妇熟xx妇色黄| 成人av电影在线网| 精品久久免费看| 香蕉久久夜色精品国产使用方法 | 精品日韩成人av| 亚洲综合久久久久| 国产精品一色哟哟哟| 538在线一区二区精品国产| 亚洲欧洲精品一区二区精品久久久| 日韩电影在线观看电影| 色综合网色综合| 日韩免费高清视频| 偷拍一区二区三区四区| 波多野结衣在线aⅴ中文字幕不卡| 日韩一区和二区| 亚洲一区二区三区四区的| 成人ar影院免费观看视频| 精品国产在天天线2019| 日韩专区在线视频| 91黄色小视频| 亚洲日本一区二区| 国产v综合v亚洲欧| 欧美精品一区视频| 久久草av在线| 欧美色网一区二区| 国产精品女人毛片| 美女久久久精品| 日韩三级免费观看| 亚洲精品第一国产综合野| 亚洲黄色尤物视频| 白白色 亚洲乱淫| 日韩欧美成人午夜| 日韩国产在线观看一区| 色欧美日韩亚洲| 亚洲欧美日韩中文字幕一区二区三区 | 精品国产一区久久| 久久激情五月激情| 欧美电视剧在线观看完整版| 日本成人中文字幕| 欧美一区二区三区色| 日韩精品久久理论片| 制服丝袜成人动漫| 日本人妖一区二区| 日韩一级二级三级精品视频| 日本欧美在线观看| 精品福利视频一区二区三区| 麻豆91免费看| 国产日韩欧美激情| 99国产一区二区三精品乱码| 最新国产の精品合集bt伙计| 色天使久久综合网天天| 亚洲综合视频在线观看| 制服丝袜中文字幕一区| 看片网站欧美日韩| 久久九九99视频| 成人av综合一区| 亚洲国产精品一区二区www在线 | 久久久久久亚洲综合影院红桃| 国产在线一区观看| 亚洲国产精品av| 在线观看日韩av先锋影音电影院| 亚洲国产视频网站| 欧美精品乱码久久久久久按摩| 蜜臀av性久久久久av蜜臀妖精| 久久色在线观看| 99久久精品情趣| 亚洲成a人片在线观看中文| 欧美一区二区女人| 国产v综合v亚洲欧| 亚洲午夜精品网| 久久影院视频免费| 色综合久久久久综合体| 美洲天堂一区二卡三卡四卡视频| 久久久精品影视| 欧美日韩一区二区三区四区五区 |