|
最近在弄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里面,当数据够大了,再写入?
不知道坛友是怎样解决该问题的?
|
|