#截止目前本文暂为草稿,部分测试结果可能受测试方法或软件配置限制,不能反映真实情况,仅供参考
本文描述了FileX文件系统在STM32平台下, 在SD卡上使用,不适用操作系统(定义FX_STANDALONE_ENABLE)时的一些测试情况; fx_user.h中涉及功能模块宏定义均不自定义,使用默认值;
1. 内存消耗
以下两个主要内存消耗的结构体:
typedef struct FX_MEDIA_STRUCT {
...
} FX_MEDIA;
typedef struct FX_FILE_STRUCT {
...
} FX_FILE;
各主要结构体、数组内存消耗情况(byte):
变量类型 | 禁用容错模块 | 使能容错模块 |
---|---|---|
FX_MEDIA | 9352 | 10408 |
FX_FILE | 480 | 488 |
media_memory[512] | 512 | 512 |
fault_tolerant_memory[3072] | - | 3072 |
共计 | 10344 | 14480 |
2. 时间消耗
2.1 容错模块
当容错模块启用时,必须在fx_media_open()之后立即调用fx_fault_tolerant_enable()函数对SD卡进行扫描, 以读取日志进行相关恢复工作。
在stm32f103(72Mhz主频,SPI接口,SPI速率18MHz)下:
卡容量 | 初次耗时 | 非初次耗时 | 读取扇区数量 |
---|---|---|---|
2GB(无牌)16k | 2.854s | 936 (6318-7254) | |
4GB(SanDisk)4k | 32.451s | 7539 (9496-17035) | |
8GB(SanDisk) 2k | 85.118s | 30192(5150-35342) | |
8GB(SanDisk) 4k | 42.999s | 42.852s | 15128(2510- 17638) |
8GB(SanDisk) 8k | 21.232s | 7572(1238-8810 ) | |
8GB(SanDisk) 16k | 10.475s | 4088 (314-4402) | |
8GB(SanDisk) 32k | 5.243s | 1894 (4402-6296) | |
8GB(SanDisk) 64k | 2.564s | 947(6296-7243) | |
8GB(SanDisk) 满文件 | 41.552s | 15127 (2575-17702) | |
8GB(TOSHIBA) 32k | 5.864s | 1845(12692-14537) | |
8GB(Kingston) ? | 5.526s | 1861(12660–14521) | |
8GB(Kingston)4k | 14875(3016–17891) |
在stm32f407(168Mhz主频,SDIO四数据线接口,SDIO速率24MHz)下:
卡容量 | 初次耗时 | 非初次耗时 | 读取扇区数量 |
---|---|---|---|
2GB(无牌)16k | 0.536s | ||
4GB(SanDisk) 4k | 4.202s | ||
8GB(SanDisk) | 5.7s | ||
8GB(SanDisk) 满文件 | 6.48s | 4.948s | |
8GB(TOSHIBA) 32k | 1.337s | ||
8GB(Kingston) | 1.008s |
存疑:容错模块日志存储区占扇区大小是否与卡格式化选项有关。
继续测试发现一个有趣的现象,容错模块日志所占扇区大小与格式化单元大小有关, 单个文件操作速度也与此有关(见下2.2),但还需测试文件大小与单元大小的相对关系。
2.2 文件创建
分别在根目录中存在不同数目文件时测试创建一个文件耗时;
分别在茛目路中存在不同数目文件夹,在指定文件夹下存放不同数目文件下测试创建一个文件耗时;
2.3 文件读写
open-write-close流程耗时,单次追加写入1024字节,SanDisk 8GB卡内仅一个大小为36MB的dat文件:
格式化单元大小 | 使能容错模块下耗时 | 禁用容错模块下耗时 |
---|---|---|
64KB | 53ms | |
32KB | 67ms | |
16KB | 99ms | |
8KB | 162ms | |
4KB | 288ms | |
2KB | 543ms |