⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fatmountvolumeid.c

📁 c51文件系统源码
💻 C
字号:
#ifndef _FAT_DEFINE
 #include "FAT.c"
#endif

BYTE FATMountVolumeID(BYTE Partition);

BYTE FATMountVolumeID(BYTE Partition)
{
	pdata DWORD TotSec,DataSec,CountofCluster;
	
	if (Partition>=StorageMedia.TotalPartitions) return(FAT_ERR_PARTITION_NOT_FOUND);	//没找到指定扇区

	StorageMedia.ReadSector(sDPT[Partition].LBABegin,DiskBuffer);		//读FAT VolumeID扇区

	//检查VolumeID扇区标记
 	if (DiskBuffer[510] != 0x55||DiskBuffer[511] != 0xaa)
		return(FAT_ERR_MBR_FLAG);			//不正常的引导扇区标志

	//检查分区类型
	StorageMedia.CurrentPartition = Partition;					//当前分区号
	BOOTSEC->BPB_RsvdSecCnt=MEMSwap16(BOOTSEC->BPB_RsvdSecCnt);
	BOOTSEC->BPB_RootEntCnt=MEMSwap16(BOOTSEC->BPB_RootEntCnt);
	BOOTSEC->FAT.F32.BPB_RootClus=MEMSwap32(BOOTSEC->FAT.F32.BPB_RootClus);
	BOOTSEC->FAT.F32.BPB_FSInfo=MEMSwap16(BOOTSEC->FAT.F32.BPB_FSInfo);
	BOOTSEC->BPB_TotSec16=MEMSwap16(BOOTSEC->BPB_TotSec16);
	BOOTSEC->BPB_FATSz16=MEMSwap16(BOOTSEC->BPB_FATSz16);
	BOOTSEC->BPB_TotSec32=MEMSwap32(BOOTSEC->BPB_TotSec32);
	BOOTSEC->FAT.F32.BPB_FATSz32=MEMSwap32(BOOTSEC->FAT.F32.BPB_FATSz32);

	FAT.RootSectors = (BOOTSEC->BPB_RootEntCnt * 32) / 512;
	if (BOOTSEC->BPB_FATSz16!=0)
		FAT.FATSz = BOOTSEC->BPB_FATSz16;
	else
		FAT.FATSz = BOOTSEC->FAT.F32.BPB_FATSz32;

	if (BOOTSEC->BPB_TotSec16!=0)
		TotSec = BOOTSEC->BPB_TotSec16;
	else
		TotSec = BOOTSEC->BPB_TotSec32;

	DataSec = TotSec - (BOOTSEC->BPB_RsvdSecCnt + (BOOTSEC->BPB_NumFATs * FAT.FATSz) + FAT.RootSectors);

	CountofCluster = DataSec / (DWORD)(BOOTSEC->BPB_SecPerClus);
	if (CountofCluster<4085)
	{
		sDPT[Partition].FATType=FAT_TYPE_FAT12;
		FAT.RootClus = BOOTSEC->BPB_RsvdSecCnt + (BOOTSEC->BPB_NumFATs * BOOTSEC->BPB_FATSz16);
	}
	else if (CountofCluster<65525)
	{
		sDPT[Partition].FATType=FAT_TYPE_FAT16;
		FAT.RootClus = sDPT[StorageMedia.CurrentPartition].LBABegin + BOOTSEC->BPB_RsvdSecCnt + (BOOTSEC->BPB_NumFATs * BOOTSEC->BPB_FATSz16);
	}
	else
	{
		sDPT[Partition].FATType=FAT_TYPE_FAT32;
		FAT.RootClus = BOOTSEC->FAT.F32.BPB_RootClus;				//根目录簇号
	}
	FAT.SecPerClus = BOOTSEC->BPB_SecPerClus;					//每簇扇区数
	FAT.CurrentDirectory = FAT.RootClus;					//当前目录入口(簇号)
	FAT.FATSec = sDPT[StorageMedia.CurrentPartition].LBABegin + BOOTSEC->BPB_RsvdSecCnt;		//FAT表开始的扇区号
	FAT.ClusSec = sDPT[StorageMedia.CurrentPartition].LBABegin + BOOTSEC->BPB_RsvdSecCnt + (BOOTSEC->BPB_NumFATs * FAT.FATSz) + FAT.RootSectors;		//簇开始的扇区
	FAT.FSISec = BOOTSEC->FAT.F32.BPB_FSInfo + sDPT[Partition].LBABegin;		//FAT32扩展信息扇区号
	//加载第一个FAT表
	StorageMedia.ReadSector(FAT.FATSec,FATTable.FAT.F12);
	FATTable.Sector=0;
	return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -