本文描述了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 文件读写
open-write-close流程耗时,单次追加写入1024字节,SanDisk 8GB卡内仅一个大小为36MB的dat文件:
格式化单元大小 | 使能容错模块下耗时 | 禁用容错模块下耗时 |
---|
64KB | 53ms | | 32KB | 67ms | | 16KB | 99ms | | 8KB | 162ms | | 4KB | 288ms | | 2KB | 543ms | |
3. 掉电测试
|