CN101241469A - 一种在嵌入式系统中存储、读取数据的方法及装置 - Google Patents
一种在嵌入式系统中存储、读取数据的方法及装置 Download PDFInfo
- Publication number
- CN101241469A CN101241469A CNA2007100004233A CN200710000423A CN101241469A CN 101241469 A CN101241469 A CN 101241469A CN A2007100004233 A CNA2007100004233 A CN A2007100004233A CN 200710000423 A CN200710000423 A CN 200710000423A CN 101241469 A CN101241469 A CN 101241469A
- Authority
- CN
- China
- Prior art keywords
- data
- storage
- sector
- embedded chip
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种在嵌入式系统中存储、读取数据的方法,用以解决现有嵌入式系统中芯片存储和查询性能以及使用寿命较低的问题;在存储数据时获取待存储的数据及其有效记录数、擦写频率和每条记录的大小,并根据所述有效记录数和擦写频率分别确定嵌入式芯片为所述数据需要提供的扇区数目,并按其中最大的扇区数目在所述嵌入式芯片中分配存储空间,以及将所述数据存储到所述存储空间并在数据跟踪结构表中记录存储位置;在读取数据时,通过跟踪数据记录的数据跟踪结构表确定数据名称对应的数据存储在嵌入式芯片中的位置,并在所述嵌入式芯片中的所述存储位置读取数据;采用本发明方法可以提高嵌入式芯片的存储和查询性能。
Description
技术领域
本发明涉及计算机领域,特别涉及一种在嵌入式系统中存储、读取数据的方法及装置。
背景技术
随着处理器芯片的发展,嵌入式系统的功能越来越强大,因此对存储器的稳定性和可重复擦写的要求也越来越高;现有嵌入式系统中的存储芯片,如串行外设接口存储(SPI flash,Serial Peripheral Interface Flash)芯片具有体积小、容量大、功耗低和硬件接口简单等特点,该存储芯片支持页擦写和块擦写功能,每块区域支持100000次擦写(部分Flash芯片支持更多擦写次数),使用寿命为十年左右;但是由于部分嵌入式系统需要在一分钟内多次擦写Flash的同一块存储区域,虽然该存储芯片的最大擦写次数为十万次,但也可能会在短时间内损坏从而破坏嵌入式设备的正常工作;另外,部分嵌入式系统使用文件系统用来记录数据的存储状态以方便数据查询,但是现有的文件系统对于数据的存储并没有采用任何放置多次重复擦写的存储策略,因此现有嵌入式系统中芯片的存储稳定性具有很大的隐患。
发明内容
本发明提供一种在嵌入式系统中存储、读取数据的方法,用于提高嵌入式芯片的存储性能和查询性能以及延长嵌入式芯片的使用时间。
本发明提供如下技术方案:
一种在嵌入式系统中存储数据的方法,包括步骤:
获取待存储的数据及其有效记录数、擦写频率和每条记录的大小;
根据所述有效记录数和擦写频率分别确定所述数据需要占用的存储空间大小,进一步根据所述存储空间大小分别确定嵌入式芯片需要提供的扇区数目,并按其中最大的扇区数目在所述嵌入式芯片中分配存储空间;以及
将所述数据存储到所述存储空间并在数据跟踪结构表中记录存储位置。
从数据存储队列中获取待存储的数据,其中,在系统上电时创建所述数据存储队列。
当待存储的数据大小大于所述数据存储队列所能装载的最大数据大小时,动态增加所述数据存储队列的空间,并在数据写入所述嵌入式芯片后释放所述数据存储队列增加的空间。
在所述嵌入式芯片初次运行时创建数据跟踪结构表。
所述数据跟踪结构表中包括数据的静态属性信息和动态存储信息,其中,所述静态属性信息保存在所述嵌入式芯片中,所述动态存储信息在嵌入式设备运行后保存在系统内存中。
系统每次复位后从所述嵌入式芯片中获取不同数据对应的静态属性信息,并根据该静态属性信息初始化所述数据跟踪结构表中的动态存储信息。
所述静态属性信息包括数据名称、需要的扇区总数、需要存储的最大记录数目、每条记录的大小和扇区映射表。
所述扇区映射表包括扇区逻辑编号、扇区物理编号和校验码。
所述动态存储信息包括所述数据在所述嵌入式芯片中的当前写入位置、当前读取位置和当前存储扇区使用的状态信息。
在所述嵌入式芯片的扇区发生损坏时,分配相应的空闲扇区代替损坏的扇区,并将所述损坏的扇区和所述空闲扇区的信息分别记录到所述数据跟踪结构中。
一种在嵌入式系统中读取数据的方法,包括步骤:
根据查询数据的请求获取待查询数据的数据名称;
在记录数据存储位置的数据跟踪结构表中确定所述数据名称对应的数据存储在嵌入式芯片中的存储位置;
在所述嵌入式芯片中的所述存储位置读取数据。
所述数据跟踪结构表中包括数据的静态属性信息和动态存储信息,其中,所述静态属性信息保存在所述嵌入式芯片中,所述动态存储信息在嵌入式设备运行后保存在系统内存中。
所述静态属性信息包括数据名称、需要的扇区总数、需要存储的最大记录数目、每条记录的大小和扇区映射表。
所述扇区映射表包括扇区逻辑编号、扇区物理编号和校验码。
所述动态存储信息包括所述数据在所述嵌入式芯片中的当前写入位置、当前读取位置和当前存储扇区使用的状态信息。
一种数据管理装置,包括:
用于根据有效记录数和擦写频率分别确定所述数据需要占用的存储空间大小,进一步根据所述存储空间大小分别确定嵌入式芯片需要提供的扇区数目,并按其中最大的扇区数目在所述嵌入式芯片中分配存储空间的单元;
用于将所述数据存储到所述存储空间并在数据跟踪结构表中记录存储位置的单元;
用于在记录数据存储位置的数据跟踪结构表中确定所述数据名称对应的数据存储在嵌入式芯片中的存储位置的单元;
用于在所述嵌入式芯片中的所述存储位置读取数据的单元。
一种嵌入式系统,包括:
嵌入式芯片,用于存储数据;
数据管理模块,用于向所述嵌入式芯片存储数据或查询数据,根据数据的有效记录数和擦写频率分别确定嵌入式芯片需要提供的扇区数目,按其中最大的扇区数目在所述嵌入式芯片中分配存储空间,并将数据存储到所述存储空间后在数据跟踪结构表中记录存储位置,以及根据所述数据跟踪结构表中数据记录的存储位置读取数据。
所述数据管理模块包括:
用于根据有效记录数和擦写频率分别确定所述数据需要占用的存储空间大小,进一步根据所述存储空间大小分别确定嵌入式芯片需要提供的扇区数目,并按其中最大的扇区数目在所述嵌入式芯片中分配存储空间的单元;
用于将所述数据存储到所述存储空间并在数据跟踪结构表中记录存储位置的单元;
用于在记录数据存储位置的数据跟踪结构表中确定所述数据名称对应的数据存储在嵌入式芯片中的存储位置的单元;
用于在所述嵌入式芯片中的所述存储位置读取数据的单元。
本发明有益效果如下:
本发明中按照最大的扇区需求为数据分配存储空间,提高了嵌入式芯片的存储性能,也减少了嵌入式芯片固定区域被反复擦写的概率,因此延长了嵌入式芯片的使用时间;本发明中将存储在嵌入式芯片中的数据的存储信息记录在数据跟踪结构表中,根据所述存储信息可以方便地向嵌入式芯片实现数据的查询,提高了嵌入式系统的数据查询效率。
附图说明
图1为本发明实施例中一种嵌入式系统结构示意图;
图2A为本发明实施例中写入模块结构示意图;
图2B为本发明实施例中读取模块结构示意图;
图3为本发明实施例中在嵌入式系统中存储数据的主要实现流程图;
图4为本发明实施例中初始化数据跟踪结构表和数据存储队列的实现流程图;
图5为本发明实施例中循环向嵌入式芯片存储数据的具体实现流程图;
图6为本发明实施例中数据在嵌入式芯片中的存储结构示意图;
图7为本发明实施例中在嵌入式系统中读取数据的主要实现流程图。
具体实施方式
本实施例中将待存储的数据分配多于实际需求量的存储空间,在保证数据不丢失和嵌入式芯片存储空间足够的前提下,尽可能的为需要存储的数据分配多一些的存储空间,使得数据能够均匀的分散存储在嵌入式芯片的各个扇区中,另外,为了更好的管理存储在嵌入式芯片中的数据,本实施例将数据在芯片中的存储信息记录在数据跟踪结构表中,通过该数据跟踪结构表跟踪数据存储在嵌入式芯片中的扇区位置,并从所述扇区的相应位置读取数据。
本实施例中一种嵌入式系统结构如图1所示,该系统包括应用模块10、数据管理模块11和嵌入式芯片12;所述数据管理模块11根据所述应用模块10输出的待处理的数据以及处理该数据的请求向所述嵌入式芯片12存储数据或查询数据。
所述应用模块10包括配置管理单元100、数据核心单元101和数据交互单元102;所述配置管理单元100用于描述应用程序的配置信息(如信号名称、信号单位和信号比例等信息);所述数据核心单元101用于处理采集到的数据,并向所述数据管理模块11输出所述数据并请求处理所述数据;所述数据交互单元102用于与其他应用模块(如协议模块)进行数据交互,并记录交互过程中的相关信息。
所述数据管理模块11用于通过数据跟踪结构表和数据存储队列管理存储的数据,并根据应用模块10的请求在嵌入式芯片中对获取的待处理的数据执行相应的操作;包括数据交互接口110用于提供应用模块10与数据管理模块11之间进行数据交互的接口;数据跟踪模块113用于存储记录数据存储信息的数据跟踪结构表;写入模块111用于将应用模块10传入的数据存储到嵌入式芯片12中,并更新数据跟踪结构表和数据存储队列;读取模块112用于响应应用模块10的读取请求,根据数据跟踪结构表获取相应数据在嵌入式芯片12中的存储位置,并在该存储位置将数据读出后传送给应用模块10;服务模块114用于监测和管理嵌入式芯片12的扇区使用情况,当某一扇区损坏时利用芯片中的一个剩余扇区代替,当没有空闲扇区存储数据时擦除一个扇区以供存储数据,当芯片没有扇区可以使用时,向应用模块10通知嵌入式芯片12损坏。
如图2A所示,所述写入模块111进一步包括:
缓冲单元1110,用于通过数据存储队列存储应用模块10输出的待处理的数据及其相关属性信息。
扇区数目确定单元1111,用于根据所述数据的属性信息和嵌入式芯片12的属性信息确定所述数据在所述嵌入式芯片12中需要的扇区数目。例如,根据所述数据的属性信息中的的有效记录数、每条记录的大小和嵌入式芯片12的属性信息中的每个扇区大小确定所述数据需要的扇区数目,以及根据所述数据的属性信息中的数据擦写频率、每条记录的大小和嵌入式芯片12的属性信息中的每个扇区大小、最大可擦除次数和最短使用寿命确定所述数据需要的扇区数目,并将其中最大的扇区数目确定为所述数据在所述嵌入式芯片12中需要的扇区数目。
写入单元1112,用于根据扇区数目确定单元1111确定的扇区数目在所述嵌入式芯片12中分配存储空间,并将所述存储单元1110中数据存储队列中的数据存储到所述存储空间。
更新单元1113,用于根据数据的存储信息更新数据跟踪结构表以及数据存储队列。
如图2B所示,所述读取模块112进一步包括:
缓冲单元1120,用于接收应用模块10发送的查询数据的请求并存储请求中携带的数据名称,所述数据名称可以是一个字符串名称。
扇区位置确定单元1121,用于根据数据跟踪模块113中的数据跟踪结构表确定所述数据名称对应的数据存储在嵌入式芯片12中的存储位置。
读取单元1122,用于在嵌入式芯片12中的所述存储位置读取数据。
更新单元1123,用于在数据读取后更新数据跟踪结构表,如记录数据读取的开始位置、当前位置、或者在某一扇区多次读取失败时记录该扇区损坏,不能进行数据读取等。
所述数据管理模块11在系统初次运行时在嵌入式芯片12中的静态数据存储扇区中创建数据跟踪结构表中各种数据对应的静态属性信息(即固有属性信息),该信息一直保存在芯片中;在系统运行后将数据跟踪结构表中各种数据的动态存储信息保存在系统内存中;在系统每次复位后数据管理模块11首先读取静态属性信息,然后根据该静态属性信息初始化数据跟踪结构表中各种数据对应的动态存储信息(即数据在芯片中的存储信息)。
所述数据跟踪结构表描述了在芯片中存储的数据的静态属性信息和动态存储信息,通过该数据跟踪结构表可以方便容易的查询到存储在芯片中的数据;该数据跟踪结构表可以衍生出更多的信息,用来描述所有数据在芯片中的存储特征;因为SPI Flash芯片有它的独特性,一个扇区里的数据是不能局部擦除的,而是必须以整个扇区为单元擦除,因此采用追加记录的方式记录数据,即在数据跟踪结构表的结尾增加一条数据实现数据的更改。数据跟踪结构表中的静态属性信息包括数据名称、需要的扇区总数、需要存储的最大记录数目、每条记录的大小和扇区映射表;动态存储信息包括所述数据在所述嵌入式芯片中的当前写入位置、当前读取位置和当前存储扇区使用的状态信息等;所述数据跟踪结构的信息描述如下:
typedef struct tagRecordSetTrack
{
char DataName[LEN_DATA_NAME]; /*数据名称长度*/
BYTE byTotalSectors; /*总的扇区数*/
Unsigned short iMaxRecords;/*需要保存的最大纪录数*/
int iRecordSize; /*每条记录的字节数*/
//擦除扇区预处理需要变量
ERASE_SECTOR_PRE_PROC pfn_preProcess; /*擦扇区预处理函数*/
HANDLE hPreProcess; /*擦扇区句柄*/
void Params; /*擦扇区输入参数*/
//读记录的开始记录号跟踪变量
int iStartRecordNo; /*跟踪开始读记录的记录号*/
BOOL bSectorEffect; /*判断当前扇区是否可用,不可用置0*/
int iDataRecordIDIndex; /*不同的数据在Flash静态存储的记录标识*/
int iMaxRecordsPerSector;/*每扇区能够保存当前记录的最大条数*/
BYTE byCurrSectorNo; /*当前读或者写的逻辑扇区号*/
BYTE byNewSectorFlag; /*当前记录数目小于最大记录数目/
int iWritableRecords; /*当前扇区还能写入的记录数*/
int iCurrWritePos; /*当前扇区中可写入记录的位置*/
int iCurrReadPos; /*当前读扇区中的读位置号*/
int iCurrRecordID; /*当前写入记录的顺序编号索引*/
SECTOR_MAP_TABLE *pbyPhysicsSectorNo;
/*SECTOR_MAP_TABLE[byTotalSectors]*/
//用来处理非连续查询记录时候,恢复原来跟踪信息用
BYTE byOldCurrSectorNo; /*用于保存当前写扇区的扇区号*/
}RECORD_SET_TRACK;
所述数据跟踪结构表中存储在嵌入式芯片中的静态属性信息具体格式如表1所示:
数据记录标识索引 | 数据名称 | 最大记录条数 | 每条记录大小 | 总扇区数 | 校验码 | 扇区映射表*64 |
表1
其中,扇区映射表的具体格式如表2所示:
扇区逻辑编号 | 扇区物理编号 | 校验码 |
表2
由于应用模块10可能会在较短的时间内要求存储多条数据,而嵌入式芯片12的数据读写需要处理时间,所以会出现上层软件需要记录而底层硬件(即嵌入式芯片12)却没有准备好的情况,从而导致数据的丢失。为解决上述问题,本实施例中所述数据管理模块11在系统每次上电时创建数据存储队列,并将其保存在内存中,通过读取记录在芯片上的静态属性信息对其进行初始化,所述数据存储队列用于存放应用模块10需要存储的数据,主要内容有记录索引号、数据长度、数据条数和数据本体等,当队列中的数据存储到嵌入式芯片中后,写入模块会自动在写入的数据后写入校验码,并重新读取一次,校验所写入的数据的校验码是否正确,以保证数据写入的正确性。当待写入的数据大小大于数据存储队列所能装载的最大数据大小时,数据管理模块11则动态增加数据存储队列的空间以存储多余的待写入数据,在数据写入嵌入式芯片12后,数据管理模块11将数据存储队列存储所述数据的空间释放。所述数据存储队列可以通过如下代码创建:
typedef struct tagHISDATAQUEUE
{
int iDataRecordIDIndex;
BYTE bIsAlarm;
int iHead;
int iLength;
int iRecordSize;
int iMaxSize;
void *pHisData;
}HISDATA_QUEUE;
如图3所示,本实施例中在嵌入式系统中存储数据的主要实现过程如下:
步骤300、获取待存储的数据及其有效记录数、擦写记录和每条记录的大小。
步骤301、根据所述有效记录数和擦写频率分别确定所述数据需要占用的存储空间大小,进一步根据所述存储空间大小分别确定嵌入式芯片需要提供的扇区数目。
步骤302、按其中最大的扇区数目在所述嵌入式芯片中分配存储空间。
步骤303、将所述数据存储到所述存储空间并在数据跟踪结构表中记录存储位置。
如图4所示,对数据跟踪结构表和数据存储队列进行初始化的实现过程如下:
步骤400、读取嵌入式芯片中数据的静态属性信息。
步骤401、判断静态属性信息中数据类型索引是否存在,如果存在,则执行步骤402;否则,执行步骤404。
步骤402、判断数据类型索引是否读取成功,如果是,则执行步骤403;否则,结束流程。
步骤403、获取历史数据状态。
步骤404、创建数据存储队列。
步骤405、初始化数据存储队列。
在步骤301中,规划待存储数据的资源分配时,嵌入式芯片中为待存储的数据分配扇区个数越多,在同一区域被擦写的次数相应越少,但是扇区数目的增加也会系统更多的查询时间,因此待存储数据在芯片中存储空间的占用需要综合考虑,本实施例中提供了一种计算数据需要的扇区数目的算法,根据待存储数据的相关信息(如有效记录数、每条记录大小和数据记录的频度等)和嵌入式芯片的物理属性信息(如扇区最大可擦除次数、每个扇区大小和最小使用寿命等)计算数据在嵌入式芯片中所需要的扇区数目,如表3所示为待存储数据的相关信息和嵌入式芯片的物理属性信息:
变量名 | 名称 | 值 | 单位 | 描述 |
NMSEC | 最大可擦除次数 | 100000 | Time | |
NFSS | 每个扇区大小 | 64 | KByte | |
TMTBF | 最短使用寿命 | 10 | Year | |
NTDR | 有效记录数 | 400 | Records | 需要保持的有效记录数 |
NDRS | 每条记录大小 | 20 | Byte | |
FDRF | 数据记录的频度 | 86400 | 条/天 | 每天可能写入记录数 |
NSAET | 每年允许扇区可擦除次数 | 10000 | times | =NMSEC/TMTBF |
NTBPY | 每年记录总的数据量 | 615938 | KByte | =NDRS*FDRF*365/1024 |
NTSPY | 年使用扇区数 | 9624.02 | Sector | =NTBPY/NFSS |
NMSN1 | 需要用的最小扇区数 | 1 | Sector | =ROUNDUP(NTSPY/NSAET) |
NMSN2 | 实际最小扇区数 | 2 | Sector | =ROUNDUP(NTDR*NDRS/NFSS)+1 |
NMSN | 应该选择的扇区数 | 2 | Sector | =MAX(NMSN1,NMSN2) |
表3
通过如下公式计算出待存储数据在芯片中需要的存储空间:
NMSN=MAX(NMSN1,NMSN2)
=MAX(ROUNDUP(NTSPY/NSAET,0),ROUNDUP(NTDR*NDRS/NFSS,0)+1)
=MAX(ROUNDUP((NTBPY/NFSS)/(NMSEC/TMTBF),0),
ROUNDUP(NTDR*(NDRS+6)/NFSS,0)+1)
=MAX(ROUNDUP(((NDRS+6)*FDRF*365/1024/NFSS)/(NMSEC/TMTBF),0),
ROUNDUP(NTDR*(NDRS+6)/NFSS,0)+1) (1)
其中,
ROUNDUP(((NDRS+6)*FDRF*365/1024/NFSS)/(NMSEC/TMTBF),0)为根据扇区最大擦写次数所确定的需要的扇区数目;
ROUNDUP(NTDR*(NDRS+6)/NFSS,0)+1为根据需要存储的最大记录数目确定的需要的扇区数;
NDRS+6表示每条记录实际存储大小,数据记录标识iCurrRecordID大小为4个字节,校验码CheckNo大小为2个字节。
在步骤302中,假设需要存储9种数据,根据该9种数据的存储时间间隔、数据大小和存储记录数按上述公式(1)分别计算数据对应需要的存储空间,如表4所示为该9种数据的存储空间分配表:
区域编号 | 数据名称 | 记录大小(字节) | 最大记录条数 | 大小(比特) |
Sect_Area2_1 | 静态数据,扇区映射记录 | 217 | 50 | 2×64k |
Sect_Area2_2 | 历史数据 | 30 | 6000 | 2×64k |
Sect_Area2_3 | 历史告警 | 30 | 400 | 2×64k |
Sect_Area2_4 | 统计数据 | 46 | 1000 | 2×64k |
Sect_Area2_5 | 蓄电池测试记录 | 51 | 10*18*80 | 11×64k |
Sect_Area2_6 | 控制命令 | 30 | 600 | 2×64k |
Sect_Area2_7 | 系统运行日志 | 148 | 300 | 2×64k |
Sect_Area2_8 | 用户信息 | 58 | 16 | 2×64k |
Sect_Area2_9 | 活动告警 | 16 | 500 | 2×64k |
1728k |
表4
在步骤303中,数据管理模块循环向嵌入式芯片存储数据,其具体实现过程如图5所示,包括如下步骤:
步骤500、判断数据存储队列中是否存在需要存储的数据,如果存在,则执行步骤501;否则,执行步骤507。
步骤501、判断待存储数据大小是否小于嵌入式芯片的剩余存储空间,如果是,则执行步骤502;否则,执行步骤503。
步骤502、将待存储数据存储到嵌入式芯片。
步骤503、将待存储的部分数据存储到嵌入式芯片的剩余存储空间。
步骤504、更新数据跟踪结构表和数据存储队列。
步骤505、判断数据是否已经存储完毕,如果是,则执行步骤507;否则,执行步骤506。
步骤506、获取嵌入式芯片新的存储空间,并将待存储的剩余数据存储到该新的存储空间。
步骤507、判断应用模块是否需要退出写入操作,如果是,则执行步骤508;否则,返回步骤500。
步骤508、释放数据存储队列指针对应的内存资源。
数据在嵌入式芯片中的存储格式如图6所示,在每个数据记录中,由扇区映射表记录数据的存储位置,所述扇区映射表的格式如下:
[逻辑扇区ID1,物理扇区ID1,检验码1][逻辑扇区ID2,物理扇区ID2,校验码2]...[逻辑扇区IDN,物理扇区IDN,校验码N]
逻辑扇区ID从1到N,N为本数据文件需要的实际扇区数,物理扇区ID为实际分配给该数据的物理扇区号;每种数据分配为64个扇区映射记录空间(因为历史数据最多为64个扇区)。初始化时,扇区映射表只有N项,如下所示:
数据1(N=5):[1,1][2,2][3,3][4,4][5,5]
数据2(N=2):[1,6][2,7]
数据3(N=6):[1,8][2,9][3,10][4,11][5,12][5,13][4,15]
在每次擦除扇区后,服务模块需要检验扇区的好坏,即如果发现一个扇区IDi损坏,则找一个剩余扇区IDm替代,并在扇区映射表后增加一项:[逻辑扇区IDi,物理扇区IDm,检验码i],则扇区映射表为:[逻辑扇区ID1,物理扇区ID1,校验码1][逻辑扇区ID2,物理扇区ID2,校验码2]...[逻辑扇区IDn,物理扇区IDn,校验码n][逻辑扇区IDi,物理扇区IDm,校验码i]
假设上述数据1的第2个扇区损坏,则用第14个扇区替代,此时有:
数据1(N=5):[1,1][2,2][3,3][4,4][5,5][2,14]
假设上述数据3的第4个扇区损坏,则用第15个扇区替代,此时有:
数据3(N=6):[1,8][2,9][3,10][4,11][5,12][5,13][4,15]
使用一段时间后,如果数据1的第3个扇区损坏,则用第16个扇区替代,此时有:
数据1(N=5):[1,1][2,2][3,3][4,4][5,5][2,14][3,16]
如果没有空闲扇区可以使用时,服务模块向应用模块报告嵌入式芯片错误,要求维修。
在嵌入式芯片中存储数据的过程中,采用数组方式来存储每种数据的扇区映射表,所述数组可以采用BYTE*pbyPhysicalSector=NEW BYTE[N],依次将扇区映射表中的各项数据读入到该数组中,在芯片扇区读写数据时按照逻辑扇区操作,在pbyPhysicalSector中得到物理扇区号;如将数据1的扇区映射表中的[3,3]读入到数组中,此时有pbyPhysicalSectors[3]=3;将数据1的扇区映射表中的[3,16]读入到数组中,此时有pbyPhysicalSector[3]=16。
如图7所示,本实施例中在嵌入式系统中读取数据的主要实现流程如下:
步骤700、根据查询数据的请求获取待查询数据的数据名称。
步骤701、在记录数据存储位置的数据跟踪结构表中确定所述数据名称对应的数据存储在嵌入式芯片中的存储位置。
步骤702、在所述嵌入式芯片中的所述存储位置读取数据。
本实施例中芯片为待存储数据分配存储空间时,确定需要提供的存储空间的方法以及将数据在芯片中的存储信息记录到数据跟踪结构表,通过该数据跟踪结构表管理和维护数据的存储信息,进一步在芯片中的相应存储位置读取数据,本发明技术方案的实现方法不仅适用于Serial Peripheral Interface Flash芯片,还适用于其他存储芯片。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (18)
1. 一种在嵌入式系统中存储数据的方法,其特征在于,包括步骤:
获取待存储的数据及其有效记录数、擦写频率和每条记录的大小;
根据所述有效记录数和擦写频率分别确定所述数据需要占用的存储空间大小,进一步根据所述存储空间大小分别确定嵌入式芯片需要提供的扇区数目,并按其中最大的扇区数目在所述嵌入式芯片中分配存储空间;以及
将所述数据存储到所述存储空间并在数据跟踪结构表中记录存储位置。
2. 如权利要求1所述的方法,其特征在于,从数据存储队列中获取待存储的数据,其中,在系统上电时创建所述数据存储队列。
3. 如权利要求2所述的方法,其特征在于,当待存储的数据大小大于所述数据存储队列所能装载的最大数据大小时,动态增加所述数据存储队列的空间,并在数据写入所述嵌入式芯片后释放所述数据存储队列增加的空间。
4. 如权利要求1、2或3所述的方法,其特征在于,在所述嵌入式芯片初次运行时创建数据跟踪结构表。
5. 如权利要求4所述的方法,其特征在于,所述数据跟踪结构表中包括数据的静态属性信息和动态存储信息,其中,所述静态属性信息保存在所述嵌入式芯片中,所述动态存储信息在嵌入式设备运行后保存在系统内存中。
6. 如权利要求5所述的方法,其特征在于,系统每次复位后从所述嵌入式芯片中获取不同数据对应的静态属性信息,并根据该静态属性信息初始化所述数据跟踪结构表中的动态存储信息。
7. 如权利要求6所述的方法,其特征在于,所述静态属性信息包括数据名称、需要的扇区总数、需要存储的最大记录数目、每条记录的大小和扇区映射表。
8. 如权利要求7所述的方法,其特征在于,所述扇区映射表包括扇区逻辑编号、扇区物理编号和校验码。
9. 如权利要求6所述的方法,其特征在于,所述动态存储信息包括所述数据在所述嵌入式芯片中的当前写入位置、当前读取位置和当前存储扇区使用的状态信息。
10. 如权利要求1所述的方法,其特征在于,在所述嵌入式芯片的扇区发生损坏时,分配相应的空闲扇区代替损坏的扇区,并将所述损坏的扇区和所述空闲扇区的信息分别记录到所述数据跟踪结构中。
11. 一种在嵌入式系统中读取数据的方法,其特征在于,包括步骤:
根据查询数据的请求获取待查询数据的数据名称;
在记录数据存储位置的数据跟踪结构表中确定所述数据名称对应的数据存储在嵌入式芯片中的存储位置;
在所述嵌入式芯片中的所述存储位置读取数据。
12. 如权利要求11所述的方法,其特征在于,所述数据跟踪结构表中包括数据的静态属性信息和动态存储信息,其中,所述静态属性信息保存在所述嵌入式芯片中,所述动态存储信息在嵌入式设备运行后保存在系统内存中。
13. 如权利要求12所述的方法,其特征在于,所述静态属性信息包括数据名称、需要的扇区总数、需要存储的最大记录数目、每条记录的大小和扇区映射表。
14. 如权利要求13所述的方法,其特征在于,所述扇区映射表包括扇区逻辑编号、扇区物理编号和校验码。
15. 如权利要求12所述的方法,其特征在于,所述动态存储信息包括所述数据在所述嵌入式芯片中的当前写入位置、当前读取位置和当前存储扇区使用的状态信息。
16. 一种数据管理装置,其特征在于,包括:
用于根据有效记录数和擦写频率分别确定所述数据需要占用的存储空间大小,进一步根据所述存储空间大小分别确定嵌入式芯片需要提供的扇区数目,并按其中最大的扇区数目在所述嵌入式芯片中分配存储空间的单元;
用于将所述数据存储到所述存储空间并在数据跟踪结构表中记录存储位置的单元;
用于在记录数据存储位置的数据跟踪结构表中确定所述数据名称对应的数据存储在嵌入式芯片中的存储位置的单元;
用于在所述嵌入式芯片中的所述存储位置读取数据的单元。
17. 一种嵌入式系统,其特征在于,包括:
嵌入式芯片,用于存储数据;
数据管理模块,用于向所述嵌入式芯片存储数据或查询数据,根据数据的有效记录数和擦写频率分别确定嵌入式芯片需要提供的扇区数目,按其中最大的扇区数目在所述嵌入式芯片中分配存储空间,并将数据存储到所述存储空间后在数据跟踪结构表中记录存储位置,以及根据所述数据跟踪结构表中数据记录的存储位置读取数据。
18. 如权利要求17所述的嵌入式系统,其特征在于,所述数据管理模块包括:
用于根据有效记录数和擦写频率分别确定所述数据需要占用的存储空间大小,进一步根据所述存储空间大小分别确定嵌入式芯片需要提供的扇区数目,并按其中最大的扇区数目在所述嵌入式芯片中分配存储空间的单元;
用于将所述数据存储到所述存储空间并在数据跟踪结构表中记录存储位置的单元;
用于在记录数据存储位置的数据跟踪结构表中确定所述数据名称对应的数据存储在嵌入式芯片中的存储位置的单元;
用于在所述嵌入式芯片中的所述存储位置读取数据的单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100004233A CN101241469B (zh) | 2007-02-05 | 2007-02-05 | 一种在嵌入式系统中存储、读取数据的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100004233A CN101241469B (zh) | 2007-02-05 | 2007-02-05 | 一种在嵌入式系统中存储、读取数据的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101241469A true CN101241469A (zh) | 2008-08-13 |
CN101241469B CN101241469B (zh) | 2012-05-02 |
Family
ID=39933011
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007100004233A Active CN101241469B (zh) | 2007-02-05 | 2007-02-05 | 一种在嵌入式系统中存储、读取数据的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101241469B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101957799B (zh) * | 2009-07-16 | 2012-07-04 | 群联电子股份有限公司 | 用于闪速存储器的数据写入方法及其控制电路与存储系统 |
CN104331421A (zh) * | 2014-10-14 | 2015-02-04 | 安徽四创电子股份有限公司 | 一种大数据的高效处理方法及系统 |
CN107908364A (zh) * | 2017-11-13 | 2018-04-13 | 中国电子科技集团公司第三十研究所 | 一种基于norflash的嵌入式文件系统 |
CN111143240A (zh) * | 2019-12-31 | 2020-05-12 | 科华恒盛股份有限公司 | 图像存储方法、系统及终端设备 |
CN111741246A (zh) * | 2020-06-12 | 2020-10-02 | 浪潮(北京)电子信息产业有限公司 | 一种视频存储方法、装置、soc系统、介质 |
CN112463051A (zh) * | 2020-11-26 | 2021-03-09 | 苏州精控能源科技有限公司 | 一种电池存储系统的管理方法及数据存储方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6055547A (en) * | 1997-12-30 | 2000-04-25 | Unisys Corporation | Shared file allocation and release |
CN1277213C (zh) * | 2004-12-31 | 2006-09-27 | 大唐微电子技术有限公司 | 一种闪存文件系统管理方法 |
-
2007
- 2007-02-05 CN CN2007100004233A patent/CN101241469B/zh active Active
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101957799B (zh) * | 2009-07-16 | 2012-07-04 | 群联电子股份有限公司 | 用于闪速存储器的数据写入方法及其控制电路与存储系统 |
CN104331421A (zh) * | 2014-10-14 | 2015-02-04 | 安徽四创电子股份有限公司 | 一种大数据的高效处理方法及系统 |
CN107908364A (zh) * | 2017-11-13 | 2018-04-13 | 中国电子科技集团公司第三十研究所 | 一种基于norflash的嵌入式文件系统 |
CN107908364B (zh) * | 2017-11-13 | 2020-10-23 | 中国电子科技集团公司第三十研究所 | 一种基于norflash的嵌入式文件系统 |
CN111143240A (zh) * | 2019-12-31 | 2020-05-12 | 科华恒盛股份有限公司 | 图像存储方法、系统及终端设备 |
CN111143240B (zh) * | 2019-12-31 | 2022-07-05 | 科华恒盛股份有限公司 | 图像存储方法、系统及终端设备 |
CN111741246A (zh) * | 2020-06-12 | 2020-10-02 | 浪潮(北京)电子信息产业有限公司 | 一种视频存储方法、装置、soc系统、介质 |
WO2021248936A1 (zh) * | 2020-06-12 | 2021-12-16 | 浪潮(北京)电子信息产业有限公司 | 一种视频存储方法、装置、soc系统、介质 |
CN112463051A (zh) * | 2020-11-26 | 2021-03-09 | 苏州精控能源科技有限公司 | 一种电池存储系统的管理方法及数据存储方法 |
WO2022110603A1 (zh) * | 2020-11-26 | 2022-06-02 | 苏州精控能源科技有限公司 | 一种电池存储系统的管理方法及数据存储方法 |
CN112463051B (zh) * | 2020-11-26 | 2023-12-29 | 苏州精控能源科技股份有限公司 | 一种电池存储系统的管理方法及数据存储方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101241469B (zh) | 2012-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106548789B (zh) | 用于操作叠瓦式磁记录设备的方法和装置 | |
CN103577121B (zh) | 一种基于Nand Flash的高可靠线性文件存取方法 | |
CN100426259C (zh) | 一种存储器文件数据虚拟存取方法 | |
CN1307555C (zh) | 数据存储装置 | |
CN101271379B (zh) | 混合密度存储体储存装置及其控制方法 | |
CN101515276B (zh) | 一种文件数据写操作的方法、文件数据恢复方法及系统 | |
US8166233B2 (en) | Garbage collection for solid state disks | |
US8230160B2 (en) | Flash memory storage system and flash memory controller and data processing method thereof | |
CN103270500A (zh) | 事务日志恢复 | |
CN103150256B (zh) | 提高usb闪存写入性能的方法和器件 | |
CN100456264C (zh) | 一种磁盘空间管理方法及系统 | |
CN111026329B (zh) | 基于主机管理瓦记录磁盘的键值存储系统及数据处理方法 | |
CN101241469B (zh) | 一种在嵌入式系统中存储、读取数据的方法及装置 | |
CN102292712A (zh) | 逻辑地址偏移 | |
CN102135942A (zh) | 一种存储设备中实现损耗均衡的方法及存储设备 | |
CN103761190A (zh) | 数据处理方法及装置 | |
CN101908023A (zh) | NandFlash存储器中数据存储方法 | |
CN102053796A (zh) | 闪存储存系统、闪存控制器与数据处理方法 | |
CN101546294A (zh) | 一种Flash存储器的数据存储方法 | |
CN109144899A (zh) | 用于管理表恢复的方法 | |
CN104978154A (zh) | 一种基于缓存操作的flash快速读写方法及系统 | |
CN101582084A (zh) | 一种数据存储的方法及装置 | |
CN102200946B (zh) | 资料存取方法、记忆体控制器与储存系统 | |
Jung et al. | Fass: A flash-aware swap system | |
CN101859278B (zh) | 用于闪存的数据储存方法及储存系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: ohio Patentee after: Vitamin Corporation Address before: ohio Patentee before: Libot Inc. |
|
CP01 | Change in the name or title of a patent holder |