fatfs文件系统fat表条目的获取和设置

fatfs文件系统fat表条目的获取和设置


//指定蔟号,获取fat表中对应的位置的值
//返回值:
//0xFFFFFFFF:磁盘错误
//1:文件系统内部错误
//2..0x7FFFFFFF:蔟状态
static DWORD get_fat (		/* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x7FFFFFFF:Cluster status */
	FFOBJID* obj,	/* Corresponding object */
	DWORD clst//蔟号。/* Cluster number to get the value */
)
{
   
	UINT wc, bc;
	DWORD val;
	FATFS *fs = obj->fs;//文件系统

//蔟号必须是大于等于2的
//蔟号不能超过fat表中条目数
	if (clst < 2 || clst >= fs->n_fatent) {
   	/* Check if in valid range */
		val = 1;//内部错误。/* Internal error */
	} else {
   
		val = 0xFFFFFFFF;//默认值为磁盘错误。/* Default value falls on disk error */

		switch (fs->fs_type) {
   //文件系统类型
		case FS_FAT12 ://fat12文件系统
		//fat12文件系统fat表中使用1.5个字节表示一个条目
		//起始字节偏移量:clst*1.5 = clst + clst / 2
			bc = (UINT)clst; 
			bc += bc / 2;//起始字节偏移量
			if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break;//获取bc所在扇区数据
			wc = fs->win[bc++ % SS(fs)];//求余得到距离扇区开头的偏移量,同时将bc递增,需要获取下一个字节数据/* Get 1st byte of the entry */
			if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break;//获取bc所在扇区数据
			wc |= fs->win[bc % SS(fs)] << 8;//将两个字节合并,第二个字节在高8位。/* Merge 2nd byte of the entry */
			//蔟号为奇数,则wc右移四位,使用高12位
			//为偶数,则只保留低12位
			//由此可以看出:
			//蔟0:byte1低4位 + byte0组合的12bit
			//蔟1:byte2 + byte1高4位组合的12bit
			//蔟2:byte4低4位 + byte3组合的12bit
			//蔟3:byte5 + byte4高4位组合的12bit
			val = (clst & 1) ? (wc >> 4) : (wc & 0xFFF);<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值