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

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

?? fat.c

?? fat格式文件的讀寫操作
?? C
字號:
/************************************************************/
/*		 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;

//********************************************************************************************
//讀一個扇區(qū)
void ReadBlock(unsigned long LBA)
//********************************************************************************************
{   unsigned long temp;
    temp=LBA<<9;
    SD_Read_Block(temp);
}
/*-----------------------------------------------------------------------
 查詢數(shù)據區(qū)一個簇開始扇區(qū)號
-----------------------------------------------------------------------*/
unsigned long fatClustToSect(unsigned long clust)
{
	return ((clust-2) * SectorsPerCluster) + FirstDataSector;
}
/*-----------------------------------------------------------------------
 查詢一個簇所占扇區(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結構
	ReadBlock(0);
	// 讀取分區(qū)表信息
        PartInfo = *((struct partrecord *) ((struct partsector *)BUFFER)->psPart);
	// 讀引導扇區(qū)
	// 引導扇區(qū)號在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:
			// 第一個目錄扇區(qū)號為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;
	}
//顯示磁盤容量
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;	
}

/*-----------------------------------------------------------------------
查詢一個文件的開始簇
-----------------------------------------------------------------------*/
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ù)據
	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表中查詢下一個簇所在扇區(qū)號
-----------------------------------------------------------------------*/
unsigned long fatNextCluster(unsigned long cluster)
{
	unsigned long nextCluster;
	unsigned long fatMask;
	unsigned long fatOffset;
	unsigned long sector;
	unsigned int offset;
	
	if(Fat32Enabled)
	{
		// 一個表項為4bytes(32 bits)
		fatOffset = cluster << 2;
		// 設置 FAT32 bit mask
		fatMask = FAT32_MASK;
	}
	else
	{
		// 一個表項為2bytes(16 bits)
		fatOffset = cluster << 1;
		// 設置 FAT16 bit mask
		fatMask = FAT16_MASK;
	}
	
	//計算FAT扇區(qū)號
	sector = FirstFATSector + (fatOffset / BytesPerSector);
	//計算FAT扇區(qū)號中表項的偏移地址
	offset = fatOffset % BytesPerSector;

	ReadBlock(sector);

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

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费观看av| 国产精品久久久久久久久免费桃花 | 久久久青草青青国产亚洲免观| 99麻豆久久久国产精品免费 | 99re成人精品视频| 国产美女久久久久| 欧美午夜在线观看| 国产白丝网站精品污在线入口| 国产精品精品国产色婷婷| 自拍偷拍国产亚洲| 亚洲欧美日韩在线| 秋霞午夜av一区二区三区| 国产一区二区在线观看视频| 成人免费看黄yyy456| 欧美美女一区二区在线观看| 久久久久久久综合色一本| 国产精品国产三级国产有无不卡| 亚洲a一区二区| 成人午夜精品一区二区三区| 欧美性大战久久久| 久久精品亚洲麻豆av一区二区 | 奇米一区二区三区| 99久久精品免费| 国产91丝袜在线18| 午夜精品久久久久久久久久 | 欧美精品久久一区二区三区| 国产农村妇女精品| 激情丁香综合五月| 欧美在线一二三四区| 中文在线免费一区三区高中清不卡| 天天操天天干天天综合网| 99久久精品国产毛片| 26uuu国产日韩综合| 青青草97国产精品免费观看| 一道本成人在线| 国产亚洲综合性久久久影院| 久久精工是国产品牌吗| 日韩免费性生活视频播放| 久久精品国产久精国产爱| 亚洲精品在线一区二区| 国产一区啦啦啦在线观看| 国产清纯在线一区二区www| www.色精品| 一区二区免费视频| 欧美日韩免费一区二区三区| 日韩av网站在线观看| 久久亚洲私人国产精品va媚药| 国产精品一区在线观看乱码| 欧美国产精品专区| 欧美高清视频不卡网| 日韩av中文字幕一区二区| 欧美一区二区视频在线观看2020| 奇米精品一区二区三区在线观看一| 欧美精品三级日韩久久| 久久亚洲捆绑美女| 一区二区三区高清不卡| 欧美丝袜丝交足nylons| 天堂成人免费av电影一区| 欧美精品一区男女天堂| 成人av在线一区二区三区| 亚洲影院理伦片| 久久久99久久| 91亚洲国产成人精品一区二区三| 亚洲精品国产a| 久久天天做天天爱综合色| 色哟哟欧美精品| 六月丁香婷婷色狠狠久久| 日韩一区中文字幕| 日韩欧美在线123| 99精品国产热久久91蜜凸| 免费视频最近日韩| 亚洲天天做日日做天天谢日日欢| 3d动漫精品啪啪一区二区竹菊| 国产毛片精品视频| 亚洲综合成人网| 久久日韩精品一区二区五区| 精品视频在线免费| 成人av网址在线观看| 乱一区二区av| 午夜精品福利一区二区蜜股av| 国产日韩欧美精品综合| 91精品久久久久久久久99蜜臂| 国产电影精品久久禁18| 日韩福利视频导航| 亚洲美女屁股眼交| 国产欧美日韩在线观看| 欧美一区二区三区四区高清| 色猫猫国产区一区二在线视频| 久久99热国产| 婷婷成人激情在线网| 亚洲欧美日韩中文播放| 国产精品亲子乱子伦xxxx裸| 日韩美女主播在线视频一区二区三区| 一本大道久久a久久综合| 国产成人免费视频网站| 蜜桃av一区二区三区| 亚洲va韩国va欧美va精品| 中文字幕亚洲一区二区av在线| 精品对白一区国产伦| 6080国产精品一区二区| 欧美日韩成人一区| 精品视频在线免费| 欧美日韩日日夜夜| 欧美日韩国产欧美日美国产精品| 91丨九色丨蝌蚪丨老版| 99久久婷婷国产综合精品| 国v精品久久久网| 成人性生交大合| 岛国精品一区二区| 不卡的av电影在线观看| av中文字幕不卡| 91亚洲永久精品| 日本精品视频一区二区三区| av电影一区二区| 色婷婷激情一区二区三区| 色婷婷久久久亚洲一区二区三区 | 奇米精品一区二区三区在线观看| 婷婷国产在线综合| 麻豆久久一区二区| 精油按摩中文字幕久久| 韩国精品在线观看| 国产成人自拍在线| youjizz久久| 欧美性videosxxxxx| 在线成人高清不卡| 欧美一区二区啪啪| 精品不卡在线视频| 国产精品麻豆视频| **性色生活片久久毛片| 亚洲地区一二三色| 蜜芽一区二区三区| 国产精品一品二品| 色婷婷亚洲综合| 欧美一区二区视频网站| 久久久久9999亚洲精品| 自拍偷拍国产亚洲| 日本女人一区二区三区| 国产经典欧美精品| 97se亚洲国产综合自在线观| 欧美色欧美亚洲另类二区| 日韩欧美不卡一区| 国产精品免费视频一区| 亚洲线精品一区二区三区| 日韩精品成人一区二区三区| 国产一区二区0| 在线免费观看日本欧美| 久久综合久久99| 亚洲欧美国产77777| 蜜臀a∨国产成人精品| 成人免费的视频| 欧美日韩久久久| 国产精品免费网站在线观看| 亚洲国产成人av网| 国产精品亚洲第一| 欧美日韩一卡二卡三卡| 中文字幕乱码久久午夜不卡| 亚洲第一精品在线| av在线一区二区| 日韩一级二级三级精品视频| 久久久亚洲精品一区二区三区| 亚洲免费毛片网站| 久久99精品久久久久久动态图 | 99天天综合性| 石原莉奈在线亚洲三区| 久久久www成人免费毛片麻豆| 久久成人18免费观看| 久久久久久久久久久电影| 日韩高清不卡在线| 欧美在线看片a免费观看| 亚洲欧洲精品一区二区三区不卡| 国产成人精品免费看| 99免费精品视频| 国产精品网友自拍| 色综合久久综合| 亚洲综合免费观看高清完整版| 国产精品99久| 久久人人超碰精品| 国产二区国产一区在线观看| 欧美激情资源网| 欧美色图天堂网| 日韩精品亚洲专区| 欧美国产日韩一二三区| 欧美日韩视频不卡| 成人激情校园春色| 另类小说一区二区三区| 国产精品二三区| 久久女同互慰一区二区三区| 一本一道综合狠狠老| 麻豆精品一区二区av白丝在线| 精品成人一区二区三区四区| 欧美性色黄大片| 韩国欧美国产1区| 亚洲日本护士毛茸茸| 1区2区3区国产精品| 国产欧美一区二区三区在线看蜜臀| 国产日产亚洲精品系列| 久久久三级国产网站| 国产精品久线在线观看| 日本一区二区综合亚洲| 亚洲乱码国产乱码精品精可以看|