0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术工控主板FAT文件系统的稳健读写方法介绍

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-16 09:33 次阅读

在基于WinCE的嵌入式系统中,通常NandFlash + FAT文件系统是最为常用的数据存储方式。对这类设备长期运行情况的跟踪,我们发现在一定的应用情况下,FAT文件系统存在失效的可能,而文件系统的失效导致系统在重启中不能读取系统注册表或应用程序文件,宏观的现象就是设备不能正常运行。

经过对FAT文件失效情况的分析,我们发现出现失效的系统往往有以下两种文件操作:

1、需要保存运行日志文件,每条日志记录大约两百字节水平,整个日志文件可包含上万条记录,即日志文件大小在2MB水平。应用程序对日志的操作是随机的。

2、系统有一个容量上兆的配置文件,应用程序可能根据运行的情况,动态修改配置的内容。

以上这两种文件操作,对NandFlash + FAT的存储单位,由于文件都比较大,都可能导致大规模的NandFlash块擦除及数据搬动。当此时CPU负载还比较重时,FAT文件系统内部的某种缺陷就可能暴露出来,从而危害设备的稳定运行。

针对上述两种应用的特点,以规避FAT文件系统出现致命缺陷为目的,我们设计了一层新的文件操作API函数,来替代常规的文件API函数。新的API包括以下6个函数:

• HANDLE CreateFileEm(……);
• BOOL ReadFileEm(……);
• BOOL WriteFileEm(……);
• DWORD SetFilePointerEm(……);
• DWORD GetFileSizeEm(……);
• BOOL CloseHandleEm(……);

这6个API函数的名称与对应的常规函数名称基本一致,只是在末尾增加了“Em”两个字母以示区别,函数的参数与常规函数的参数则完全一致。应用程序只需做简单的修改,就可使用我们所提供的新方法。

新的文件操作的要点,是把一个日志文件或配置文件,映射为NandFlash下的子目录,文件的内容则分成若干个子文件(以下称为量子文件,以表示它的不可分割性),量子文件按序号0000依次递增9999,每个量子文件的大小为NandFlash的扇区大小,在英创工控主板中NandFlash的扇区Size为2KB,当前量子文件写满2KB后,会自动生成当前序号+1的新量子文件。API内部建有当前量子文件的数据缓冲区,当读写仅限于当前量子文件大小(即2KB)时,不会产生实质性的NandFlash读写,从而降低NandFlash的读写负担。即使进行实质性的写操作,因为总是2KB,FAT文件系统的工作量也被降到最低。

新的API函数尽管可支持不同线程操作同一文件,但若出现不同线程对同一个量子文件进行读写操作,则可能存在数据丢失的情况、读取的数据不是最新数据的情况。因此应用程序应尽量避免不同线程对同一个量子文件进行读写操作。

在200MHz主频的CE5.0系统中(如 EM9160、EM9360等),新API函数的文件写操作的平均速度在90KB/s – 95KB/s范围,文件读操作的平均速度在600KB/s – 700KB/s范围。

一般情况下若写入的数据处在一个量子文件大小区域内,为了提高NandFlash的操作效率,不会立即触发实质性的NandFlash写。但之后一定时间内(设置为2秒),没有进一步的写操作,新API的后备线程会自动把应用程序写入的数据实质性写入NandFlash的对应量子文件中。因此这里存在,在实质性写入发生之前,系统由于某种情况出现重启(Power Cycling),应用程序写入的数据就会丢失的情况。这是为避免致命性错误,应用程序需付出的代价。

更极端的情况,当正在实质性写某一量子文件时,系统出现Power Cycling,还可能存在该量子文件被破坏的情况。但这种情况在常规写中同样存在,且被破坏的还是整个文件。因此新API是Power Cycling对整个数据的损坏度是降低了的。

更重要的是,在系统进入稳定运行后,量子文件的数目瞬间不会有大的变化,甚至完全没有变化(配置文件情形,或日志文件达到应用程序设置的上限),这样新的API对FAT文件系统的FAT表、目录区的负载会降到最低,从而大大避免FAT文件系统的关键区域被Power Cycling破坏的可能性。这是新API规避FAT文件系统缺陷的关键所在。

新API的定义包含在“LogFile.h”头文件中,具体实现代码则在“LogFile.cpp”中,对客户应用程序,只需简单的把LogFile.cpp加入到应用程序中,并在相关的cpp文件中include头文件LogFile.h,就可方便的测试评估该方法了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    40

    文章

    3430

    浏览量

    128221
收藏 人收藏

    评论

    相关推荐

    CubeMx可以生成FAT32的文件系统吗?

    大家好!MCU型号:STM32L476R 我测试发现 CubeMX 生成的文件系统FAT16 的。请教一下,CubeMx 可以生成 FAT32 的文件系统吗?
    发表于 04-19 07:11

    FAT32文件系统详细分析 (格式化SD nand/SD卡)

    在上一篇文章,我们已经对FAT文件系统有了一个详细的介绍,但由于FAT文件系统由历史发展,存在FAT
    发表于 11-03 17:55

    如何把文件系统烧到EMMC并从EMMC加载

    如何下载并从SD卡加载文件系统,提到过可以从EMMC引导系统,本篇将为您介绍如何把文件系统烧到EMMC,并从EMMC加载。
    的头像 发表于 10-30 16:06 1418次阅读
    如何把<b class='flag-5'>文件系统</b>烧到EMMC并从EMMC加载

    FAT32文件系统详细分析 (格式化SD nand/SD卡)

    文章目录FAT32文件系统详细分析(续FAT文件系统详解)1.前言2.格式化SDnand/SD卡3.FAT32
    的头像 发表于 10-18 17:12 794次阅读
    <b class='flag-5'>FAT</b>32<b class='flag-5'>文件系统</b>详细分析 (格式化SD nand/SD卡)

    FAT32文件系统详细分析 (格式化SD nand/SD卡)

    在上一篇文章,我们已经对FAT文件系统有了一个详细的介绍,但由于FAT文件系统由历史发展,存在FAT
    发表于 10-18 16:58

    分布式文件系统的设计原理是什么?

    什么是分布式文件系统?分布式文件系统(DFS)是一种计算机文件系统,使用户能够从多个分布式位置存储和访问数据。它是在分布式环境中的不同计算机之间共享信息的一种方式。通过使用分布式
    的头像 发表于 10-17 17:35 410次阅读

    FATFS文件系统有读取文件日期信息的函数吗?

    FATFS文件系统,有读取文件日期信息的函数吗?
    发表于 10-16 06:01

    FAT16文件系统有什么缺点?

    FAT16文件系统有什么缺点
    发表于 10-09 07:27

    嵌入式文件系统znFAT介绍

    今天给大家介绍一款适用于单片机的嵌入式文件系统——znFAT。 这款文件系统由嵌入式大佬于振南开发,并在 gitee 开源共享的。
    发表于 09-13 09:22 769次阅读
    嵌入式<b class='flag-5'>文件系统</b>znFAT<b class='flag-5'>介绍</b>

    FATFS文件系统详解:关于SD卡、SD nand、spi nor flash等众多存储设备

    文章目录FATFS文件系统详解1.简介2.基础概念3.FAT文件系统组成介绍4.FAT文件系统
    的头像 发表于 09-07 17:58 980次阅读
    FATFS<b class='flag-5'>文件系统</b>详解:关于SD卡、SD nand、spi nor flash等众多存储设备

    如何通过SPI界面进入SD卡上的FAT文件系统

    : Nutiny-EVB-M451-LQFP100 V1.3 此样本代码通过 SPI 界面进入SD卡上的 FAT 文件系统, 并演示如何读写数据到SD卡上的文档 。 您可以在下列时间下载样本代码http://www.nuvot
    发表于 08-30 06:45

    存储卡的文件系统区别

    FAT16(File Allocation Table 16):FAT16是比较传统的文件系统,最早用于DOS操作系统。它支持最大2GB的存储容量,
    的头像 发表于 08-08 14:24 1284次阅读
    存储卡的<b class='flag-5'>文件系统</b>区别

    Linux proc文件系统详解

    上一篇:《文件系统有很多,但这几个最为重要》介绍了procfs(进程文件系统的缩写),包含一个伪文件系统(启动时动态生成的文件系统),用于通
    发表于 06-15 11:42 778次阅读

    FAT文件系统(2)#操作系统

    文件系统
    学习硬声知识
    发布于 :2023年05月25日 17:02:20

    FAT文件系统(1)#操作系统

    文件系统
    学习硬声知识
    发布于 :2023年05月25日 17:01:49