jipolun 发表于 2022-5-13 22:35:20

发现filex的一个问题,小数据读写慢的原因似乎是其本身设计是导致的

最近在弄filex,使用sd卡做媒介
当 单次写 20K-30k,速度很快,15-18MB/s
但是 当单次写 10-300Bytes时,会很慢--900KB/s
典型为
for(int i=0;i<10000;i++){
    fx_file_write(fd,buf, 132);   
}
于是我想增大其内部缓存,
UINT fx_media_open(    FX_MEDIA *media_ptr,   CHAR *media_name,    VOID(*media_driver)(FX_MEDIA *),    VOID *driver_info_ptr,    VOID *memory_ptr,   ULONG memory_size);
将 memory_ptr 的buffer给大,给 buffer[(30*1024)];
下面写入还是
for(int i=0;i<10000;i++){
    fx_file_write(fd,buf, 132);   
}

测试发现buffer给大,没有太多变化,于是就仔细测了一下
发现 filex 使用缓存,但还是会以1个扇区为单位写入,即512字节。所以会很慢
当 fx_file_write的buf足够大,才会以多扇区一起写入,表现为我们使用大 buffer写入时,速度会很快。
这就尴尬了,我想使用filex记录一下串口数据,每次数据很小,那么fx_media_open给大buffer也没有用。
难道 我需要自己建一个缓冲,串口数据进来先放自己的buffer里面,当数据够大了,再写入?

不知道坛友是怎样解决该问题的?




jipolun 发表于 2022-5-13 22:38:26

SD 1个扇区的写入很慢,多个扇区一起写才会快

eric2013 发表于 2022-5-14 10:32:56

jipolun 发表于 2022-5-13 22:38
SD 1个扇区的写入很慢,多个扇区一起写才会快

这才是根本,单个扇区,你的底层代码是single sector函数,多扇区数multi sector,这个才是提速的根本。
页: [1]
查看完整版本: 发现filex的一个问题,小数据读写慢的原因似乎是其本身设计是导致的