CN112596808A - 一种嵌入式系统的参数存储机制 - Google Patents
一种嵌入式系统的参数存储机制 Download PDFInfo
- Publication number
- CN112596808A CN112596808A CN202011481455.1A CN202011481455A CN112596808A CN 112596808 A CN112596808 A CN 112596808A CN 202011481455 A CN202011481455 A CN 202011481455A CN 112596808 A CN112596808 A CN 112596808A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- storage
- storage area
- writing
- 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.)
- Pending
Links
- 238000003860 storage Methods 0.000 title claims abstract description 190
- 230000007246 mechanism Effects 0.000 title claims abstract description 19
- 238000001914 filtration Methods 0.000 claims abstract description 4
- 238000013507 mapping Methods 0.000 claims abstract description 4
- 230000006870 function Effects 0.000 claims description 29
- 238000000034 method Methods 0.000 claims description 29
- 230000008569 process Effects 0.000 claims description 19
- 230000008859 change Effects 0.000 claims description 4
- 230000002457 bidirectional effect Effects 0.000 claims description 3
- 239000012634 fragment Substances 0.000 claims description 2
- 230000003252 repetitive effect Effects 0.000 claims 1
- 230000006399 behavior Effects 0.000 description 5
- 230000000903 blocking effect Effects 0.000 description 5
- 238000013524 data verification Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 3
- 239000011800 void material Substances 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002035 prolonged effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 238000012508 change request Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种嵌入式系统的参数存储机制,包括:抽象层接口,读写完整性,实时性能,重复写入过滤和缺省参数自动生成。根据权利书要求1所述的参数存储机制,其特征在于:1)将一组配置参数放置在一个地址连续的结构化内存块中,应用程序在读写配置参数的时候直接访问内存块中的成员变量,解决了实时性问题;2)在存储介质上指定两个地址不重叠的存储区域,通过一个带有CRC校验字段的控制头部,将内存块映射到存储介质上的两个存储区域;3)仅在系统初始化的时候从存储介质加载数据至内存块,系统主循环中仅执行内存块到存储介质的单向写入;4)数据写入以存储区域为单位,永远有一个存储区域处于备份状态,解决了可靠性问题。
Description
技术领域
本发明涉及一种嵌入式系统的配置参数存储机制,无需借助操作系统的实时调度功能即可解决少量配置参数的实时写入和数据完整性问题,主要用于没有操作系统的低端小型单片机系统的参数配置,属于嵌入式软件设计领域。
背景技术
在8051,MSP430和ARM等单片机嵌入式系统中,经常需要在运行的过程中保存一些用户通过串口,网络或者人机界面设定的配置参数。参数的正确写入非常关键,如果没有写入或者写入信息不完整将会给系统的运行带来不利的影响。嵌入式系统的板载存储介质比较常见的是 FRAM,E2PROM 和 Flash 这三种。第一种介质 FRAM 具有速度快,延迟小,可靠性高的优点,是一种非常理想的参数存储介质,但是其制作工艺复杂,容量比较小,成本比较高,性价比不高,仅用在某些关键业务中;大多数嵌入式系统仍然是采用比较廉价的E2PROM 和 Flash,特别是随着手机,数码相机等个人消费电子产品的高速发展,极大地普及了 Flash 存储介质的使用,从而显著地降低了 Flash存储介质的单位比特成本;而且Flash存储芯片大多使用 SPI 总线接口,带宽通常在几十Mbps,而E2PROM通常是采用I2C总线接口,带宽通常不超过 400Kbps,因此在很多实时性要求比较高的嵌入式系统中,Flash存储介质有逐步取代 E2PROM的趋势。但是在没有嵌入式操作系统的支持下,使用这两种存储介质会面临下述问题:
(1)这两种存储介质都存在写入忙的状态,Flash介质在写入之前还有一个必须的擦除的操作,其忙的时间通常为几十毫秒甚至上百毫秒,这对于实时性要求比较高的嵌入式系统比如无线电收发而言是不可接收的,超过1ms的系统卡顿就会导致报文接收失败;
(2)在写入参数的过程中,还可能会发生系统突然断电或者重新上电的行为,如果参数写入一半的过程中,恰好发生了系统复位或者重启等操作,数据的完整性就会遭到破坏,此时需要一种数据备份机制;
(3)在系统上电的过程中,由于电源抖动或者上电不稳,而此时处理器又已经完成了引导,进入参数加载阶段,有可能会导致参数加载错误,此时需要一种错误侦测机制和数据恢复手段;
(4)系统在出厂的时候或者被客户现场重置之后,配置参数也会被完全清除,存储介质中的数据也是完全无效的。在产品批量生产的时候,依靠人工预设每一套系统的默认参数需要耗费大量的时间,而且还容易出错,此时也需要一种机制来提供一套默认的参数以配置系统的运行;
(5)E2PROM 和 Flash 介质还存在写操作寿命的限制,超过了一定的次数,就会导致擦写疲劳,出现不可逆的永久性损坏,从而再也无法可靠的存储数据。应用程序由于状态逻辑的驱动,在某些情况下会频繁的刷新配置参数,有的成员变量的数值实际上是没有改变的,因此大量重复的写操作会降低存储器的使用寿命,此时需要一种机制来过滤掉那些无效的请求,只执行真正有效的操作。
发明内容
为了解决8051,MSP430和ARM等没有实时操作系统的嵌入式系统中配置参数的性能及可靠性问题,本方法提出了一套机制,可实现读写实时性强,数据完整性好,能过滤无效的重复写入请求,延长存储器使用寿命效果,并能为系统自动生成缺省的配置参数,减少批产时候的手工配置工作量,具体方法如下:
(1)将一组需要配置的系统参数放置在一个地址连续的结构化内存块中,应用程序在读写配置参数的时候直接访问内层块中的成员变量,不直接访问存储介质,实现高速实时访问;在存储介质上指定两个地址不重叠的存储区域,并通过一个带有CRC校验字段的8字节控制头部,将内存数据块中的内容双向映射到存储介质上的两个存储区域;
(2)应用程序仅在上电初始化的时候,选择一个数据校验正确的存储区域,一次性将其内容加载至内存数据块;如果有一个区域的数据不正确,则用校验正确的存储区域的数据覆盖该存储区域;如果两个存储区域均不正确,则使用系统默认的配置参数填充内存数据块,并覆盖这两个存储区域;
(3)应用程序在完成初始化工作并进入主循环之后,不再从存储介质加载配置参数,而实时监测系统的配置参数写入请求;一旦配置参数的任何一个成员变量有了改动,即开始将整个内存数据块的内容全部缓存至两个存储区域。在缓存数据时候,需要以存储区域为单位进行操作,只有在第一个存储区域完全写入完成之后,才可以写入第二个存储区域;在写入每一个存储区域的数据之前,需要以扇区为单位对该存储区域进行擦除操作,如果有多个扇区则逐个扇区进行擦除;擦除操作完成之后就可以存储器页面FIFO为最大写入单元进行写入操作,如果结构化内存数据块的长度超过了一个页面FIFO的大小,则需要分多个片段进行写入;在每一次扇区擦除操作和数据写入操作之前,都需要检测存储器的工作状态,如果为忙碌,则需要持续等待,只有在不忙碌的时候才可以执行操作;
(4)在将结构化内存数据块中的数据写入到两个存储区域的过程中,每一个步骤都被拆分成不包含阻塞等待行为的原子操作;只要检测到存储介质的工作状态为忙碌,则停止执行下一步并继续检测;如果在这个过程中有新的写入请求,则立刻终止当前的流程,从头开始该缓存流程。同样应用程序在设置配置参数的时候,也需要将新的数值和内存数据块中的成员变量做比对;如果二者一致,则放弃操作,否则修改该成员变量并设置一个数据更改请求,通知后台线程将结构化内存数据块的内容异步缓存至存储介质上的两个区域,并更新相应的头部控制信息及CRC校验和;
(5)为了可以适配E2PROM,Flash和FRAM等多种存储介质,本方法还设置了一个硬件抽象层(HAL:Hardware Abstract Layer),该抽象层总共6个独立的应用程序接口API函数,负责完成下述功能集合:
(a)从存储介质读取数据的函数:
char GetUserBlock( char iDevice, long dwAddress, char * pBuffer, shortiSize )
参数定义以及说明:
1)char iDevice:存储介质的设备编号,范围0X00-0XFF,默认数值=0X00
2)long dwAddress:读取存储介质的32-bits字节地址
3)char * pBuffer:从存储介质读取数据的存放内存指针
4)short iSize:一次性读取的数据大小,最大64K字节
返回值:0X00=操作失败,0X01=操作成功
(b)向存储介质写入数据的函数:
char SetUserBlock( char iDevice, long dwAddress, char * pBuffer, shortiSize )
参数定义以及说明:
1)char iDevice:存储介质的设备编号,范围0X00-0XFF,默认数值=0X00
2)long dwAddress:写入存储介质的32-bits字节地址
3)char * pBuffer:需要被写入到存储介质的数据的存放内存指针
4)short iSize:一次性读取的数据大小,最大64K字节
返回值:0X00=操作失败,0X01=操作成功
(c)获取存储介质的写入页面FIFO大小的函数:
unsigned short UserBlock_GetPageSize( void )
返回值:存储芯片的片上缓存大小,单位是字节。该数值是指在设备空闲状态下可以一次性写入且保证不会溢出的最大数据块的大小
(d)获取存储介质的擦除扇区大小函数:
unsigned short UserBlock_GetSectorSize( void )
返回值:存储芯片的扇区尺寸,单位是字节。如果该芯片在写入之前不需要擦除(比如FRAM和E2PROM存储介质),请返回0X01;如果不等于0X01,该数值是指在存储芯片(比如Flash)在写入数值之前,需要擦除的一个扇区的尺寸
(e)擦除指定扇区内容的函数:
void UserBlock_SetSectorAddr( char iDevice, unsigned long dwAddr )
参数定义以及说明:
1)char iDevice:存储介质的设备编号,范围0X00-0XFF,默认数值=0X00
2)unsigned long dwAddr:需要擦除的存储介质的逻辑地址
返回值:0X00=操作失败,0X01=操作成功
(f)检查存储介质工作状态是否忙碌的函数:
char UserBlock_IsWritable( char iDevice )
参数定义以及说明:
1)char iDevice:存储介质的设备编号,范围0X00-0XFF,默认数值=0X00
返回值:0X00=空闲状态,0X01=忙碌状态
借助这个硬件抽象层,该参数存储机制就能可靠地读写存储介质,而不用关心存储介质的物理特性和工作机制,从而实现了驱动接口的通用性。
附图1说明
图1是结构化的内存数据块和两个存储区域之间的映射图。每一个内存数据块M,都对应了存储介质上的A,B两个存储介质区域,其中A区域是第一存储区域,是主要存储区域;B区域是第二存储区域,是备份存储区域。这两个存储区域在功能上完全相同,仅仅是写入的先后顺序有差异。这两个存储区在逻辑地址上可以是相邻的,也可以是不相邻的,但是不能有重叠部分;A和B这两个存储区域的数据组织结构完全一样,其数据结构由8个字节长度的数据头和数据块本身组成,具体如下:
(1)S0: 4字节长度的起始地址
(2)S1: 2字节长度的数据长度
(3)S2: 2字节的 CRC 校验和
(4)S3: 对应内存参数的数据块
下面是关于这个数据结构的四个字段的说明:
(1)S0字段:这4个字节的起始地址,就是该存储区域的8字节头部控制信息在存储介质上的地址,对于一个特定的内存数据块而言,该地址是一个固定的常量,如果系统中有多个内存数据块,那么每一个内存数据块的地址是不一样的,其对应的S0数据段也是不一样的
(2)S1字段:这两个字节的数据大小代表S3字段的长度,也就是结构化内存数据块的长度,单位是字节
(3)S2字段:这两个字节就是S3字段,也就是整个结构化内存数据块的16位CRC校验和,用于检查S3字段的任何一个比特位的错误
(4)S3字段:这个字段就是内存数据块的内容,其长度就是内存数据块的长度
可以看出,对应一个参数存储的内存数据块M,其A,B两个介质存储区域的内容,其S1,S2和S3字段的内容是完全一样的,S0字段因为对应不同的存储地址,因此是不一样的。
附图2说明
图2是A和B两个存储区域的数据正确性校验逻辑,具体规则如下:
(1)S0 该字段应该为指定的地址常量,相同为匹配,否则是不匹配
(2)S1 该字段应该为指定的长度常量,相同为匹配,否则是不匹配
(3)计算 S3 字段的 CRC数值,和S2字段进行比较,相同则为匹配,否则为不匹配
只有上述三个字段全部匹配则为该存储区域校验成功,取值R0或R1=1,否则为校验失败,取值R0或R1=0。
附图3说明
图3是系统上电自检,完成基本的初始化之后,从存储介质加载配置参数至结构化内存数据块的操作。其工作流程如下:
(1)分别从A、B两个存储区域加载配置参数至内存块,并校验其数据的正确性R0和R1
(2)由于A区域加载在前,B区域加载在后,因此内存块中实际填充的是B区域的数据
(3)接下来判断A,B存储区域的数据校验结果,共有4种情况,具体如下
a)R0=0,R1=0:也就是A存储区域校验失败,B存储区域校验失败
b)R0=0,R1=1:也就是A存储区域校验失败,B存储区域校验成功
c)R0=1,R1=0:也就是A存储区域校验成功,B存储区域校验失败
d)R0=1,R1=1:也就是A存储区域校验成功,B存储区域校验成功
针对这四种校验情况,其处理规则如下:
(1)R0=0,R1=0:延时100ms之后重复读取并校验R0和R1,如果超过一定次数还是这种结果则认为参数加载失败并退出整个数据加载流程。这通常是产品出厂之后或被恢复出厂配置之后的第一次上电状态,存储器处于全新状态没有经过初始化。只要有一次校验结果的R0=1或者R1=1则说明产品是经过初始化和配置的,读取失败是偶然因素比如电源不稳定造成的,这种情况延时等待一段时间,等待系统稳定之后,再多尝试几次即可获得正确的校验结果,此时执行(2)(3)(4)的处理方法
(2)R0=0,R1=1:A区域数据不正确,B存储区域的数据是正确的。这通常是系统在更新A区域的数据的时候,突然发生了处理器复位或者系统断电的异常情况;由于A区域只更新了一部分,因此数据不完整,导致了校验失败;而B区域还没有开始更新,保存的是上一次的正确的数据。这种情况下需要加载B区域的数据至内存块,也就是“回滚”或者“还原”到最近一次的系统配置,同时设置A存储区域为“脏”,并设置更新请求Request=1,指示后台线程用内存数据块覆盖B存储区域
(3)R0=1,R1=0:A区域数据不正确,B存储区域的数据正确的。和情况(2)类似,通常是在系统更新完A存储区域的数据,接下来在更新B存储区域的过程中突然发生了处理器复位或者系统断电的异常情况,此时B区域的数据只更新了一部分,因此数据不完整,导致了校验失败。由于此时内存块中加载的是B区域的数据,因此需要重新加载A区域的数据至内存数据块,同时设置B存储区域为“脏”,并设置更新请求Request=1,指示后台线程用内存数据块覆盖B存储区域
(4)R0=1,R1=1:A和B两个存储区域的数据都是正确的,无论从A存储区域还是从B存储区域加载至内存块的数据都是一样的。这是系统正常工作的情况,没有发生任何异常
如果整个数据加载的过程,A和B两个存储区域的数据校验均不正确,则返回失败标志,指示系统需要用默认的配置参数覆盖内存块,然后设置两个存储区域均为“脏”,并设置请求标志Request=1指示后台线程用内存数据块覆盖A,B这两存储区域;如果只有A或者B其中一个存储区域为“脏”,则仅需更新该存储区域的数据, 另外一个存储区域不需要更新。
附图4说明
附图4是参数存储系统的应用层接口API函数的流程。由于所有的配置参数都被组织在一个地址连续的结构化内存块中,而应用程序接口一次是只访问一个成员变量的,因此在应用层接口修改内存块中的成员变量的时候,是可以做“拦截”处理并进行数据过滤的,具体方法如下:
(1)将需要写入的新的数值和内存块中的成员变量的当前数据进行比对,如果二者相同,说明是重复写入行为,没有必要再次写入了,直接放弃即可,这样可以减少大量的不必要的重复写入操作,一来可以节省一些处理器的运算能力,提升系统的响应速度和实时性;另外还可以延长存储介质的使用寿命
(2)如果二者不同,说明是新的有效的修改请求,此时需要同时更新A和B两个存储区的“脏”的标志,指示后台线程,A和B两个区域都需要更新;同时将数据更新请求Request加1,指示这是一个新的请求。由于数据更新请求Request的任何改动会被后台线程实时监控并被减1,因此这个数值的变动范围通常不会很大,但是考虑到该数值过了 255会自动溢出归零的问题,因此需要对其做出限制。
附图5说明
附图5是负责将内存数据块缓存到A和B两个存储区域的后台线程的工作流程。该线程需要置于应用程序的主循环中,处于一直运行状态,实时监控应用程序通过调用访问配置参数的API接口函数而发出的数据更新请求。如果数据更新请求一直为零,则说明没有新的数据更新请求到达,此时该线程处于任务监测状态,不执行任何操作;一旦数据更新请求Request不为零,则立刻转入数据缓存写入状态。在数据缓存写入状态,首先需要检测A和B两个存储区域的“脏”标志,如果“脏”标志被置位,说明该区域需要更新,否则是不需要更新的。在系统初始化阶段,可能会出现其中一个区域为“脏”而另外一个区域不为“脏”的情况,但是在正常运行阶段这两个存储区域都会为“脏”。线程在更新A和B两个存储区域的时候,首先更新A存储区域,在更新完了A区域的所有的数据之后再更新B存储区域;这样可以确保无论是在A或者B存储区域更新的过程中发生了处理器复位或者系统断电的异常,出现因数据不完整而导致校验失败的只有一个存储区域,而另外一个存储区域的数据则是完整的。每一个存储区域的数据更新分为两个大的步骤,第一个步骤是扇区擦除,第二个步骤是才是数据写入。对于不需要扇区擦除操作就可以执行数据写入的E2PROM 和 FRAM 存储介质,需要设置存储器扇区尺寸=1,此时就会跳过扇区擦除的操作,直接执行第二步的数据写入;关于扇区擦除和数据写入的详细步骤在附图6中介绍。
附图6说明
附图6是后台线程写入A或者B单个存储区域的详细工作流程,相当于附图5中“更新A/B存储区域数据”部分的局部放大图。如果内存块的数据量较大,超过了一个扇区的尺寸,则需要逐个扇区进行擦除,直到擦除完所有的扇区;数据写入过程也是一样的,单次写入数据的最大量是一个页面FIFO的大小,如果内存块的数据量过大,超过了一个页面FIFO的大小,则需要执行多次写入过程,直到写入完所有的数据。为了确保该线程的实时性能和可靠性,在缓存写入阶段,需要做出下述设计:
(1)对介质存储器的每一步操作都是一个不包含阻塞等待的行为
(2)每一次扇区擦除和数据写入操作之前,都需要读存储器的工作状态,只有在不“忙”的时候才可以执行操作,否则需要继续等待
(3)扇区擦除和数据写入操作需要紧跟在状态查询之后,中间不能有其他线程的切换行为,这样是确保系统有多组配置参数和多个后台线程的时候不至于发生状态紊乱和写入冲突
(4)在存储器工作状态为“忙”的等待期间,需要检测是否有新的数据更新请求到达,如果有则放弃当前的写入请求,重新开始整个数据缓存写入过程,这样一方面可以提升系统的实时性能,另外一个方面还可以减少存储器的擦写次数,提升存储器的使用寿命。
具体实施方式
该参数存储机制有下述三个部分组成:
(1)一个数据加载函数,负责在系统上电初始化阶段从存储介质加载配置参数至内存块
(2)一个后台工作线程,负责将内存数据块的数据缓存写入到存储介质的两个存储区域
(3)和结构化内存数据块中的成员变量一一对应的若干个应用程序接口API函数,负责读写成员变量的数值
这三个部分都是通过结构化的内存数据块作为纽带进行联系的,其中第(1)部分即数据加载函数的工作方式如下:
(1)数据加载函数是在应用程序初始化阶段,在进入系统的主循环之前执行的,只执行一次,在进入主循环之后不再执行数据的加载操作
(2)一旦配置参数从存储介质加载到了结构化内存块中,后续的应用程序编接口API函数访问配置参数的时候,就是直接访问内存块中的数据,不再访问存储介质了,这样就大大的提高了系统运行的实时性
(3)在加载数据的过程中,如果存储区域的数据校验不正确,则需要延迟一段时间再次尝试以排除电源抖动等偶然因素的干扰;如此往复循环,直到有一个存储区域的数据校正正确或者尝试次数达到一定上限
(4)如果多次重试发现两个存储区域的数据均不正确,则通知系统采用默认的配置参数填充结构化内存数据块,同时设置两个存储区域的“脏”标志,并设置数据更新请求Request=1,指示系统在进入主循环之后,由后台工作线程将内存块中的数据缓存到两个存储区域,从而实现产品出厂之后的缺省配置参数的自动写入过程
(5)如果一个存储区域的数据校验正确,而另外一个存储区域的数据校验不正确,则从校验正确的存储区域加载配置参数至内存块中,而将校验不正确的区域设置为“脏”并设置数据更新请求标志Request=1,指示系统在进入主循环之后,由后台工作线程将内存数据块中的数据缓存写入到该标志为“脏”的区域,从而实现两个存储区域的镜像备份
第(2)部分即后台工作线程只负责结构化内存数据块到两个存储区域的单向数据缓存工作,不再从两个存储区中反向加载数据至内存数据块。该线程需要放在系统初始化之后的主循环之中,实时监控第(3)部分即应用程序接口API函数中提交的数据更新请求。如果没有数据更新请求,就处于非阻塞式等待状态并继续监测;一旦新的数据更新请求到达,就转入数据缓存阶段,其工作原理如下:
(1)首先需要擦除第一个存储区域的全部内容,一次擦除一个存储器扇区大小的容量。如果结构化内存块的容量超过了一个扇区的容量,就需要逐次擦除多个相邻扇区的内容;并且在每一次擦除操作之前需要检测存储器工作状态,只有在不忙碌的状态下才可以执行擦除的操作;如果在此期间检测到新的数据更新请求达到,则立刻终止当前的扇区擦除,重新开始新的缓存操作
(2)在完成了第一个存储区域的擦除操作之后,就可以执行针对该存储区域的数据写入了。首先需要写入该存储区域的控制信息,共计8个字节,包括4个字节的起始地址,2个字节的数据长度和2个字节的CRC校验;然后就以存储器页面FIFO为最大单元写入数据片段。如果结构化内存数据块的长度超过了一个页面FIFO的大小,则需要分成多写入,直到写完所有的数据为止。在每一次写入操作之前需要检测存储器工作状态,只有在不忙碌的状态下才可以执行写入的操作;如果在此期间检测到新的数据更新请求达到,则立刻终止当前的数据写入,重新开始新的缓存操作
(3)完成了第一个存储区域的数据写入操作之后,就可以开始第二个存储区域的扇区擦除操作了,其操作流程和第一个存储区域的擦除操作完全一样。如果在存储器工作状态为“忙碌”的非阻塞式等待期间,检测到了有新的数据更新请求到达,则需要立刻终止当前的扇区擦除工作,重新开始新的缓存操作
(4)在完成了第二个存储区域的擦除操作之后,就可以执行针对第二个存储区域的数据写入了。其操作流程和第一个存储区域的写入操作完全一样。如果在存储器工作状态为“忙碌”的非阻塞式等待期间,检测到了有新的数据更新请求到达,则需要立刻终止当前的数据写入工作,重新开始新的缓存操作
第(3)部分即针对结构化内存块中的成员变量的应用程序接口API函数,这些API接口是应用程序用来保存或者读取配置参数的函数。原则上有多少个成员变量,就会有多少组读和写的函数;这些函数不直接和存储介质上打交道,而是直接访问结构化的内存数据块,从而确保了系统的实时性。如果需要修改成员变量的数值,只需要将两个存储区的“脏”标志置位,并设置新的数据更新请求,即可通知后台工作线程执行数据缓存操作,将内存数据块的内容安全可靠的写入到存储介质的两个存储区域。在写操作的函数中还内置了重复数据写操作的“拦截”处理;如果系统因为状态逻辑的驱动需要频繁的刷新系统的配置参数,而这些参数在某些情况下是一个不变的定值,此时大量的写操作实际上是无效的重复请求,那么此时的过滤行为将会大幅度减少真实的存储器写操作,从而延长存储器的使用寿命
通过上述分析可以看出,该参数存储机制通过在一个结构化的内存数据块和存储介质上的两个独立存储区域之间建立了双向的映射关系,并将数据加载操作和数据缓存写入操作分别安排在系统初始化阶段和初始化之后系统主循环的后台线程中,提高了系统的实时性;借助两个存储区域的相互镜像和主从备份机制确保了数据的自恢复能力,提升了系统的可靠性;存储区域采用了带有CRC校验字段的8字节控制头部有效的确保了数据的错误侦测能力,当发现两个存储区域的数据均不正确之后即可判断是系统恢复了出厂配置或者是生产下线后的第一次上电,就可以自动生成配置参数,大幅度减少了人工配置的工作量,由此解决了在没有嵌入式操作系统支持的情况下,配置参数写入的一系列问题。
Claims (9)
1.基于结构化的内存数据块和双存储区域之间的映射技术,其特征是(1)将配置参数的所有成员变量保存在一个地址连续的结构化内存数据块中;(2)在存储介质上建立两个不重叠的独立存储区域,并和结构化的内存数据块之间建立双向的映射关系;(3)每一个存储区域都有包含CRC字段的控制头部用于校验存储区域的数据正确性;(4)应用程序在初始化的时候,依据一定的规则一次性从两个存储区域中先后加载数据至内存数据块中;(5)应用程序在初始化之后,由一个独立的线程负责将这个数据块的内容分别写入到存储介质上两个不重叠的存储区域中去。
2.通过6个独立的函数接口实现一个存储介质抽象层,提供对于E2PROM,Flash和FRAM等存储介质的兼容性,其特征是(1)一个读取函数;(2)一个写入函数;(3)一个查询存储器工作状态的函数;(4)一个读取页面FIFO大小的函数;(5)一个读取扇区大小的函数;(6)一个扇区擦除的函数。
3.根据权利要求1所述的配置参数实时读写技术,其特征是(1)应用程序仅仅访问内存数据块中的成员变量,不直接访问存储介质;(2)应用程序初始化的过程中只有数据加载的操作,没有写入存储器的操作;(3)应用程序在初始化之后只有写入存储器的操作,没有数据加载的操作。
4.根据权利要求1所述的多线程安全技术,其特征是每个存储器读操作和写操作之前都需要查询存储器的状态,只有在存储器总线不忙碌的状态的时候才可以执行读操作或者写操作,否则需要等待。
5.根据权利要求1所述的重复写入过滤机制,其特征是向结构化的内存数据块写入成员变量之前需要检查数据是否有改变,如果没有改变则放弃写入请求,如果有改变则更新成员变量的数值,并提交写入请求。
6.根据权利要求1所述的数据正确性校验机制,其特征是存储介质上的两个区域均由四个部分组成,分别是(1)四个字节的存储地址;(2)两个字节的数据长度;(3)2个字节的CRC数据校验和;(4) 结构化内存数据块的内容;且前三个部分的字段全部校验正确才代表该存储区域的数据正确,否则为不正确。
7.根据权利要求1所述的数据读取完整性保护机制,其特征是(1)只要两个存储区域中任何一个区域的数据正确,就可以加载该存储区域的数据至结构化的内存数据块;(2)如果两个存储区域的数据都正确,就加载第一个存储区域的数据值至内存数据块;(3)如果一个存储区域的数据正确,而另外一个存储区域的数据不正确则将正确区域的数据加载至内存数据块中,然后用该数据覆盖另外一个不正确的存储区域;(4)如果两个存储区域的数据均不正确,则延时100毫秒之后再次读取,连续若干次都失败则认为两个存储区域的数据均不正确,则使用缺省的配置参数填充结构化的内存数据块,并覆盖到两个存储区域。
8.根据权利要求1所述的数据写入完整性保护机制,其特征是(1)当有数据写入请求的时候,先将结构化内存数据块的内容写入第一个存储区域,完成之后再写入第二个存储区域;(2)每一个存储区域在写入之前需要先进行擦除操作,然后再写入整个结构化的内存数据块;(3)擦除存储器扇区之前需要检查存储器总线的忙碌状态,如果为忙碌状态需要等待,只有在不忙碌的时候才可以执行擦除操作(3)每次擦除区域大小为存储介质的一个扇区的大小;(5)写入数据之前需要检查总线状态,如果为忙碌状态则等待,不忙碌则可以写入一个数据片段;(4)每次数据的写入不超过一个页面FIFO的大小。
9.根据权利要求1所述的写入合并技术,其特征是在将内存数据块的数据写入到两个存储区域的过程中,只要任何一步检测到有新的数据写入请求,则立刻提前终止当前的写入请求,重新开始新的写入过程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011481455.1A CN112596808A (zh) | 2020-12-16 | 2020-12-16 | 一种嵌入式系统的参数存储机制 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011481455.1A CN112596808A (zh) | 2020-12-16 | 2020-12-16 | 一种嵌入式系统的参数存储机制 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112596808A true CN112596808A (zh) | 2021-04-02 |
Family
ID=75195954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011481455.1A Pending CN112596808A (zh) | 2020-12-16 | 2020-12-16 | 一种嵌入式系统的参数存储机制 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112596808A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113157211A (zh) * | 2021-04-20 | 2021-07-23 | 武汉卓目科技有限公司 | 一种嵌入式系统信息记录的存储方法 |
CN114911648A (zh) * | 2022-07-14 | 2022-08-16 | 北京智芯微电子科技有限公司 | Xip flash程序驱动方法及系统 |
CN116185563A (zh) * | 2022-12-27 | 2023-05-30 | 上海千顾汽车科技有限公司 | 一种基于车规级微控制器数据闪存的软件模拟算法 |
CN116737089A (zh) * | 2023-08-15 | 2023-09-12 | 北京紫光芯能科技有限公司 | 配置数据的存储方法、装置和系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070300008A1 (en) * | 2006-06-23 | 2007-12-27 | Microsoft Corporation | Flash management techniques |
US20110040931A1 (en) * | 2008-02-20 | 2011-02-17 | Koji Shima | Memory control method and device, memory access control method, computer program, and recording medium |
CN104699416A (zh) * | 2013-12-10 | 2015-06-10 | 杭州海康威视系统技术有限公司 | 一种数据存储系统以及一种数据存储方法 |
CN106407130A (zh) * | 2016-09-12 | 2017-02-15 | 深圳易充新能源(深圳)有限公司 | 一种Nandflash内存数据管理的方法 |
CN107329704A (zh) * | 2017-06-30 | 2017-11-07 | 杭州宏杉科技股份有限公司 | 一种缓存镜像方法及控制器 |
CN107959658A (zh) * | 2016-10-17 | 2018-04-24 | 北京视联动力国际信息技术有限公司 | 一种网络会议数据同步方法及其系统 |
CN108255436A (zh) * | 2018-01-25 | 2018-07-06 | 广东美的制冷设备有限公司 | 数据存取方法、存取装置、家电设备和可读存储介质 |
-
2020
- 2020-12-16 CN CN202011481455.1A patent/CN112596808A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070300008A1 (en) * | 2006-06-23 | 2007-12-27 | Microsoft Corporation | Flash management techniques |
US20110040931A1 (en) * | 2008-02-20 | 2011-02-17 | Koji Shima | Memory control method and device, memory access control method, computer program, and recording medium |
CN104699416A (zh) * | 2013-12-10 | 2015-06-10 | 杭州海康威视系统技术有限公司 | 一种数据存储系统以及一种数据存储方法 |
CN106407130A (zh) * | 2016-09-12 | 2017-02-15 | 深圳易充新能源(深圳)有限公司 | 一种Nandflash内存数据管理的方法 |
CN107959658A (zh) * | 2016-10-17 | 2018-04-24 | 北京视联动力国际信息技术有限公司 | 一种网络会议数据同步方法及其系统 |
CN107329704A (zh) * | 2017-06-30 | 2017-11-07 | 杭州宏杉科技股份有限公司 | 一种缓存镜像方法及控制器 |
CN108255436A (zh) * | 2018-01-25 | 2018-07-06 | 广东美的制冷设备有限公司 | 数据存取方法、存取装置、家电设备和可读存储介质 |
Non-Patent Citations (1)
Title |
---|
龚雪容;刘根贤;生拥宏;: "基于Flash的关键变量容错存储技术研究", 电子技术应用, no. 11, 6 November 2014 (2014-11-06) * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113157211A (zh) * | 2021-04-20 | 2021-07-23 | 武汉卓目科技有限公司 | 一种嵌入式系统信息记录的存储方法 |
CN113157211B (zh) * | 2021-04-20 | 2022-11-18 | 武汉卓目科技有限公司 | 一种嵌入式系统信息记录的存储方法 |
CN114911648A (zh) * | 2022-07-14 | 2022-08-16 | 北京智芯微电子科技有限公司 | Xip flash程序驱动方法及系统 |
CN114911648B (zh) * | 2022-07-14 | 2022-10-04 | 北京智芯微电子科技有限公司 | Xip flash程序驱动方法及系统 |
CN116185563A (zh) * | 2022-12-27 | 2023-05-30 | 上海千顾汽车科技有限公司 | 一种基于车规级微控制器数据闪存的软件模拟算法 |
CN116185563B (zh) * | 2022-12-27 | 2024-04-16 | 上海千顾汽车科技有限公司 | 一种基于车规级微控制器数据闪存的软件模拟算法 |
CN116737089A (zh) * | 2023-08-15 | 2023-09-12 | 北京紫光芯能科技有限公司 | 配置数据的存储方法、装置和系统 |
CN116737089B (zh) * | 2023-08-15 | 2023-11-21 | 北京紫光芯能科技有限公司 | 配置数据的存储方法、装置和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112596808A (zh) | 一种嵌入式系统的参数存储机制 | |
US6965989B1 (en) | System and method for fast reboot of a file server | |
US6308265B1 (en) | Protection of boot block code while allowing write accesses to the boot block | |
JP4363676B2 (ja) | コンピュータシステム | |
JP5636034B2 (ja) | データ利用についてのマウント時間の調停 | |
US20060107129A1 (en) | Method and computer program product for marking errors in BIOS on a RAID controller | |
US20080184025A1 (en) | Booting to a recovery/maintenance environment | |
CN109710317B (zh) | 系统启动方法、装置、电子设备及存储介质 | |
JP2007133471A (ja) | ストレージ装置及びスナップショットのリストア方法 | |
JP5183542B2 (ja) | 計算機システム及び設定管理方法 | |
WO2014120205A1 (en) | Replacement of a corrupt driver variable record | |
US5818755A (en) | Storage apparatus having a nonvolatile storage device capable of retaining data after an incomplete write operation and method of accessing same | |
US20070277028A1 (en) | Method and system for recovery from reprogramming failures in nonvolatile memory | |
JP2004220068A (ja) | メモリカード及びメモリへのデータ書き込み方法 | |
CN116521062A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
WO2023240941A1 (zh) | 下载数据的方法、装置和安全元件 | |
US11960748B2 (en) | SSD supporting read-only mode after PLP backup failure | |
CN113032008B (zh) | 电子处理装置及存储器控制方法 | |
CN111159123B (zh) | 一种嵌入式可靠参数储存文件系统及方法 | |
JPH11265283A (ja) | 記憶装置におけるファームウェアの修正方法及び記憶装置 | |
JP3313576B2 (ja) | メモリアクセス制御方法及び装置 | |
JPH11134204A (ja) | スタック保護装置 | |
JPH0855068A (ja) | 通信端末装置 | |
CN114398107B (zh) | 一种跨领域多方式加载dsp程序的设计方法及通用平台 | |
KR100402516B1 (ko) | 내장형 마이크로 컨트롤러 유닛에서 프로그램 코드를갱신하는 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |