fatfs文件系统创建或扩展蔟链create_chain

本文档详细介绍了fatfs文件系统中如何创建或扩展蔟链。通过检查磁盘上的空蔟,从指定蔟号开始寻找未使用的蔟,并在fat表中更新相应的条目。当clst为0时,从最后分配的蔟开始查找;clst为1时,由于系统使用,返回磁盘错误;clst大于1时,检查clst蔟的后续蔟是否为空,从而进行扩展。整个过程涉及到簇链的查找、更新和错误处理机制。
摘要由CSDN通过智能技术生成

//创建或扩展蔟链
//返回值:
//0表示没有空蔟
//1表示内部错误
//0xFFFFFFFF表示磁盘错误
//其他值:表示蔟链上最后新加的蔟号
/*
如果clst为0表示创建新的蔟
则从最后分配的蔟开始,往后循环扫描看有没有空蔟
如果最后分配的蔟为0,表示还没有分配过蔟,则从1号蔟开始,往后循环扫描看有没有空蔟

如果clst为1,表示在fat表中1号蔟的fat表条目下扩展蔟
1号蔟条目的值为系统使用,此时会返回磁盘错误。

如果clst大于1,表示在fat表中clst号蔟的fat表条目下扩展蔟
则先判断下clst号蔟的fat表条目中是不是已经记录了下一个蔟,记录了则直接返回,已经指向下一个蔟了
如果不是指向了下一个蔟,则从当前clst蔟开始,往后循环扫描看有没有空蔟

如果空蔟个数为0,则直接返回没有空蔟了。

查找下一个空蔟:
1、首先判断下当前蔟+1的蔟是不是空蔟,是就表明找到了,不是则再循环找
2、从当前蔟开始,递增循环找,找到空蔟则返回蔟号,每找到返回无空蔟

找到了就记录最后分配的蔟号、将空蔟计数器递减、fsi更新
*/


static DWORD create_chain (	/* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */
	FFOBJID* obj,		/* Corresponding object */
	DWORD clst//0表示创建新的蔟链,其他值表示扩展蔟链。/* Cluster# to stretch, 0:Create a new chain */
)
{
   
	DWORD cs;
	DWORD ncl;///下一个蔟
	DWORD scl;//起始蔟
	FRESULT res;
	FATFS *fs = obj->fs;

	if (clst == 0) {
   //创建一个新的蔟链。/* Create a new chain */
		scl = fs->last_clst;//从最后分配的蔟作为起始蔟。/* Suggested cluster to start to find */
		if (scl == 0 || scl >= fs->n_fatent) //如果为0或者大于fat表条目数
			scl = 1;//则从1号蔟开始
		//last_clst为0表示还没有分配过蔟,因此开始蔟为1,则下一个蔟就为2号蔟。从2号蔟开始找
	}
	else {
   //扩展一个蔟链。/* Stretch a chain */
	//如果是扩展蔟链
	//则先读取当前蔟的fat表中条目值
	//如果条目值中已经指向下一个蔟了,则直接返回下一个蔟号
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值