68336016 发表于 2019-8-14 19:34:52

有坛友在stm32+spi flash上用littlefs么,文件写入耗时有些疑惑

本帖最后由 68336016 于 2019-8-14 19:37 编辑

stm32+w25q64

//先建立好文件,只执行一次
lfs_file_open(&g_lfs, &g_file, filename, LFS_O_RDWR | LFS_O_CREAT);

//不断循环执行下面2句,每次写入内容只有20个字节,耗时约200ms,时间几乎就是lfs_file_sync函数占用的。
lfs_file_write(&g_lfs, &g_file, content, strlen(content));
lfs_file_sync(&g_lfs, &g_file);

换种方式,每次写入数据后,不去人工调用lfs_file_sync语句,让多次执行lfs_file_write后,自动写入FLASH
//先建立好文件,只执行一次
lfs_file_open(&g_lfs, &g_file, filename, LFS_O_RDWR | LFS_O_CREAT);

//不断循环执行下面1句,每次写入内容只有20个字节,在缓冲区没满时候,没真正写到FLASH,几乎不耗时间。
//每调用20多次后,估计缓冲区满了,这时耗时是3ms,应该就是写入FLASH的时间
lfs_file_write(&g_lfs, &g_file, content, strlen(content));


问题:人为每次去调用lfs_file_sync耗时要200ms,而缓冲区满了程序自动写入FLAHS,只需要几个ms时间。
         都有执行写入FLASH操作,时间为何差别那么大呢。

wye11083 发表于 2019-8-14 19:47:47

你查代码呗。怀疑是把spi给扫描了一遍。

jlhgold 发表于 2019-8-15 08:22:05

我猜,软件逻辑估计是按页在写,然后你没写满一页,你强行同步,他要先读再写。你看看flash的一页是多少,然后一口气干一页试试

myxiaonia 发表于 2019-8-15 11:25:00

jlhgold 发表于 2019-8-15 08:22
我猜,软件逻辑估计是按页在写,然后你没写满一页,你强行同步,他要先读再写。你看看flash的一页是多少, ...

肯定是这样的,也必须只能这样啊,fatfs也是这么处理的

jlhgold 发表于 2019-8-16 08:10:10

myxiaonia 发表于 2019-8-15 11:25
肯定是这样的,也必须只能这样啊,fatfs也是这么处理的

那肯定强制同步会变慢啊,哈哈哈
页: [1]
查看完整版本: 有坛友在stm32+spi flash上用littlefs么,文件写入耗时有些疑惑