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

📄 file_header.c

📁 能够在单片机等小型处理器上使用的fat16文件系统
💻 C
字号:
#include"file_header.h"
#include<string.h>

void read_MBR(DBR_tag * MBR_t,char *gFormat)
{
	int pt=0,i=0;
	//memset(MBR_t,0,sizeof(DBR_tag));

	for(i=0;i<3;i++)
		MBR_t->bJmpBoot[i]=*(gFormat+pt+i);
	pt+=3;

	for(i=0;i<8;i++)
		MBR_t->bOEMName[i]=*(gFormat+pt+i);
	pt+=8;

	MBR_t->BPB_wBytesPerSec=0;
	for(i=0;i<2;i++)
		MBR_t->BPB_wBytesPerSec+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
	pt+=2;

	MBR_t->BPB_bSecPerClus=*(gFormat+pt);
	pt++;

	MBR_t->BPB_wReservedSec=0;
	for(i=0;i<2;i++)
		MBR_t->BPB_wReservedSec+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
	pt+=2;

	MBR_t->BPB_bNumFATs=*(gFormat+pt);
	pt++;

	MBR_t->BPB_wRootEntry=0;
	for(i=0;i<2;i++)
		MBR_t->BPB_wRootEntry+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
	pt+=2;

	MBR_t->BPB_wTotalSec=0;
	for(i=0;i<2;i++)
		MBR_t->BPB_wTotalSec+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
	pt+=2;

	MBR_t->BPB_bMedia=*(gFormat+pt);
	pt++;

	MBR_t->BPB_wSecPerFAT=0;
	for(i=0;i<2;i++)
		MBR_t->BPB_wSecPerFAT+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
	pt+=2;

	MBR_t->BPB_wSecPerTrk=0;
	for(i=0;i<2;i++)
		MBR_t->BPB_wSecPerTrk+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
	pt+=2;

	MBR_t->BPB_wHeads=0;
	for(i=0;i<2;i++)
		MBR_t->BPB_wHeads+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
	pt+=2;

	MBR_t->BPB_dHiddSec=0;
	for(i=0;i<4;i++)
		MBR_t->BPB_dHiddSec+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
	pt+=4;

	MBR_t->BPB_dBigTotalSec=0;
	for(i=0;i<4;i++)
		MBR_t->BPB_dBigTotalSec+=(unsigned char)(*(gFormat+pt+i))<<(i*8);
	pt+=4;

	MBR_t->bDrvNum=*(gFormat+pt);
	pt++;

	MBR_t->bReserved1=*(gFormat+pt);
	pt++;

	MBR_t->bBootSig=*(gFormat+pt);
	pt++;

	for(i=0;i<4;i++)
		MBR_t->bVolID[i]=*(gFormat+pt+i);
	pt+=4;

	for(i=0;i<11;i++)
		MBR_t->bVolLab[i]=*(gFormat+pt+i);
	pt+=11;

	for(i=0;i<8;i++)
		MBR_t->FileSysType[i]=*(gFormat+pt+i);
	pt+=8;

	for(i=0;i<448;i++)
		MBR_t->ExecutableCode[i]=*(gFormat+pt+i);
	pt+=448;

	//MBR_t->EndingFlag=0;
	//for(i=0;i<2;i++,pt++)
		MBR_t->EndingFlag=*(gFormat+pt)<<8;
		MBR_t->EndingFlag+=(unsigned char)(*(gFormat+pt+1));
}

void write_MBR(DBR_tag * MBR_t,char *gFormat)
{
	int pt=0,i=0;

	for(i=0;i<3;i++)
		*(gFormat+pt+i)=MBR_t->bJmpBoot[i];
	pt+=3;

	for(i=0;i<8;i++)
		*(gFormat+pt+i)=MBR_t->bOEMName[i];
	pt+=8;

	for(i=0;i<2;i++)
		*(gFormat+pt+i)=(MBR_t->BPB_wBytesPerSec>>(i*8))&(0x00ff);
	pt+=2;

	*(gFormat+pt)=MBR_t->BPB_bSecPerClus;
	pt++;

	for(i=0;i<2;i++)
		*(gFormat+pt+i)=(MBR_t->BPB_wReservedSec>>(i*8))&(0x00ff);
	pt+=2;

	*(gFormat+pt)=MBR_t->BPB_bNumFATs;
	pt++;

	for(i=0;i<2;i++)
		*(gFormat+pt+i)=(MBR_t->BPB_wRootEntry>>(i*8))&(0x00ff);
	pt+=2;

	for(i=0;i<2;i++)
		*(gFormat+pt+i)=(MBR_t->BPB_wTotalSec>>(i*8))&(0x00ff);
	pt+=2;

	*(gFormat+pt)=MBR_t->BPB_bMedia;
	pt++;

	for(i=0;i<2;i++)
		*(gFormat+pt+i)=(MBR_t->BPB_wSecPerFAT>>(i*8))&(0x00ff);
	pt+=2;

	for(i=0;i<2;i++)
		*(gFormat+pt+i)=(MBR_t->BPB_wSecPerTrk>>(i*8))&(0x00ff);
	pt+=2;

	for(i=0;i<2;i++)
		*(gFormat+pt+i)=(MBR_t->BPB_wHeads>>(i*8))&(0x00ff);
	pt+=2;

	for(i=0;i<4;i++)
		*(gFormat+pt+i)=(MBR_t->BPB_dHiddSec>>(i*8))&(0x00ff);
	pt+=4;

	for(i=0;i<4;i++)
		*(gFormat+pt+i)=(MBR_t->BPB_dBigTotalSec>>(i*8))&(0x00ff);
	pt+=4;

	*(gFormat+pt)=MBR_t->bDrvNum;
	pt++;

	*(gFormat+pt)=MBR_t->bReserved1;
	pt++;

	*(gFormat+pt)=MBR_t->bBootSig;
	pt++;

	for(i=0;i<4;i++)
		*(gFormat+pt+i)=MBR_t->bVolID[i];
	pt+=4;

	for(i=0;i<11;i++)
		*(gFormat+pt+i)=MBR_t->bVolLab[i];
	pt+=11;

	for(i=0;i<8;i++)
		*(gFormat+pt+i)=MBR_t->FileSysType[i];
	pt+=8;

	for(i=0;i<448;i++)
		*(gFormat+pt+i)=MBR_t->ExecutableCode[i];
	pt+=448;

	//for(i=0;i<2;i++,pt++)
		*(gFormat+pt)=0x55;
		*(gFormat+pt+1)=0xaa;
}

⌨️ 快捷键说明

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