fatfs文件系统中dir_sdi函数说明

本文详细解析fatfs文件系统中的dir_sdi函数,该函数用于设置目录条目索引值。讨论了fat16和fat32/exfat文件系统的不同处理方式,并介绍了如何计算目录条目在扇区和簇中的位置。
摘要由CSDN通过智能技术生成

//设置目录条目索引值。
//返回0表示成功
//返回非0表示错误
/*
dp为目录对象。
ofs为目录条目的偏移量,单位为字节。
n = ofs / SZDIRE:表示第n个条目,n从0开始。

首先ofs不能超过目录存储的最大字节数。MAX_DIR_EX/MAX_DIR
其次,ofs必须是SZDIRE的倍数

fat16是固定位置根目录:通过DBR中根目录首扇区号获得
fat32/exfat根目录位置:通过DBR中提供的根目录首蔟号获得

给定ofs值需要计算:
1、蔟号:ofs指定的目录条目在哪个蔟
2、扇区号:ofs指定的目录条目在哪个扇区
3、扇区中偏移量:ofs在扇区中偏移了几个条目

获取上述信息,可将扇区内容读到win中,根据偏移量可以找到对应条目(32字节)

fat16文件系统:
由于根目录不在数据区,因此蔟号为0
根目录的起始扇区号:fs->dirbase
ofs对应扇区号:起始扇区号 + 扇区偏移量 = fs->dirbase + ofs / SS(fs)
扇区内偏移量:ofs % SS(fs)

fat32/exfat文件系统:
根目录的起始蔟号:fs->dirbase
ofs对应蔟号:通过在fat表中蔟链查找到ofs对应的蔟(ofs/每蔟字节数)
扇区号:通过clst2sect函数得到蔟首扇区号
ofs % 每蔟字节数 = 对应蔟号中的偏移字节数
对应蔟号中的偏移字节数 / SS(fs)为蔟内扇区偏移量
扇区内偏移量:对应蔟号中的偏移字节数 % SS(fs)为扇区内条目偏移字节
*/

static FRESULT dir_sdi (	/* FR_OK(0):succeeded, !=0:error */
	DIR* dp,//目录对象。/* Pointer to directory object */
	DWORD ofs//目录表偏移量。/* Offset of directory table */
)
{
   
	DWORD csz, clst;
	FATFS *fs = dp->obj.fs;

//偏移量不能超过最大目录数
//偏移量必须是32的倍数
	if (ofs >=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值