【Fatfs】f_close返回FR_DISK_ERR

问题:

(1)第一次f_open之后,f_close返回FR_DISK_ERR;

(2)第二次f_open直接返回FR_LOCKED。

从上述两个问题分析:FR_DISK_ERR已经告知了我们底层I/O有问题。FR_LOCKED告知了我们文件被锁住了,也就是说重复打开同一个文件。

I/O控制的实现,主要通过disk_ioctl接口,改接口的实现内容要求如下:

 很明显,CTRL_SYNC涉及到同步,也就是说如果我们的写操作没有挂起,那么执行f_close就会出问题。笔者实际上对这个命令CTRL_SYNC的响应是返回RES_PARERR的。最后导致上述问题的出现,由于笔者在disk_write实现了写挂起(等待写完成),因此在disk_ioctrl中CTRL_SYNC的实现直接返回RES_OK。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
fatfs是一个轻量级的文件系统模块,用于在嵌入式系统中管理文件和存储设备。而f_write函数是fatfs库中的一个函数,用于向文件中写入数据。 在使用fatfs的f_write函数时,需要先打开一个文件,然后通过调用f_write函数向该文件中写入数据。f_write函数的原型如下: ``` FRESULT f_write ( FIL* fp, // 文件指针 const void* buff, // 数据缓冲区指针 UINT btw, // 要写入的字节数 UINT* bw // 实际写入的字节数 ); ``` 参数说明如下: - fp:文件指针,指向已经打开的文件 - buff:数据缓冲区指针,即要写入文件的数据 - btw:要写入的字节数,即数据的长度 - bw:实际写入的字节数,函数执行后会将实际写入的字节数保存到该指针所指的变量中 f_write函数返回一个FRESULT类型的值,表示操作的结果。如果返回值为FR_OK,则表示写入操作成功;否则,表示写入操作失败,具体的错误信息可以通过调用f_strerror函数来获取。 在使用f_write函数时,需要注意以下几点: - 写入数据的长度不能超过文件的剩余空间,否则写入操作会失败; - 写入文件之前,需要确保文件已经被打开,并且文件指针正确; - 写入文件时,需根据具体情况判断是否需要对写入的数据进行分块处理,以保证数据的完整性和性能的效率; 总之,通过fatfs的f_write函数可以方便地向文件中写入数据,是嵌入式系统中管理文件的一个重要功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值