有坛友在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操作,时间为何差别那么大呢。 你查代码呗。怀疑是把spi给扫描了一遍。 我猜,软件逻辑估计是按页在写,然后你没写满一页,你强行同步,他要先读再写。你看看flash的一页是多少,然后一口气干一页试试 jlhgold 发表于 2019-8-15 08:22
我猜,软件逻辑估计是按页在写,然后你没写满一页,你强行同步,他要先读再写。你看看flash的一页是多少, ...
肯定是这样的,也必须只能这样啊,fatfs也是这么处理的 myxiaonia 发表于 2019-8-15 11:25
肯定是这样的,也必须只能这样啊,fatfs也是这么处理的
那肯定强制同步会变慢啊,哈哈哈
页:
[1]