打印
[其他]

MCU平台下一种简单的文件系统设计构想

[复制链接]
567|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2023-12-21 08:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在使用MCU的项目中,经常会涉及到一些数据的存储,受限于硬件,又不太可能直接上文件系统(如FAT文件系统),直接指定存储地址,数据长度对数据进行读写,不同类型的数据比较多时,又会显得凌乱,本文参考FAT及其他文件系统,设计一个简单的文件系统,方便在数据量不大的存储器上使用。

1.基本思想

在存储器(EEPROM,Flash)分配一定的存储空间给文件描述区,用于指示文件类型长度,存储位置,长度等信息。而数据区存放文件描述区所描述的数据。

1)将文件描述和实际文件数据分离,如下图所示。



2)在文件描述区中有多个文件描述项,分别对不同的类型的数据作描述,包括其文件ID,存储地址,长度等,从该区域可以索引到实际数据存储区域,如下图所示。



2.各区域主要内容

1)文件描述区

文件描述区中最重要的是一个查找表(LUT),查找表内容如下图。



2)数据区

数据区中主要是用户数据及校验码(用于校验数据是否有错误),数据区的内容如下图。



3.数据结构

主要的数据结构定义如下,逻辑实现比较简单,就不写了。

typedef enum _DATA_ID
{
        DATA_ID_0 = 0,
        DATA_ID_1 = 1,
        DATA_ID_2 = 2,
        DATA_ID_3 = 3,
        DATA_ID_NUM = 4
}DATA_ID;

typedef struct _LUT_ITEM
{
        DATA_ID DataId;
        uint32_t Address;
        uint32_t nLength;
}LUT_ITEM;

typedef struct _SIMPLE_FILE_SYSTEM
{
    uint16_t MagicNumber;
        uint16_t DataItemNum;
        LUT_ITEM LutTbl[DATA_ID_NUM];
}SIMPLE_FILE_SYSTEM;

SIMPLE_FILE_SYSTEM SimpleFileSystem =
{
    0x5a5a;
        DATA_ID_NUM,
        {
                {DATA_ID_0, 0x0004, 16},
                {DATA_ID_1, 0x0014, 16},
                {DATA_ID_2, 0x0024, 16},
                {DATA_ID_3, 0x0034, 16}
        }
};
————————————————
版权声明:本文为CSDN博主「propor」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/propor/article/details/134965845

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2028

主题

15902

帖子

13

粉丝