fatmountpartition.c
来自「基于C51单片机的文件系统 ? 贑51单片机的文件系统」· C语言 代码 · 共 60 行
C
60 行
#ifndef _FAT_DEFINE
#include "FAT.c"
#endif
BYTE FATMountPartition(void);
BYTE FATMountPartition(void)
{
register BYTE i,j=0;
xdata DWORD MasterExtLBA,ExtLBA;
bit Master=1,Ext=1;
MasterExtLBA=0x00000000;
ExtLBA=0x00000000;
while(Ext)
{
if (StorageMedia.ReadSector(ExtLBA,DiskBuffer)) {printf("I/O error");return(0);} //读MBR扇区
// IDEReadSector(ExtLBA,DiskBuffer);
Ext=0;
//检查MBR扇区标记
if (DiskBuffer[510] != 0x55||DiskBuffer[511] != 0xaa)
{printf("55AA\n"); return(0);} //不正常的引导扇区标志
//加载分区表
for(i=0;i<4;i++)
{
DPT[i].LBABegin=MEMSwap32(DPT[i].LBABegin);
DPT[i].CntSec=MEMSwap32(DPT[i].CntSec);
if (DPT[i].TypeCode==0x01||
DPT[i].TypeCode==0x04||
DPT[i].TypeCode==0x06||
DPT[i].TypeCode==0x0b||
DPT[i].TypeCode==0x0c||
DPT[i].TypeCode==0x0e) //FAT 分区
{
sDPT[j].LBABegin = DPT[i].LBABegin + ExtLBA;
sDPT[j].CntSec = DPT[i].CntSec;
j++;
if (j==FAT_MAX_PARTITIONS) return(j);
}
else if (DPT[i].TypeCode==0x05||DPT[i].TypeCode==0x0f) //扩展分区
{
Ext=1;
if (Master)
{
ExtLBA=DPT[i].LBABegin;
MasterExtLBA=DPT[i].LBABegin;
Master=~Master;
}
else
{
ExtLBA=MasterExtLBA+DPT[i].LBABegin;
}
}
}
}
return(j);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?