汉字显示实验时,在 fat.h中 有如下定义
//使用packed 以字节分配.避免数据对齐的问题
//硬盘分区表,每个分区占用16个字节,64个字节支持最大4个分区
//在SD卡上一般使用的是一个,也就是第一个分区.
typedef __packed struct // length 16 bytes
{
BYTE prIsActive; //0x80 表明该分区是否是活动分区
BYTE prStartHead; //开始磁头
WORD prStartCylSect; //开始扇区(低6位)和开始柱面(高10位)
BYTE prPartType; //系统ID
BYTE prEndHead; //结束磁头
WORD prEndCylSect; //结束扇区和结束柱面
DWORD prStartLBA; //相对扇区数,也就是从这里到逻辑扇区0的偏移(以扇区为单位)
DWORD prSize; //总扇区数
}partrecord;
而在Fat.c中有如下函数
//FAT初始化,不含SD的初始化,用之前应先调用sd的初始化
//返回值:0,初始化成功
// 其他,初始化失败
unsigned char FAT_Init(void)//Initialize of FAT need initialize SD first
{
bootsector710 *bs = 0;
bpb710 *bpb = 0;
partrecord *pr = 0;
DWORD hidsec=0;
u32 Capacity;
Capacity = SD_GetCapacity();
if(Capacity<0xff)return 1;
if(SD_ReadSingleBlock(0,fat_buffer))return 2;
bs = (bootsector710 *)fat_buffer;
pr = (partrecord *)((partsector *)fat_buffer)->psPart;//first partition
hidsec = pr->prStartLBA;//the hidden sectors
if(hidsec >= Capacity/512)hidsec = 0;
else
{
if(SD_ReadSingleBlock(pr->prStartLBA,fat_buffer))return 3;//read the bpb sector
bs = (bootsector710 *)fat_buffer;
if(bs->bsJump[0]!=0xE9 && bs->bsJump[0]!=0xEB)
{
hidsec = 0;
if(SD_ReadSingleBlock(0,fat_buffer))return 4;//read the bpb sector
bs = (bootsector710 *)fat_buffer;
}
}
if(bs->bsJump[0]!=0xE9 && bs->bsJump[0]!=0xEB)return 5;//对付没有bootsect的sd卡
//dead with the card which has no bootsect
bpb = (bpb710 *)bs->bsBPB;
if(bpb->bpbFATsecs)//detemine thd FAT type //do not support FAT12
{
FAT32_Enable=0; //FAT16
FATsectors = bpb->bpbFATsecs;//FAT表占用的扇区数
FirstDirClust = 2;
}
else
{
FAT32_Enable=1; //FAT32
FATsectors = bpb->bpbBigFATsecs;//FAT占用的扇区数
FirstDirClust = bpb->bpbRootClust;
}
BytesPerSector = bpb->bpbBytesPerSec; //每扇区字节数
SectorsPerClust = (BYTE)bpb->bpbSecPerClust;//每簇扇区数
FirstFATSector = bpb->bpbResSectors+hidsec;//第一个FAT表扇区
RootDirCount = bpb->bpbRootDirEnts; //根目录项数
RootDirSectors = (RootDirCount*32)>>9; //根目录占用的扇区数
FirstDirSector = FirstFATSector+bpb->bpbFATs*FATsectors;//第一个目录扇区
FirstDataSector = FirstDirSector+RootDirSectors;//第一个数据扇区
return 0;
}
,请问,如何理解上面函数中红色字体的代码
|