硬汉嵌入式论坛

 找回密码
 立即注册
查看: 113|回复: 0
收起左侧

[LittleFS] rtthread中littlefs关于修改大文件内容疑问

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2025-12-29 14:07:14 | 显示全部楼层 |阅读模式
楼主使用rtthread标准版本开启了DFS组件,以及添加了fal和littlefs,使用的spi flash是w25q64

具体操作流程为挂载spi设备-fal将spi设备抽象成mtd设备-正常挂载文件系统
现在整个结构已经打通,问题出现在应用层上,我有一个930KB的文件,通过open-lseek-write-close这个操作修改开头的192个字节数据,发现close时长居然要有二十多秒,
通过修改READ_SIZE PROG_SIZE以及CACHE_SIZE这些配置均没有变化,通过仿真发现是lfs.c文件中lfs_file_flush函数的while(file -> pos < file -> ctz.size)这个循环占用了大量时间:

            while (file->pos < file->ctz.size) {
                // copy over a byte at a time, leave it up to caching
                // to make this efficient
                uint8_t data;
                lfs_ssize_t res = lfs_file_rawread(lfs, &orig, &data, 1);
                if (res < 0) {
                    return res;
                }

                res = lfs_file_rawwrite(lfs, file, &data, 1);
                if (res < 0) {
                    return res;
                }

                // keep our reference to the rcache in sync
                if (lfs->rcache.block != LFS_BLOCK_NULL) {
                    lfs_cache_drop(lfs, &orig.cache);
                    lfs_cache_drop(lfs, &lfs->rcache);
                }
            }

其中这个file->pos是文件内修改字节的指针地址,这个ctz.size是文件大小,很显然这是一个ctz跳表的程序,
所以问题来了,由于我修改的是文件内开头的几个字节,所以这个file->pos也是指向开头的,但是这个ctz.size是文件最末尾,而这个循环中这个file->pos是逐一自增的,所以耗费了太多时间
请问各位坛友有没有遇到这种情况,或者说如何避免这种情况的发生?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-1-10 07:55 , Processed in 0.050274 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表