一种存储单元访问方法

文档序号:6487195阅读:170来源:国知局
一种存储单元访问方法
【专利摘要】本发明提供了一种存储单元访问方法,以预先设置的存储空间为数据的读写单位,因为所述预先设置的存储空间中包括预设数量的具有第一容量的第一存储空间,因此,能够依据数据的长度将数据以第一存储空间为单位写入和读出,从而实现了只能双字节写入或读取数据的存储空间对单字节数据的正确写入和读取。
【专利说明】一种存储单元访问方法
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种存储单元访问方法。
【背景技术】
[0002]目前,绝大多数电子设备都离不开存储器,存储器可以分为多种类型,有一类存储 器只能支持双字节写入或读取数据,使用此类存储器时,有可能会出现与上层应用不兼容 的问题。

【发明内容】

[0003]有鉴于此,本发明提供了一种存储单元访问方法,目的在于解决现有的只能双字 节写入或读取数据的存储器与上层应用不兼容的问题。
[0004]一种存储单元访问方法,包括:
[0005]向预先设置的存储空间中写入数据及所述数据的长度;
[0006]所述预先设置的存储空间包括:预设数量的具有第一容量的第一存储空间;
[0007]将所述数据的长度写入所述存储空间中左起前两个第一存储空间的中,将所述数 据从所述存储空间中左起第三个第一存储空间写入。
[0008]优选地,当所述数据的长度为2N+1时,其中,N为正整数且N > 0,所述将所述数据 从所述存储空间中左起第三个第一存储空间写入包括:
[0009]将所述数据中前2N个数据以双字节为单位从所述存储空间中左起第三个第一存 储空间依次与入;
[0010]将所述数据中第2N+1个数据写入两个所述第一存储空间中。
[0011 ] 一种存储单元访问方法,包括:
[0012]从预先设置的存储空间中读取数据的长度及数据;
[0013]所述预先设置的存储空间包括:预设数量的具有第一容量的第一存储空间;
[0014]从所述存储空间中左起前两个所述第一存储空间中读取所述存储空间中数据的 长度;
[0015]依据所述数据的长度,从所述存储空间获得数据。
[0016]优选地,当读取数据的缓存的剩余末空间的长度小于所述数据的长度时,所述依 据所述数据的长度,从所述存储空间获得数据包括:
[0017]从所述读取数据的缓存的剩余末空间左起依次将所述数据读入;
[0018]当所述读取数据的缓存的剩余末空间占满后,从所述读取数据的缓存左起,将剩 余数据依次读入。
[0019]优选地,所述具有第一容量的第一存储空间具体为:
[0020]一个字节的存储空间。
[0021]优选地,所述预设数量包括:
[0022]256。[0023]本发明实施例提供的存储单元访问方法,以预先设置的存储空间为数据的读写单 位,因为所述预先设置的存储空间中包括预设数量的具有第一容量的第一存储空间,因此, 能够依据数据的长度将数据以第一存储空间为单位写入和读出,从而实现了只能双字节写 入或读取数据的存储空间对单字节数据的正确写入和读取。
【专利附图】

【附图说明】
[0024]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。
[0025]图1为本发明实施例公开的预先设置的存储空间的结构示意图;
[0026]图2为本发明实施例公开的向存储空间中写入数据的方法的流程图;
[0027]图3为本发明实施例公开的从存储空间中读取数据的方法的流程图;
[0028]图4为本发明实施例公开的一种存储空间访问方法的应用场景的结构示意图;
[0029]图5为本发明实施例公开的一种存储空间访问方法中一种写入数据的方法的示 意图;
[0030]图6为本发明实施例公开的一种存储空间访问方法中又一种写入数据的方法的 示意图;
[0031]图7为本发明实施例公开的一种存储空间访问方法中一种读取数据的方法的流 程图;
[0032]图8为本发明实施例公开的一种存储空间访问方法中一种读取数据的示意图;
[0033]图9为本发明实施例公开的一种存储空间访问方法中又一种读取数据的示意图;
[0034]图10为本发明实施例公开的一种存储空间访问方法中又一种读取数据的示意 图;
[0035]图11为本发明实施例公开的一种存储空间访问方法中又一种写入数据的方法的 示意图;
[0036]图12为本发明实施例公开的一种存储空间访问方法中又一种读取数据的示意 图。
【具体实施方式】
[0037]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0038]本发明实施例公开了一种存储单元访问方法,应用于只能以双字节单位访问的存 储单元,所述方法在存储单元驱动层上实现,所述方法包括:
[0039]向预先设置的存储空间中写入数据及所述数据的长度;
[0040]其中,如图1所示,所述预先设置的存储空间101包括:预设数量的具有第一容量 的第一存储空间102,在图1中,存储空间101中的每一个方格都代表一个第一存储空间102,且每个第一存储空间的大小相同,本实施中,优选每个第一存储空间的大小为一个字节,一个存储空间中包括256个第一存储空间,则一个存储空间的大小为256字节。
[0041]在向存储空间101中写入数据时,具体的方法如图2所示,包括:
[0042]S201:将所述数据的长度写入所述存储空间中左起前两个第一存储空间中;
[0043]S202:将所述数据从所述存储空间中左起第三个第一存储空间写入。
[0044]本实施所述的存储单元访问方法,依据若干第一存储空间,避免了单字节数据写入与双字节数据写入的差异,在驱动层有效地消除了硬件的差异,使得只能以双字节访问的存储单元也能够保证以双字节正确地访问。
[0045]本发明实施例还公开了一种存储单元访问方法,应用于只能以双字节单位访问的存储单元,所述方法在存储单元驱动层上实现,所述方法包括:
[0046]从预先设置的存储空间中读取数据的长度及数据;
[0047]其中,所述预先设置的存储空间包括:预设数量的具有第一容量的第一存储空间, 本实施例中所述的存储空间与上述实施例中相同,可参照图1,这里不再赘述。
[0048]与上述实施例相对应的, 从存储空间101中读取数据时,如图3所示,包括:
[0049]S301:从所述存储空间中左起前两个所述第一存储空间中读取所述存储空间中数据的长度;
[0050]S302:依据所述数据的长度,从所述存储空间获得数据。
[0051]本实施例公开的存储单元访问方法,通过按照第一存储空间的大小及顺序,从存储空间中依次读出数据,使得只能以双字节访问的存储单元也能够保证以双字节正确地访问。
[0052]下面对本发明实施例所述的存储空间访问方法进行详细论述:
[0053]本发明实施例公开了一种存储单元访问方法,如图4所示,在存储单元的驱动中创建两个线程,分别记为read_thread和write_thread,应用处理器(Application Processor, AP)> 中央处理器(Central Processor, CP)侧各自有一个 read_thread 和 write_thread,并且,各有两个缓存W_buf和R_buf,分别存储写入的数据和读入的数据。在 AP和CP侧,分别使用指针组,初始化时,存储所有预设的存储空间的指针,每两个相邻的存储空间地址间差值为256,指针实际移动时,通过地址及地址差值,可以获得指针当前所指的存储空间的起始地址。
[0054]当CP将数据写入时,具体地,当数据的长度为偶数时,写入数据及数据的长度的步骤可以分为两步,第一步将数据的长度写入存储空间SLOT中左起前两个第一存储空间中,第二步将数据从存储空间中左起第三个第一存储空间依次写入。
[0055]例如:如图5所示,当数据的长度为6时,CP侧的write_thread先将6写入存储空间SLOT的左起前两个字节,再将W_buf中长度为6的数据依次写入SLOT左起的第三至第八个字节,其中,SLOT中的灰色部分表示被占用的空间,数据的长度6占用两个字节,数据本身占用6个字节,空白部分表示未被占用的剩余空间。
[0056]当数据的长度为奇数时,即当所述数据的长度为2N+1时,其中,N为正整数且 N ^ 0,所述将所述数据从所述存储空间中左起第三个第一存储空间写入包括三步:第一步将数据的长度写入存储空间SLOT中左起前两个第一存储空间中,第二步将所述数据中前 2N个数据以双字节为单位从所述存储空间中左起第三个第一存储空间依次写入,第三步将所述数据中第2N+1个数据写入两个所述第一存储空间中。
[0057]例如,如图6所示,当数据的长度为5时,CP侧的write_thread先将数据长度5写 入存储空间SLOT的左起前两个字节中,再将W_buf中前4个字节长度的数据依次写入SLOT 左起的第三至第七个字节中,最后,将最末的一个数据写入SLOT左起的第八个和第九个字 节中,优选地,将最末一个数据全部写入SLOT左起的第八个字节中,第九个字节为空如虚 线部分所示。图6中,灰色部分表示SLOT中被占用的空间,白色部分表示未被占用的空间。
[0058]当CP读数据时,当读取数据的缓存的剩余末空间的长度小于所述数据的长度时, 所述依据所述数据的长度,从所述存储空间获得数据如图7所示,包括:
[0059]S701:从所述读取数据的缓存的剩余末空间左起依次将所述数据读入;
[0060]S702:当所述读取数据的缓存的剩余末空间占满后,从所述读取数据的缓存左起, 将剩余数据依次读入;
[0061]具体地,存在以下几种情况:
[0062]如图8所示,CP侧read_thread从SLOT中读取数据至R_buf,从SLOT中获取数据 的长度为5,数据的长度为单数,且R_buf整体剩余空间(图8中R_buf白色部分为未被占用 空间)足够存储所述数据,但剩余末空间不够存储所述数据(图8中R_buf最末位的剩余一 个字节),而且所述剩余末空间为一个字节时,如图8中虚线所示,将所述数据的左起第一个 字节读入R_buf剩余末空间中的最后一个字节,所述数据中剩下的字节从R_buf剩余空间 左起第一个字节依次读入R_buf中。也就是说,读入数据中的a、b,将a放入E中,将b放 入A中,再将c、d分别放入B、C中,将e及空字节放入D及F (图中未标出)中,需要说明的 是,F中为空,没有存储数据。
[0063]实际应用中,图8中所述情况具体的实现过程为:
[0064]1、获取SLOT中数据长度为5,并且通过5&0xl=l判断数据的长度为奇数;
[0065]2、检查R_buf中有效空间为5>=5,足够存放数据,可以开始搬运数据;
[0066]3、判断R_buf末空间为1〈5,并且I = =1,先做一次搬运;
[0067]4、读取数据中的两个字节,一个放在R_buf的最后一个空间,后一个放到R_buf的 第一个空间,两次搬运结束;
[0068]5、剩余的slot中的数据必定为奇数,而且个数为5-(1+1) =3,分两次搬运;
[0069]6、搬运3-1=2整体复制到接下来的空间;
[0070]7、接着读取一个双字节(第一个是有效数据),将有效数据放入R_buf中;最后更 新dpram out指针,以及R_buf的in指针。
[0071]如图9所示,CP侧read_thread从SLOT中读取数据至R_buf,从SLOT中获取数据 的长度为7,数据的长度为单数,且R_buf整体剩余空间足够,但剩余末空间不够存储所述 数据,而且所述末空间为奇数3时,如图9中虚线所示,将所述数据的左起前两个字节整体 读入R_buf剩余末空间中的左起前两个字节中,将数据中的第三、第四个字节分别读入R_ buf剩余末空间最后一个字节及R_buf剩余空间左起第一个字节中,将剩余数据依次分别 读入R_buf剩余空间左起第2、3、4、5 (图中未标出)个字节中。也就是说,将a、b读入E、F, 将c读入G,d读入A,将e、f读入B、C,将g及一个空字节(图中未标出)读入D及H (图中 未标出)中,需要说明的是,H中并未存储数据,依然为空。
[0072]实际应用中,如图9的实现方法具体包括:[0073]1、获取SLOT中数据长度为7,并且通过7&0xl=l判定数据的长度为奇数;
[0074]2、检查R_buf中有效空间为7>=7,足够存放数据,可以开始搬运数据;
[0075]3、判断R_buf末空间为3〈7,并且3&0xl=l为奇数,做两次搬运;
[0076]4、整体拷贝3-1=2,偶数个数据到R_buf空间;
[0077]5、读取两个字节,一个放在R_buf最后一个空间,后一个放到R_buf的第一个空 间,两次搬运结束;
[0078]6、剩余的slot中的数据必定为奇数,而且个数为7-(3+1) =3,分两次搬运;
[0079]7、搬运3-1=2整体复制到接下来的空间;
[0080]8、接着读取一个双字节(第一个是有效数据),将有效数据放入R_buf中;
[0081]最后更新dpram out指针,以及read buffer的in指针。
[0082]如图10所示,CP侧read_thread从SLOT中读取数据至R_buf,从SLOT中获取数 据的长度5,数据的长度为单数,且R_buf整体剩余空间足够,但剩余末空间不够存储所述 数据,而且所述末空间为偶数2时,将所述数据的左起前两个字节读入R_buf的剩余末空间 的两个字节中,将所述数据中的剩余字节向R_buf左起依次读入。也就是说,将a、b整体读 入E、F中,将c、d整体读入A、B中,将e及一个空字节读入C、D中。
[0083]实际应用中,图10所述的情况的具体实现方法为:
[0084]1、获取SLOT中数据长度为5,并且通过5&0xl=l判定所述数据的长度为奇数;
[0085]2、检查R_buf中有效空间为6>=5,足够存放数据,可以开始搬运数据;
[0086]3、判断buffer末空间为2〈5,并且2&0xl=l为偶数数,先做一次搬运;
[0087]4、整体拷贝2,偶数个的数据到R_buf末空间;
[0088]5、剩余的slot中的数据必定为奇数,而且个数为5-(1+1) =3,分两次搬运;
[0089]6、搬运3-1=2整体复制到接下来的空间;
[0090]7、接着读取一个双字节(第一个是有效数据),将有效数据放入R_buf中;
[0091]8、最后更新dpram out指针,以及read buffer的in指针。
[0092]以上所述均为CP侧进行的数据写入及数据读取的方法,在AP侧,写入或读出线程 以同样的方法实现数据的写入和读取。
[0093]如图11所示为AP对数据进行写入的过程,AP侧的write_thread先将数据长度 5写入存储空间SLOT的左起前两个字节中,再将W_buf中前4个字节长度的数据依次写入 SLOT左起的第三至第六个字节中,最后,将最末的一个数据写入SLOT左起的第七个中,需 要说明的是,AP侧的存储空间一般支持单字节访问,因此不必将数据以双字节为单位进行 写入。图6中,灰色部分表示SLOT中被占用的空间,白色部分表示未被占用的空间。
[0094]图12为AP对数据进行读取的过程,因为AP侧的存储空间一般支持单字节访问, 因此,如图12中所示,Read_thread读出数据的长度为5后,可以直接将数据中的5个字节 整体读入R_buf中。
[0095]本实例所述的方法,在驱动层建立读写两个线程,通过预先设置的存储空间中的 第一存储空间,可以实现对双字节长度及单字节长度数据的灵活写入和读取,当数据的长 度为单字节时,依然可以以双字节写入或读出的方式实现数据的正确写入或读取,消除了 硬件间的差异。
[0096]本实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本发明实施例 对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软 件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机, 服务器,移动计算设备或者网络设备等)执行本发明各个实施例所述方法的全部或部分步 骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存 取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0097]本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它 实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
[0098]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。 对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的 一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明 将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一 致的最宽的范围。
【权利要求】
1.一种存储单元访问方法,其特征在于,包括:向预先设置的存储空间中写入数据及所述数据的长度;所述预先设置的存储空间包括:预设数量的具有第一容量的第一存储空间;将所述数据的长度写入所述存储空间中左起前两个第一存储空间的中,将所述数据从 所述存储空间中左起第三个第一存储空间写入。
2.根据权利要求1所述的方法,其特征在于,当所述数据的长度为2N+1时,其中,N为 正整数且N > O,所述将所述数据从所述存储空间中左起第三个第一存储空间写入包括:将所述数据中前2N个数据以双字节为单位从所述存储空间中左起第三个第一存储空 间依次写入;将所述数据中第2N+1个数据写入两个所述第一存储空间中。
3.一种存储单元访问方法,其特征在于,包括:从预先设置的存储空间中读取数据的长度及数据;所述预先设置的存储空间包括:预设数量的具有第一容量的第一存储空间;从所述存储空间中左起前两个所述第一存储空间中读取所述存储空间中数据的长度;依据所述数据的长度,从所述存储空间获得数据。
4.根据权利要求3所述的方法,其特征在于,当读取数据的缓存的剩余末空间的长度 小于所述数据的长度时,所述依据所述数据的长度,从所述存储空间获得数据包括:从所述读取数据的缓存的剩余末空间左起依次将所述数据读入;当所述读取数据的缓存的剩余末空间占满后,从所述读取数据的缓存左起,将剩余数 据依次读入。
5.根据权利要求1或3所述的方法,其特征在于,所述具有第一容量的第一存储空间具 体为:一个字节的存储空间。
6.根据权利要求1或3所述的方法,其特征在于,所述预设数量包括:256。
【文档编号】G06F3/06GK103577113SQ201210258654
【公开日】2014年2月12日 申请日期:2012年7月24日 优先权日:2012年7月24日
【发明者】陈永斌 申请人:联想(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1