数据写入方法、装置、电子设备、存储介质及程序产品与流程

文档序号:33048499发布日期:2023-01-24 22:54阅读:70来源:国知局
数据写入方法、装置、电子设备、存储介质及程序产品与流程

1.本技术涉及计算机技术领域,特别涉及一种数据写入方法、装置、电子设备、存储介质及程序产品。


背景技术:

2.flash存储器作为一种非易失性存储器,不仅具备电子可擦除可编程的性能,而且能够快速读取数据,在断电的情况下依然能够保持存储数据不丢失。flash存储器包括多个数据块,每个数据块包括多个扇区。flash存储器执行擦除操作的最小单位为数据块,执行写操作的最小单位为扇区。在向flash存储器的某一扇区内写入数据时,需要先擦除该扇区所在数据块的全部数据,然后再向该扇区内写入数据。
3.然而,flash存储器的写入次数是有限的,而现有的数据写入方法需要频繁地对flash存储器执行擦写操作,严重缩短了flash存储器的使用寿命。
4.为此,亟需提供一种数据写入方法,以提高flash存储器的使用寿命。


技术实现要素:

5.本技术实施例提供了一种数据写入方法、装置、电子设备、存储介质及程序产品,能够提高flash存储器的使用寿命。所述技术方案如下:第一方面,提供了一种数据写入方法,所述方法包括:接收数据写入请求,所述数据写入请求包括用于接收所述数据写入请求的数据接口的接口标识、第一数据来源标识及第一数据;当基于所述接口标识确定所述第一数据为第一类型数据,且所述第一数据与预设缓存空间中存储的所述第一数据来源标识对应的第二数据不同时,将所述第二数据更新为所述第一数据,并将所述第一数据写入到flash存储器的第一数据块中,所述第一类型数据为写入频率小于预设频率的数据,所述第一数据块用于存储所述第一数据来源标识对应的第一类型数据;当基于所述接口标识确定所述第一数据为第二类型数据,且所述flash存储器的第二数据块中存在未写满扇区,将所述第一数据写入到所述未写满扇区中,所述第二类型数据为写入频率大于所述预设频率的数据,所述第二数据块用于存储所述第一数据来源标识对应的第二类型数据。
6.在本技术的另一个实施例中,所述将所述第二数据更新为所述第一数据之前,还包括:当系统上电时,将所述第一数据块中存储的第二数据写入到所述预设缓存空间中所述第一数据来源标识对应的存储区域;响应于所述数据写入请求,将所述第一数据与所述第二数据进行比较;当所述第一数据和所述第二数据不同时,执行将所述第二数据更新为所述第一数据的步骤。
7.在本技术的另一个实施例中,所述将所述第一数据写入到flash存储器的第一数据块中,包括:擦除所述第一数据块中存储的第二数据;对所述预设缓存空间中的所述第一数据进行校验,得到第一校验值;将所述预设缓存空间中的所述第一数据写入到所述第一数据块中;对所述第一数据块中存储的所述第一数据进行校验,得到第二校验值;当所述第一校验值与所述第二校验值相同时,确定将所述第一数据写入到flash存储器的第一数据块中。
8.在本技术的另一个实施例中,所述擦除所述第一数据块中存储的第二数据之前,还包括:将所述第一数据块中存储的所述第二数据写入到第三数据块中,所述第三数据块用于备份所述第一数据块中存储的数据;响应于所述第一数据块中存储的所述第二数据写入到所述第三数据块中,执行擦除所述第一数据块中存储的所述第二数据的步骤。
9.在本技术的另一个实施例中,所述方法还包括:当基于所述接口标识确定所述第一数据为第一类型数据,且所述第一数据与所述第二数据相同时,不执行将所述第一数据写入到所述第一数据块的操作。
10.在本技术的另一个实施例中,所述将所述第一数据写入到所述未写满扇区中,包括:获取所述第二数据块当前写入操作的存储地址;将所述存储地址的下一存储地址作为所述第一数据写入操作的初始地址;基于所述初始地址对所述第一数据进行写入。
11.在本技术的另一个实施例中,所述基于所述初始地址对所述第一数据进行写入,包括:如果所述未写满扇区的剩余存储空间大于等于所述第一数据的大小,则从所述初始地址开始对所述第一数据进行写入,直至所述第一数据全部写入;如果所述未写满扇的剩余存储空间小于所述第一数据的大小,则从所述初始地址开始对所述第一数据进行写入,直至写满所述第二数据块,将所述第二数据块中的数据写入到第四数据块中,擦除所述第二数据块中存储的数据,再从所述第二数据块的首地址开始对所述第一数据中剩余的数据进行写入,所述第四数据块用于备份所述第二数据块中的数据。
12.在本技术的另一个实施例中,所述方法还包括:当根据所述接口标识确定所述第一数据为第二类型数据,且所述第二数据块中不存在未写满扇区,将所述第二数据块中的数据写入到第四数据块中,擦除所述第二数据块中存储的数据,再从所述第二数据块的首地址开始对所述第一数据进行写入,所述第四数据块用于备份所述第二数据块中存储的数据。
13.在本技术的另一个实施例中,所述方法还包括:响应于预设触发事件,获取所述第二数据块中写入时刻与所述预设触发事件发生时刻最邻近的目标数据;
将所述目标数据的存储地址写入到目标数据块中。
14.在本技术的另一个实施例中,所述将所述目标数据的存储地址写入到目标数据块中,包括:对所述目标数据进行解码,得到所述目标数据的第二数据来源标识;确定所述第二数据来源标识对应的所述目标数据块;将所述目标数据的存储地址写入到所述目标数据块中。
15.在本技术的另一个实施例中,所述接收数据写入请求之后,还包括:获取所述接口标识对应的请求队列,所述请求队列用于存储所述接口标识对应的数据接口接收到数据写入请求;判断所述请求队列中是否存在剩余存储空间;当确定所述请求队列中存在剩余存储空间,将所述数据写入请求加入到所述请求队列中;当达到所述请求队列中所述数据写入请求的处理时间,执行对所述第一数据的写入操作。
16.在本技术的另一个实施例中,所述方法还包括:当确定所述请求队列中不存在剩余存储空间,返回提示消息,所述提示消息用于提示所述请求队列的存储空间已满。
17.第二方面,提供了一种数据写入装置,所述装置包括:接收模块,用于接收数据写入请求,所述数据写入请求包括用于接收所述数据写入请求的数据接口的接口标识、第一数据来源标识及第一数据;更新模块,用于当基于所述接口标识确定所述第一数据为第一类型数据,且所述第一数据与预设缓存空间中存储的所述第一数据来源标识对应的第二数据不同时,将所述第二数据更新为所述第一数据;第一写入模块,用于将所述第一数据写入到flash存储器的第一数据块中,所述第一类型数据为写入频率小于预设频率的数据,所述第一数据块用于存储所述第一数据来源标识对应的第一类型数据;第二写入模块,用于当基于所述接口标识确定所述第一数据为第二类型数据,且所述flash存储器的第二数据块中存在未写满扇区,将所述第一数据写入到所述未写满扇区中,所述第二类型数据为写入频率大于所述预设频率的数据,所述第二数据块用于存储所述第一数据来源标识对应的第二类型数据。
18.在本技术的另一个实施例中,所述装置还包括:第三写入模块,用于当系统上电时,将所述第一数据块中存储的第二数据写入到所述预设缓存空间中所述第一数据来源标识对应的存储区域;比较模块,用于响应于所述数据写入请求,将所述第一数据与所述第二数据进行比较;所述更新模块,用于当所述第一数据和所述第二数据不同时,将所述第二数据更新为所述第一数据。
19.在本技术的另一个实施例中,所述第一写入模块,用于擦除所述第一数据块中存储的第二数据;对所述预设缓存空间中的所述第一数据进行校验,得到第一校验值;将所述
预设缓存空间中的所述第一数据写入到所述第一数据块中;对所述第一数据块中存储的所述第一数据进行校验,得到第二校验值;当所述第一校验值与所述第二校验值相同时,确定将所述第一数据写入到flash存储器的第一数据块中。
20.在本技术的另一个实施例中,所述装置还包括:第四写入模块,用于将所述第一数据块中存储的所述第二数据写入到第三数据块中,所述第三数据块用于备份所述第一数据块中存储的数据;所述第一写入模块,用于响应于所述第一数据块中存储的所述第二数据写入到所述第三数据块中,擦除所述第一数据块中存储的所述第二数据。
21.在本技术的另一个实施例中,所述第一写入模块,还用于当基于所述接口标识确定所述第一数据为第一类型数据,且所述第一数据与所述第二数据相同时,不执行将所述第一数据写入到所述第一数据块的操作。
22.在本技术的另一个实施例中,所述第二写入模块,用于获取所述第二数据块当前写入操作的存储地址;将所述存储地址的下一存储地址作为所述第一数据写入操作的初始地址;基于所述初始地址对所述第一数据进行写入。
23.在本技术的另一个实施例中,所述第二写入模块,用于如果所述未写满扇区的剩余存储空间大于等于所述第一数据的大小,则从所述初始地址开始对所述第一数据进行写入,直至所述第一数据全部写入;如果所述未写满扇的剩余存储空间小于所述第一数据的大小,则从所述初始地址开始对所述第一数据进行写入,直至写满所述第二数据块,将所述第二数据块中的数据写入到第四数据块中,擦除所述第二数据块中存储的数据,再从所述第二数据块的首地址开始对所述第一数据中剩余的数据进行写入,所述第四数据块用于备份所述第二数据块中的数据。
24.在本技术的另一个实施例中,所述装置还包括:第五写入模块,用于当根据所述接口标识确定所述第一数据为第二类型数据,且所述第二数据块中不存在未写满扇区,将所述第二数据块中的数据写入到第四数据块中,擦除所述第二数据块中存储的数据,再从所述第二数据块的首地址开始对所述第一数据进行写入,所述第四数据块用于备份所述第二数据块中存储的数据。
25.在本技术的另一个实施例中,所述装置还包括:第一获取模块,用于响应于预设触发事件,获取所述第二数据块中写入时刻与所述预设触发事件发生时刻最邻近的目标数据;第六写入模块,用于将所述目标数据的存储地址写入到目标数据块中。
26.在本技术的另一个实施例中,所述第六写入模块,用于对所述目标数据进行解码,得到所述目标数据的第二数据来源标识;确定所述第二数据来源标识对应的所述目标数据块;将所述目标数据的存储地址写入到所述目标数据块中。
27.在本技术的另一个实施例中,所述装置还包括:第二获取模块,用于获取所述接口标识对应的请求队列,所述请求队列用于存储所述接口标识对应的数据接口接收到数据写入请求;判断模块,用于判断所述请求队列中是否存在剩余存储空间;加入模块,用于当确定所述请求队列中存在剩余存储空间,将所述数据写入请求加入到所述请求队列中;
执行模块,用于当达到所述请求队列中所述数据写入请求的处理时间,执行对所述第一数据的写入操作。
28.在本技术的另一个实施例中,所述装置还包括:返回模块,用于当确定所述请求队列中不存在剩余存储空间,返回提示消息,所述提示消息用于提示所述请求队列的存储空间已满。
29.第三方面,提供了一种电子设备,所述电子设备包括存储器及处理器,所述存储器中存储有至少一条计算机程序,所述至少一条计算机程序由所述处理器加载并执行,以实现如第一方面所述的数据写入方法。
30.第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条计算机程序,所述至少一条计算机程序被处理器执行时能够实现如第一方面所述的数据写入方法。
31.第五方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时能够实现如第一方面所述的数据写入方法。
32.本技术实施例提供的技术方案带来的有益效果是:在接收到数据写入请求时,根据接口标识确定第一数据的数据类型,该数据类型包括第一类型数据和第二类型数据,该第一类型数据的写入频率低于第二类型数据的写入频率,针对不同类型的数据,采取不同的数据写入方式。在第一数据为第一类型数据,且第一数据与预设缓存空间中存储的第二数据不同时,将第二数据更新为第一数据,进而将预设缓存空间中的第一数据写入到flash存储器的第一数据块。该方法通过预设缓存空间中存储的第二数据对待写入flash存储器的第一数据进行校验,避免相同的数据重复写入到flash存储器中,提高了flash存储器的使用寿命。在第一数据为第二类型数据,且flash存储器的第二数据块中存在未写满扇区时,无需对flash存储器执行擦除操作,直接将待写入的第一数据写入到未写满扇区中。由于并非每次数据写入时都会执行擦除操作,而是以数据块为单位,在第二数据块中各个扇区均已写满时,执行一次擦除操作,采用该种方法大大减少了flash存储器的擦除次数,提高了flash存储器的使用寿命。
附图说明
33.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
34.图1是本技术实施例提供的一种数据存储系统的架构图;图2是本技术实施例提供的一种nvm模块管理过程的示意图;图3是本技术实施例提供的一种数据写入方法的流程图;图4是本技术实施例提供的另一种数据写入方法的流程图;图5是本技术实施例提供的一种第二类型数据的写入过程的示意图;图6是本技术实施例提供的一种数据写入装置的结构示意图;图7示出了本技术一个示例性实施例提供的一种电子设备的结构框图。
具体实施方式
35.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
36.可以理解,本技术实施例所使用的术语“每个”、“多个”及“任一”等,多个包括两个或两个以上,每个是指对应的多个中的每一个,任一是指对应的多个中的任意一个。举例来说,多个词语包括10个词语,而每个词语是指这10个词语中的每一个词语,任一词语是指10个词语中的任意一个词语。
37.本技术所涉及的信息(包括但不限于用户设备信息、用户个人信息等)、数据(包括但不限于用于分析的数据、存储的数据、展示的数据等)以及信号,均为经用户授权或者经过各方充分授权的,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
38.首先在执行本技术实施例之前,先对本技术实施例中涉及的名词进行解释。
39.nvm(no volatile ram manager,非易失ram管理器):主要用于管理数据的存储。nvm能够将具体数据存储介质与数据使用方直接进行抽象隔离,以实现数据与具体存储介质、数据写入方式、获取方式进行解耦的目的。
40.nvm_cfg是指nvm 配置文件,主要用于为各个应用程序配置数据来源标识和数据长度。该数据来源标识和数据长度用于在flash存储器中确定出存储该应用程序的专属数据的数据块。具体来说,数据来源标识为一种虚拟标识,基于该数据来源标识能够建立应用程序与flash存储器中用于存储该应用程序的专属数据的数据块之间的对应关系。数据长度是指为该应用程序在flash存储器中所占用的存储空间大小。通常不同应用程序的专属数据不同,nvm_cfg为不同应用程序配置的数据来源标识及数据长度不同,这样,不同的应用程序在flash存储器中对应的数据块也不同。
41.block是指flash存储器中的数据块,为flash存储器的最小擦除单位。flash存储器中包括多个block,每个block 包括多个sector,每个sector的存储空间可以相同,也可以不同。每个block的大小(存储空间)可由nvm模块根据需求进行划分,如果某一block中需要存储数据的数据量较大,则可为该block分配较大的存储空间,如果某一block中需要存储数据的数据量较小,则可为该block分配较小的存储空间。
42.sector是指flash存储器中的扇区,为flash存储器的最小写入单位。
43.eeprom(electrically erasable programmable read only memory,带电可擦可编程只读存储器 )为一种掉电后数据不丢失的存储芯片。虽然eeprom与flash都能掉电存储数据,但是flash成本较低,写入时间长,擦写次数少(可达10000次),而eeprom成本较高,写入时间短,擦写次数多(可达1000000次)。ram(random access memory,随机存取存储器)是与cpu(central processing unit,中央处理器)直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。ram工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)数据。flash和ram最大的区别是,flash掉电时存储数据保持,ram掉电时存储数据丢失,也就是说,在关掉电源之后,储存在flash中的数据还会存储在flash 里面,储存在ram中的数据会随着电源关闭而丢失。
44.专属数据:为应用程序的私有数据,所谓的私有数据也即是该应用程序运行过程
中所需要的数据。在本技术实施例中,专属数据属于第一类型数据,即写入频率较低的数据。
45.日志数据:为应用程序的共有数据,用于记录各个应用程序的运行信息。在本技术实施例中,日志数据属于第二类型数据,即写入频率较高的数据。
46.在计算机领域,flash存储器中同一存储地址在写入数据之前,需要先擦除该存储地址的数据,而flash存储器擦除操作的最小单位为数据块,这样,每次即便只需要向数据块的一个扇区内写入数据,也需要将整个数据块中的数据全部擦除。由于flash存储器的擦写次数是有限的,频繁的擦写会降低flash存储器的使用寿命。为了提高flash存储器的使用寿命,本技术实施例提供了一种数据写入方法,该方法针对不同类型的数据,采取不同的数据写入方式,而每种数据写入方式均能减少对flash存储器的擦写次数。对于应用程序的第一类型数据(例如专属数据),先判断第一类型数据与ram中存储的该应用程序的数据是否相同,如果相同,则无需对flash存储器执行擦写操作,采用该种方式达到了减少对flash存储器的擦写次数的目的;对于应用程序的第二类型数据(例如日志数据),如果该flash存储器中用于存储日志数据的数据块中有空闲存储地址(即存在未写满扇区),则无需执行擦除操作,直接将该数据写入到空闲存储地址中。当该数据块中全部的扇区写满之后,执行一次擦除操作,然后继续滚动向该数据块的各个扇区内写入数据,直至该数据块的各个扇区全部写满,再执行一次擦除操作,也即是,执行一次擦除操作,写满之后再执行。所谓的滚动写入是指顺序写入,例如,flash存储器中用于存储第二类型数据的数据块包括10个扇区,每个扇区包括64个存储地址,每个存储地址用于存储4bit的数据,则在向该数据块中写入数据时,从第一个扇区的首地址开始写入,当第一个扇区写完之后,向第二个扇区的首地址写入,直至10个扇区全部写满。
47.本技术实施例提供数据写入方法可由电子设备执行,该电子设备为具有数据存储功能的设备,包括自动驾驶车辆、充电桩、智能手机、平板电脑、笔记本电脑、可穿戴设备等等。参见图1,为实现上述数据写入方式,该电子设备的数据存储系统包括应用程序模块、nvm模块、ram及flash存储器。
48.其中,应用程序模块包括多个应用程序,在至少一个应用程序运行过程中,将产生大量数据,本技术实施例提供的数据写入方法,主要针对的是这些数据进行写入。
49.nmv模块用于管理各个应用程序的数据存储。该管理包括调用nmv配置文件为每个应用程序配置数据来源标识及数据长度。该数据来源标识用于标识flash存储器中存储该应用程序的专属数据的数据块。该数据长度用于确定flash存储器中存储该应用程序的专属数据的数据块的大小。基于每个应用程序对应的数据来源标识和数据长度,nmv模块为每个应用程序配置不同的数据块,从而避免不同应用程序的专属数据写入同一存储地址而发生冲突,提高了数据写入的成功率。在实际应用过程中,每个应用程序无需去flash存储器中挖取存储空间,只需记录对应的数据来源标识,当需要向flash存储器中写入数据时,通过向nvm模块发送携带该数据来源标识的数据写入请求,nvm模块根据该数据来源标识对应的数据块,将待写入数据写入到flash存储器中相应数据块中。采用该种方式完全隔绝了应用程序对flash存储器驱动的依赖,提高了应用程序的开发效率。该nvm模块还为各个应用程序的日志数据统一配置一个数据来源标识及数据长度,并基于该来源标识和数据长度,为日志数据配置一个数据块,这样,多个应用程序的日志数据将统一存储在该数据块中。
50.图2示出了上述基于nmv模块对应用程序的数据的管理过程,参见图2,nmv模块调用nmv配置文件,为应用程序分配一个id(即数据来源标识)和数据长度,进而将该id发送给应用程序,由应用程序进行存储。当应用程序运行过程中有数据写入需求时,该应用程序可向nvm模块发送数据写入请求,nvm模块接收到数据写入请求之后,将该数据写入到flash存储器中;当应用程序在运行过程中有数据读取需求时,该应用程序也可向nvm模块发送数据读取请求,nvm模块接收到数据读取请求之后,从flash存储器中获取相应数据,进而将该数据返回给应用程序。
51.ram作为缓存空间,用于存储应用程序的专属数据。当nvm模块基于专属数据的数据接口接收到应用程序发送的数据写入请求时,先将待写入数据与ram中存储的该应用程序的专属数据进行比较,在该待写入数据与ram中存储的该应用程序的专属数据不同时,将ram中存储的该应用程序的专属数据更新为该待写入数据,进而将ram更新后的数据写入到flash存储器中。通过将待写入数据与ram中存储的专属数据进行比较,避免相同数据重复写入,减少了flash存储器的擦写次数,提高了flash存储器的使用寿命。
52.flash存储器用于存储应用程序的专属数据和日志数据。该flash存储器包括多个数据块,每个数据块用于存储不同应用程序的专属数据及各个应用程序的日志数据。
53.本技术实施例提供了一种数据写入方法,以电子设备执行本技术实施例为例,参见图3,本技术实施例提供的方法流程包括:301、接收数据写入请求。
54.其中,数据写入请求包括用于接收数据写入请求的数据接口的接口标识、第一数据来源标识及第一数据等。本技术实施例预先配置有两种数据接口,一种数据接口用于接收针对第一类型数据的数据写入请求,另一种数据接口用于接收针对第二类型数据的数据写入请求。为便于区分出不同种类的数据接口,本技术实施例还将为每种数据接口设置接口标识。第一数据来源标识用于确定第一数据在flash存储器中对应的数据块。
55.302、当基于接口标识确定第一数据为第一类型数据,且第一数据与预设缓存空间中存储的第一数据来源标识对应的第二数据不同时,将第二数据更新为第一数据,并将第一数据写入到flash存储器的第一数据块中。
56.其中,第一类型数据为写入频率小于预设频率的数据,例如,应用程序的专属数据等,该专属数据可以为应用程序运行过程中所需要的数据。该预设频率可由技术人员进行设定。第一数据块用于存储第一数据来源标识对应的第一类型数据。
57.303、当基于接口标识确定第一数据为第二类型数据,且flash存储器的第二数据块中存在未写满扇区,将第一数据写入到未写满扇区中。
58.其中,第二类型数据为写入频率大于预设频率的数据,例如,应用程序的日志数据等。第二数据块用于存储第一数据来源标识对应的第二类型数据。
59.本技术实施例提供的方法,在接收到数据写入请求时,根据接口标识确定第一数据的数据类型,该数据类型包括第一类型数据和第二类型数据,该第一类型数据的写入频率低于第二类型数据的写入频率,针对不同类型的数据,采取不同的数据写入方式。在第一数据为第一类型数据,且第一数据与预设缓存空间中存储的第二数据不同时,将第二数据更新为第一数据,进而将预设缓存空间中的第一数据写入到flash存储器的第一数据块。该方法通过预设缓存空间中存储的第二数据对待写入flash存储器的第一数据进行校验,避
免相同的数据重复写入到flash存储器中,提高了flash存储器的使用寿命。在第一数据为第二类型数据,且flash存储器的第二数据块中存在未写满扇区时,无需对flash存储器执行擦除操作,直接将待写入的第一数据写入到未写满扇区中。由于并非每次数据写入时都会执行擦除操作,而是以数据块为单位,在第二数据块中各个扇区均已写满时,执行一次擦除操作,采用该种方法大大减少了flash存储器的擦除次数,提高了flash存储器的使用寿命。
60.本技术实施例提供了一种数据写入方法,参见图4,以电子设备执行本技术实施例为例,本技术实施例提供的方法流程包括:401、接收数据写入请求,并将数据写入请求加入到请求队列中。
61.在应用程序运行过程中,当需要将第一数据写入到flash存储器时,该应用程序根据第一数据的数据类型,调用不同的数据接口向nvm模块发送数据写入请求,该数据写入请求包括数据接口的接口标识、第一数据来源标识及第一数据等。
62.在实际应用场景下,nvm模块同一时间内会接收到大量的数据写入请求,由于数据写入速度较快,这些数据写入请求容易被覆盖,导致待写入数据丢失,为避免数据丢失,本技术实施例提供的方法,在接收到数据写入请求后,还将该数据写入请求加入到请求队列中。由于本技术实施例中涉及到不同类型的数据,而不同类型的数据具有不同的写入方式,为将不同类型的数据的写入过程分开,以提高数据写入的成功率,在本技术实施例中,nvm模块维护两个请求队列,每个请求队列与一种接口标识对应,用于存储该接口标识对应的数据接口接收到的数据写入请求。两个请求队列分别为第一请求队列和第二请求队列,该第一请求队列与用于接收第一类型数据的数据接口的接口标识对应,该第二请求队列与用于接收第二类型数据的数据接口的接口标识对应。当接收到数据写入请求,nvm模块根据该数据写入请求中携带的接口标识,确定该数据写入请求对应的请求队列,进而将该数据写入请求加入到该接口标识对应的请求队列中。
63.由于请求队列的存储空间是有限的,为避免请求队列中的数据写入请求外溢,即请求队列的存储空间已满无法存储数据写入请求,本技术实施例在接收到数据写入请求后,还将根据数据写入请求中携带的接口标识,确定该接口标识对应的请求队列,如果接口标识为用于接收第一类型数据的接口标识,则判断第一请求队列是否存在剩余存储空间,当第一请求队列中存在剩余存储空间,则将该数据写入请求加入到第一请求队列中;如果接口标识为用于接收第二类型数据的接口标识,则判断第二请求队列是否存在剩余存储空间,当第二请求队列中存在剩余存储空间,则将该数据写入请求加入到第二请求队列中。
64.在本技术的另一个实施例中,当确定请求队列中不存在剩余存储空间,nvm模块向应用程序返回提示消息,该提示消息用于提示应用程序请求队列的存储空间已满。采用该种反馈机制,能够避免请求队列中的数据写入请求外溢,不仅能够减轻系统的数据写入压力,而且能够避免数据丢失。
65.402、当达到请求队列中数据写入请求的处理时间,执行对第一数据的写入操作。
66.当将数据写入请求加入到请求队列后,电子设备按照先入先出原则,对该请求队列中数据写入请求进行处理。当达到请求队列中该数据写入请求的处理时间,电子设备基于该数据写入请求,执行对第一数据的写入操作。根据第一数据的类型,电子设备在执行对第一数据的写入操作时,将采用不同的写入方式。当第一数据为第一类型数据,电子设备将
采用步骤403对第一数据进行写入,具体参见下述步骤403,此处暂不详述;当第一数据为第二类型数据,电子设备将采用步骤404对该第一数据进行写入,具体参见下述步骤404,此处暂不详述。
67.403、当基于接口标识确定第一数据为第一类型数据,且第一数据与预设缓存空间中存储的第一数据来源标识对应的第二数据不同时,将第二数据更新为第一数据,并将第一数据写入到flash存储器的第一数据块中。
68.其中,预设缓存空间可以为ram等。在本技术实施例中,为便于对不同应用程序的第一类型数据进行管理,预先会为不同应用程序的第一类型数据在预设缓存空间中分配不同的存储区域。当系统上电时,电子设备会将flash存储器中存储的不同应用程序的第一类型数据写入到预设缓存空间的相应存储区域。在接收到针对第一数据的数据写入请求,并基于该数据写入请求携带的接口标识确定该第一数据为第一类型数据时,响应于该数据写入请求,电子设备将第一数据与预设缓存空间中存储的第一数据来源标识对应的第二数据进行比较,当第一数据和第二数据不同时,电子设备将第二数据更新为第一数据,然后再将预设缓存空间中的第一数据写入到flash存储器的第一数据块。由于预设缓存空间可以随时从任何一个指定的地址写入(存入)或读出(取出)数据,因此,电子设备在将第二数据更新为第一数据时,可直接擦除预设存储空间中的第二数据,然后基于第二数据的存储地址,将第一数据写入到该存储地址所指示的存储区域中。
69.在本技术实施例中,电子设备将预设缓存空间中的第一数据写入到flash存储器的第一数据块时,需要先擦除第一数据块中存储的第二数据,然后再将预设缓存空间中的第一数据写入到第一数据块中。为避免擦除过程或者数据写入过程发生异常,导致第一数据块中存储的第二数据丢失,在擦除第一数据块中存储的第二数据之前,需要将第一数据块中存储的第二数据写入到第三数据块中,在将第一数据块中存储的第二数据成功写入到第三数据块后,再擦除第一数据块中存储的第二数据。其中,第三数据块用于备份第一数据块中存储的数据。
70.为提高写入数据的准确性,避免写入的数据被篡改,本技术实施例在将预设缓存空间中的第一数据写入到第一数据块之前,还将对预设缓存空间中的第一数据进行校验,得到第一校验值,再将预设缓存空间中的第一数据写入到第一数据块后,还将对第二数据块中存储的第一数据进行校验,得到第二校验值,然后将第一校验值与第二校验值进行比较,当第一校验值与第二校验值相同时,确定将第一数据写入到flash存储器的第一数据块中,当第一校验值与第二校验不同时,需要再次将预设缓存空间中的第一数据写入到flash存储器的第一数据块中,直至第一检验值与第二校验值相同。其中,第一校验值和第二校验值可以为crc(cyclic redundancy check,循环冗余校验)值等。
71.在本技术的另一个实施例中,当基于接口标识确定第一数据为第一类型数据,且第一数据与第二数据相同时,不对预设缓存空间中存储的第一数据来源标识对应的第二数据进行更新。由于本技术中第一类型数据的更新机制是,先更新预设缓存空间中相应存储区域的数据,再将预设缓存空间中相应存储区域内更新的数据写入到flash存储器中,而在第一数据与第二数据相同时,预设缓存空间中存储的第一数据来源标识对应的第二数据并未更新,因而不会将第一数据写入到flash存储器的第一数据块中。采用该种存储机制,能够避免对相同数据的重复写入,减少了数据写入次数,延长了flash存储器的使用寿命。
72.在实际应用场景下,应用程序不仅有对第一类型数据的写入需求,还有对第一类型数据的读取需求。当应用程序需要读取flash存储器中存储的第一类型数据时,该应用程序可向nvm模块发送数据读取请求,当接收到应用程序发送的数据读取请求,nvm模块将该数据读取请求发送给ram,由ram从flash存储器读取相应数据,进而将数据发送至nvm模块,再由nvm模块发送至应用程序。在该过程中,为避免数据读取请求被覆盖,nvm模块也可将该数据读取请求加入到第一请求队列中,进而在达到该数据读取请求的处理时间时,执行该数据读取请求。
73.对于上述第一类型数据的写入和读取过程,下面将结合图1进行说明。
74.参见图1,在应用程序运行过程中,当需要将专属数据写入到flash存储器时,该应用程序调用专属数据的数据接口,向nvm模块发送数据写入请求,nvm模块接收到数据写入请求,将该数据写入请求加入到第一请求队列中。当达到该第一请求队列中该数据写入请求的处理时间,电子设备执行对该专属数据的写入操作。具体地,电子设备判断该专属数据与ram中存储的该应用程序的专属数据是否相同,当该专属数据与ram中存储的该应用程序的专属数据不同时,电子设备对ram中存储的该应用程序的专属数据进行更新,进而将更新后的数据写入到该应用程序在flash存储器中对应的数据块中。
75.当需要从flash存储器中读取专属数据时,应用程序可向nvm模块发送数据读取请求,当接收该数据读取请求,nvm模块将该数据读取请求加入到第一请求队列中,进而达到该第一请求队列中该数据读取请求的处理时间,将该数据读取请求发送至ram,由ram从flash存储器读取相应专属数据,进而将该专属数据发送至nvm模块,再由nvm模块发送给该应用程序。
76.当然,如果nvm模块想要获知各个应用程序的专属数据在flash存储器中的存储状态,nvm模块还可直接向flash存储器发送数据写入请求或数据读取请求,而无需经过ram。
77.404、当基于接口标识确定第一数据为第二类型数据,且flash存储器的第二数据块中存在未写满扇区,将第一数据写入到未写满扇区中。
78.在本技术实施例中,在接收到数据写入请求,并基于该数据写入请求中携带的接口标识确定该第一数据为第二类型数据时,响应于该数据写入请求,电子设备检测flash存储器的第二数据块中是否存在未写满扇区,当flash存储器的第二数据块中存在未写满扇区,电子设备无需执行擦除操作,直接将第一数据写入到未写满扇区中。具体地,电子设备将第一数据写入到未写满扇区时,可采用如下方法:获取第二数据块当前写入操作的存储地址,并将存储地址的下一存储地址作为第一数据写入操作的初始地址,进而基于初始地址对第一数据进行写入。基于初始地址对第一数据进行写入时,电子设备判断未写满扇区的剩余存储空间是否大于等于第一数据的大小,当未写满扇区的剩余存储空间大于等于第一数据的大小,则从初始地址开始对第一数据进行写入,直至第一数据全部写入;当未写满扇的剩余存储空间小于第一数据的大小,则从初始地址开始对第一数据进行写入,直至写满第二数据块,将第二数据块中的数据写入到第四数据块中,擦除第二数据块中存储的数据,再从第二数据块的首地址开始对第一数据中剩余的数据进行写入。其中,第四数据块用于备份第二数据块中存储的数据,且该第四数据块的存储空间大于等于第二数据块的存储空间,从而使得第二数据块中的全部数据都能备份到第四数据块中。
79.在本技术的另一个实施例中,当基于接口标识确定第一数据为第二类型数据,且
flash存储器的第二数据块中不存在未写满扇区,电子设备将第二数据块中的数据备份到第四数据块,并擦除第二数据块中存储的数据,然后再从第二数据块的首地址开始对第一数据进行写入。
80.由于各个应用程序在运行过程中日志数据不断产生,为了能够后续对各个应用程序的运行过程进行追溯,需要存储各个应用程序的全部日志数据,这样,就需要不断地对第二数据块中的数据进行备份。
81.通过上述内容可以看出,一方面,采用现有的数据写入方法每次在执行数据写入操作之前都需要执行一次擦除操作,flash存储器的擦写次数较多,而采用本技术实施例提供的方法,无需在每次写入操作操作之前执行擦除操作,只在第二数据块中各个扇区均写满后,才执行一次擦除操作,flash存储器的擦写次数较少,能够提高flash存储器的使用寿命。
82.另一方面,由于第二数据块的大小由nvm模块进行配置,在不同的应用场景下,第二数据块的大小并不是固定不变的,因而采用本技术实施例提供的方法,能够备份的第二类型数据的大小也是自适应的。例如,如果nvm模块配置的第二数据块的大小为64k,则可对64k的第二类型数据进行备份;如果nvm模块配置的第二数据块的大小为128k,则可对128k的第二类型数据进行备份。
83.对于上述第二类型数据的写入过程,下面将结合图5进行说明。
84.参见图5,flash存储器中用于存储日志数据的第二数据块的大小为64k,当接收到应用程序发送的数据读取请求,电子设备将该应用程序的日志数据滚动写入到flash存储器的第二数据块中,当该第二数据块中各个扇区存储已满,对该第二数据块中的64k的日志数据进行备份,然后从第二数据块的首地址开始写入数据。
85.在本技术实施例中,由于各个应用程序的日志数据都写入到同一数据块中,每个应用程序的日志数据的写入地址并不固定,为了能够读取应用程序的日志数据,日志数据在写入到第二数据块之前,需要在日志数据中记录该日志数据的相关信息,例如,来源于哪个应用程序、写入时间、功能等等,从而在读取应用程序在某一时间段的日志数据时,可通过对各个日志数据解析获取。
86.为了更好地对第二类型数据进行管理,本技术实施例还将第二类型数据的存储地址写入到第一类型数据的存储区域内,从而在后续应用过程中能够根据该存储地址,获知该存储地址的写入时刻,进而获知该写入时刻第二数据块的写入位置,进而通过从该写入位置向前读取该写入时刻之前的第二类型数据。由于第二类型数据的数量较多,如果将第二类型数据频繁地写入到第一类型数据的存储区域,将影响flash存储器的使用寿命,因此,本技术实施例可设置预设触发事件,该预设触发事件可以为预设时间间隔,例如,一天等。响应于预设触发事件,电子设备获取第二数据块中写入时刻与预设触发事件发生时刻最邻近的目标数据,进而将目标数据的存储地址写入到目标数据块中。
87.具体地,电子设备将目标数据的存储地址写入到目标数据块中时,可对该目标数据进行解码,得到该目标数据的第二数据来源标识,进而根据该第二数据来源标识,确定该第二数据来源标识对应的目标数据块,进而将目标数据的存储地址写入到目标数据块中。
88.本技术实施例虽然没有使用eeprom,但是通过软件方法实现了flash存储器对 eeprom的模拟,节约了元器件的成本。另外,本技术实施例中nvm模块综合考虑了数据安全
性、flash存储器成本、使用方便以及可拓展性等多方面的需求,满足了不同项目的数据存储要求。
89.本技术实施例提供的方法,在接收到数据写入请求时,根据接口标识确定第一数据的数据类型,该数据类型包括第一类型数据和第二类型数据,该第一类型数据的写入频率低于第二类型数据的写入频率,针对不同类型的数据,采取不同的数据写入方式。在第一数据为第一类型数据,且第一数据与预设缓存空间中存储的第二数据不同时,将第二数据更新为第一数据,进而将预设缓存空间中的第一数据写入到flash存储器的第一数据块。该方法通过预设缓存空间中存储的第二数据对待写入flash存储器的第一数据进行校验,避免相同的数据重复写入到flash存储器中,提高了flash存储器的使用寿命。在第一数据为第二类型数据,且flash存储器的第二数据块中存在未写满扇区时,无需对flash存储器执行擦除操作,直接将待写入的第一数据写入到未写满扇区中。由于并非每次数据写入时都会执行擦除操作,而是以数据块为单位,在第二数据块中各个扇区均已写满时,执行一次擦除操作,采用该种方法大大减少了flash存储器的擦除次数,提高了flash存储器的使用寿命。
90.请参考图6,其示出了本技术实施例提供了一种数据写入装置的结构示意图,该装置可以通过软件、硬件或者二者结合实现,成为电子设备的全部或一部分,该装置包括:接收模块601,用于接收数据写入请求,该数据写入请求包括用于接收数据写入请求的数据接口的接口标识、第一数据来源标识及第一数据;更新模块602,用于当基于接口标识确定第一数据为第一类型数据,且第一数据与预设缓存空间中存储的第一数据来源标识对应的第二数据不同时,将第二数据更新为第一数据;第一写入模块603,用于将第一数据写入到flash存储器的第一数据块中,第一类型数据为写入频率小于预设频率的数据,该第一数据块用于存储第一数据来源标识对应的第一类型数据;第二写入模块604,用于当基于接口标识确定第一数据为第二类型数据,且flash存储器的第二数据块中存在未写满扇区,将第一数据写入到未写满扇区中,该第二类型数据为写入频率大于预设频率的数据,该第二数据块用于存储第一数据来源标识对应的第二类型数据。
91.在本技术的另一个实施例中,该装置还包括:第三写入模块,用于当系统上电时,将第一数据块中存储的第二数据写入到预设缓存空间中第一数据来源标识对应的存储区域;比较模块,用于响应于数据写入请求,将第一数据与第二数据进行比较;更新模块,用于当第一数据和第二数据不同时,将第二数据更新为第一数据。
92.在本技术的另一个实施例中,第一写入模块,用于擦除第一数据块中存储的第二数据;对预设缓存空间中的第一数据进行校验,得到第一校验值;将预设缓存空间中的第一数据写入到第一数据块中;对第一数据块中存储的第一数据进行校验,得到第二校验值;当第一校验值与第二校验值相同时,确定将第一数据写入到flash存储器的第一数据块中。
93.在本技术的另一个实施例中,该装置还包括:第四写入模块,用于将第一数据块中存储的第二数据写入到第三数据块中,该第
三数据块用于备份第一数据块中存储的数据;第一写入模块,用于响应于第一数据块中存储的第二数据写入到第三数据块中,擦除第一数据块中存储的第二数据。
94.在本技术的另一个实施例中,第一写入模块,还用于当基于接口标识确定第一数据为第一类型数据,且第一数据与第二数据相同时,不执行将第一数据写入到所述第一数据块的操作。
95.在本技术的另一个实施例中,第二写入模块,用于获取第二数据块当前写入操作的存储地址;将存储地址的下一存储地址作为第一数据写入操作的初始地址;基于初始地址对第一数据进行写入。
96.在本技术的另一个实施例中,第二写入模块,用于如果未写满扇区的剩余存储空间大于等于第一数据的大小,则从初始地址开始对第一数据进行写入,直至第一数据全部写入;如果未写满扇的剩余存储空间小于第一数据的大小,则从初始地址开始对第一数据进行写入,直至写满第二数据块,将第二数据块中的数据写入到第四数据块中,擦除第二数据块中存储的数据,再从第二数据块的首地址开始对第一数据中剩余的数据进行写入,该第四数据块用于备份第二数据块中的数据。
97.在本技术的另一个实施例中,该装置还包括:第五写入模块,用于当根据接口标识确定第一数据为第二类型数据,且第二数据块中不存在未写满扇区,将第二数据块中的数据写入到第四数据块中,擦除第二数据块中存储的数据,再从第二数据块的首地址开始对第一数据进行写入,该第四数据块用于备份第二数据块中存储的数据。
98.在本技术的另一个实施例中,该装置还包括:第一获取模块,用于响应于预设触发事件,获取第二数据块中写入时刻与预设触发事件发生时刻最邻近的目标数据;第六写入模块,用于将目标数据的存储地址写入到目标数据块中。
99.在本技术的另一个实施例中,第六写入模块,用于对目标数据进行解码,得到目标数据的第二数据来源标识;确定第二数据来源标识对应的目标数据块;将目标数据的存储地址写入到目标数据块中。
100.在本技术的另一个实施例中,该装置还包括:第二获取模块,用于获取接口标识对应的请求队列,请求队列用于存储接口标识对应的数据接口接收到数据写入请求;判断模块,用于判断请求队列中是否存在剩余存储空间;加入模块,用于当确定请求队列中存在剩余存储空间,将数据写入请求加入到请求队列中;执行模块,用于当达到请求队列中数据写入请求的处理时间,执行对第一数据的写入操作。
101.在本技术的另一个实施例中,该装置还包括:返回模块,用于当确定请求队列中不存在剩余存储空间,返回提示消息,提示消息用于提示请求队列的存储空间已满。
102.综上所述,本技术实施例提供的装置,在接收到数据写入请求时,根据接口标识确
定第一数据的数据类型,该数据类型包括第一类型数据和第二类型数据,该第一类型数据的写入频率低于第二类型数据的写入频率,针对不同类型的数据,采取不同的数据写入方式。在第一数据为第一类型数据,且第一数据与预设缓存空间中存储的第二数据不同时,将第二数据更新为第一数据,进而将预设缓存空间中的第一数据写入到flash存储器的第一数据块。该方法通过预设缓存空间中存储的第二数据对待写入flash存储器的第一数据进行校验,避免相同的数据重复写入到flash存储器中,提高了flash存储器的使用寿命。在第一数据为第二类型数据,且flash存储器的第二数据块中存在未写满扇区时,无需对flash存储器执行擦除操作,直接将待写入的第一数据写入到未写满扇区中。由于并非每次数据写入时都会执行擦除操作,而是以数据块为单位,在第二数据块中各个扇区均已写满时,执行一次擦除操作,采用该种方法大大减少了flash存储器的擦除次数,提高了flash存储器的使用寿命。
103.图7示出了本技术一个示例性实施例提供的一种电子设备700的结构框图。通常,电子设备700包括有:处理器701和存储器702。
104.处理器701可以采用dsp(digital signal processing,数字信号处理)、fpga(field-programmable gate array,现场可编程门阵列)、pla(programmable logic array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器701也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(central processing unit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器701可以在集成有gpu(graphics processing unit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器701还可以包括ai(artificial intelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。
105.存储器702可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是可以是非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是cd-rom(compact disc read-only memory ,只读光盘)、rom 、ram(random access memory,随机存取存储器)、磁带、软盘和光数据存储设备等。该计算机可读存储介质中存储有至少一条计算机程序,该至少一条计算机程序被执行时能够实现上述数据写入方法。
106.当然,上述电子设备必然还可以包括其他部件,例如输入/输出接口、通信组件等。输入/输出接口为处理器和外围接口模块之间提供接口,上述外围接口模块可以是输出设备、输入设备等。通信组件被配置为便于电子设备和其他设备之间有线或无线方式的通信等。
107.本领域技术人员可以理解,图7中示出的结构并不构成对电子设备700的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
108.本技术实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条计算机程序,所述至少一条计算机程序被处理器执行时能够实现上述的数据写入方法。
109.本技术中的方法可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序或指令。在计算机上加载和执行所述计算机程序或指令时,
全部或部分地执行本技术所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、网络设备、用户设备、核心网设备、oam(operation administration and maintenance,操作管理维护)或者其它可编程装置。所述计算机程序或指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序或指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是集成一个或多个可用介质的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,例如,软盘、硬盘、磁带;也可以是光介质,例如,数字视频光盘;还可以是半导体介质,例如,固态硬盘。该计算机可读存储介质可以是易失性或非易失性存储介质,或可包括易失性和非易失性两种类型的存储介质。
110.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
111.以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1