存储器共享方法

文档序号:6480148阅读:139来源:国知局
专利名称:存储器共享方法
技术领域
本发明涉及存储器共享(memory sharing)方法,尤其涉及闪存驱动程序(flash driver)的存储器共享方法,该方法用于静态随机存取存储器(StaticRandom Access Memory, SRAM)分配的堆栈存储器(stack memory)中加载闪存驱动程序。
背景技术
在嵌入式系统(embedded system)中,由于闪存驱动程序不能在其自身的闪存 存储器(flash memory)中执行,因此需要将闪存驱动程序代码(code)在只读存储器 (read-only memory, ROM)、静态随机存取存储器(Static RandomAccess Memory, S廳)、 动态随机存取存储器(Dynamic Random AccessMemory, DRAM)或其它闪存存储器中存 储及执行。然而,若闪存驱动程序代码存储在ROM中,闪存驱动程序则会缺乏可扩充性 (e邓andability)并使硬件成本提高。此外,很多电子装置并不具有DRAM或其它闪存存储 器。因此,闪存驱动程序代码通常在SRAM中存储及执行。 将闪存驱动程序代码存储在SRAM中的传统方法的其中一种做法是为闪存驱动程 序分配专用(dedicated) SRAM,但此做法会使硬件成本更高;另一种做法是最初将闪存驱 动程序代码存储在硬盘(hard disk)或其它外部存储器中,当需要执行闪存驱动程序的一 个程序时,则在SRAM中加载闪存驱动程序的程序代码(program code),当不再需要执行 时,则从SRAM中卸载(unload)该程序代码。上述第二种方法有利于节省存储器空间,但是 有效地节省存储器空间也需要一个适当的存储器分配方法。

发明内容
为了达到有效地节省存储器空间,本发明提供了存储器共享方法。 本发明所披露的存储器共享方法,包含决定出与目标闪存驱动程序相应的目标存
储器的容量;以及当可用于数据存储的堆栈存储器的未使用的容量大于所述目标存储器的
容量时,将所述目标闪存驱动程序所包含的目标闪存程序加载至堆栈存储器中,其中所述
堆栈存储器分配于特定存储器装置内。 利用本发明所提供的存储器共享方法,为在SRAM中加载及执行闪存驱动程序代 码提供了一个适当的存储器分配方法,有效地节省了存储器空间。 以下为根据多个图式对本发明的较佳实施例进行详细描述,本领域习知技艺者阅 读后应可明确了解本发明的目的。


图1为根据本发明的一个实施例表明SRAM、堆栈存储器及目标存储器之间的关系 示意图。 图2为表明决定目标存储器的容量的示意图。 图3为表明堆栈存储器中不同闪存驱动程序中目标存储器的不同容量的示意图。
图4为根据本发明一个实施例的存储器共享方法流程图。
具体实施例方式
由于考虑到电子装置的体积和存储器的成本,一些电子装置不具有DRAM。当要执 行闪存驱动程序时,由于将闪存驱动程序代码存储在ROM中缺少扩充性,所以通常将闪存 驱动程序代码存储在SRAM中。 —般来说,分配于SRAM中的堆栈存储器用于临时存储变量。根据执行程序产生的 所有变量的大小,决定堆栈存储器容量,更确切地说,堆栈存储器的容量能够同时存储所有 可能存储在堆栈存储器中的变量。因此,大部分时间里,堆栈存储器不是满载的,而是具有 可用的存储器空间。这些可用的存储器空间被浪费了,并且也没有应用于其它程序。根据 本发明的一个实施例,在堆栈存储器中存储及执行闪存驱动程序代码,以节省ROM和SRAM 空间。 请参阅图1,图1为根据本发明的一个实施例表明SRAM100、堆栈存储器110及目 标存储器120之间的关系示意图。如图1所示,分配于SRAM100中的堆栈存储器110,用于存 储执行程序产生的变量,若需要执行闪存驱动程序,且可用目标存储器120的容量大于闪 存驱动程序代码的大小,则将闪存驱动程序代码存储在堆栈存储器110的目标存储器120 中。在此实施例中,当需要执行闪存驱动程序时,则将闪存驱动程序代码从其它存储装置加 载并存储至堆栈存储器110的目标存储器120中,其中目标存储器120安排于堆栈存储器 110中的固定存储器空间。如图1所示,当变量置入堆栈存储器110时,变量的存储方向是 从所述堆栈存储器110的高地址到低地址顺序地存储的,为了防止影响其它程序的变量存 储,用于存储闪存驱动程序代码的固定目标存储器空间界定在堆栈存储器110的预定地址 与最低地址之间。 然而,在实践中,最低地址可能会被其它特殊的变量或者所需的程序代码所占据。 因此,用于存储闪存驱动程序代码的目标存储器空间界定在堆栈存储器110的预定地址与 最低可用地址之间。 此外,在另一实施例中,当变量的存储方向(图1中未标示)是从堆栈存储器110 的低地址到高地址顺序地存储时,用于存储闪存驱动程序代码的目标存储器空间界定在堆 栈存储器110的预定地址与最高可用地址之间。 此外,设定堆栈存储器110的目标存储器120的容量等于多个闪存程序代码中的 一个闪存程序代码的最大大小,其中多个闪存程序代码分别执行闪存驱动程序的不同功 能。图2表明决定目标存储器120的容量的示意图。如图2所示,闪存驱动程序具有三个 闪存程序(子程序)第一程序,即获取闪存存储器信息(FlaSh_GetInfo);第二程序,即擦 除闪存存储器(Flash—Erase);及第三程序,即写入闪存存储器(Flash—Program) 。 Flash_ Getlnfo用于核对闪存存储器类型的闪存程序,Flash—Erase用于在闪存存储器上执行擦 除操作的闪存程序,Flash—Program用于在闪存存储器上写入程序操作的闪存程序。上述 三个闪存程序为闪存驱动程序的基本功能,这些闪存程序并不同时执行。因此,设定目标存 储器120的容量等于多个闪存程序代码中的一个闪存程序代码的最大大小,能够确保每个 程序代码成功存储在目标空间内,在一个实施例中,Flash—Getlnfo的程序代码具有最大大 小。
然而,设计者考虑将其它闪存程序添加到闪存驱动程序中,或可以同时执行更多 的程序代码。因此,通过比较闪存程序的组合决定目标存储器120的容量,其中每个闪存程 序组合包含至少一个闪存程序代码,且包含在闪存程序组合中的闪存程序能够同时执行。 设定目标存储器的容量等于特定闪存程序组合中闪存程序代码的最大大小。
然而,由于闪存程序代码从目标存储器120的顶端地址(即图1中所示的地址 Tar_Top)开始存储,当加载的闪存程序的大小小于目标存储器120的容量时,接近最低地 址的存储器空间则被浪费且不能用于其它程序。如图2所示,由于目标存储器120的容量 由Flash—Getlnfo所决定,且目标存储器120的容量大于Flash_Program代码大小,因此若 Flash—Program最经常使用,那么大部分时间目标存储器120并未满载。为了解决这个问 题,堆栈存储器110为Flash_Program设定另一个开始地址(beginning address),其中位 于开始地址与最低可用地址之间的存储器的容量等于Flash—Program代码的大小。因此, 当加载Flash—Program时,释放更多堆栈存储器110的空间,以用于其它程序。
此外,由于考虑到生产管理和物质准备,电子装置可采用不同的闪存存储器和不 同的闪存驱动程序。每个闪存驱动程序具有自己的闪存程序代码,因此需要利用根据上述 用于决定目标存储器的容量的规则,以决定每个闪存驱动程序的目标存储器大小。当对电 子器件通电(power on)时,则加载每个闪存驱动程序代码至SRAM,以核对闪存存储器类 型。决定闪存驱动程序存储器类型之后,也决定了相应的目标存储器大小。图3表明堆栈 存储器中不同闪存驱动程序中目标存储器的不同容量的示意图。为简洁,图3中仅显示三 个堆栈存储器210、310、410,如图3所示,第一堆栈存储器210、第二堆栈存储器310及第三 堆栈存储器410分别包含用于第一闪存驱动程序的第一 目标存储器220、用于第二闪存驱 动程序的第二目标存储器320及用于第三闪存驱动程序的第三目标存储器420。由图可知, 用于第一闪存驱动程序的第一目标存储器220的容量大于用于第二闪存驱动程序的第二 目标存储器320的容量,且小于用于第三闪存驱动程序的第三目标存储器420的容量。因 此三个目标存储器220、320、420的容量是不同的。 若可用堆栈存储器的容量大于目标存储器的容量,系统则加载闪存驱动程序代码 至目标存储器。利用堆栈指针(stack pointer)核对可用堆栈存储器的容量。堆栈指针指 向堆栈中当前最上面的数据(即最迟的加载数据)项,通过比较堆栈指针地址和目标存储 器的最高地址(即图1中所示的地址Tar—Top),决定是否将闪存程序加载至目标存储器。 假定变量的存储方向是从堆栈存储器的高地址到低地址顺序地存储的,当堆栈指针地址低 于目标存储器的高地址时,那么可用堆栈存储器的容量则小于目标存储器的容量,且不会 同时加载闪存程序;当堆栈指针地址大于目标存储器的高地址时,那么可用堆栈存储器的 容量足够加载闪存程序,且此时可加载闪存程序至目标存储器。 请注意,加载闪存驱动程序代码至SRAM的堆栈存储器仅为本发明的一个典型实 施例。然而,在不脱离本发明的精神下,闪存驱动程序代码也可被加载至DRAM的堆栈存储 器或其它存储器。这些变换都属于本发明的范围之内。 图4为根据本发明一个实施例的存储器共享方法流程图。参阅图4所示的流程, 存储器共享方法的步骤描述如下 步骤400 :在目标闪存驱动程序所包含的多个闪存程序中,决定具有最大大小的 特定闪存程序。
步骤402 :设定目标存储器的容量等于特定闪存程序的最大大小。 步骤404:当可用于数据存储的堆栈存储器所未使用的容量大于目标存储器的容
量时,将目标闪存驱动程序所包含的目标闪存程序加载至堆栈存储器中,其中堆栈存储器
分配于特定存储器装置内。 简要概述,本发明披露了存储器共享方法,用于在堆栈存储器的固定存储器空间 中存储闪存驱动程序代码;并且通过比较多个闪存程序代码的大小,设定多个闪存程序代 码中的最大大小为目标存储器的容量。 上述实施例仅用来例举本发明的实施,以及阐释本发明的技术特征,并非用来限 制本发明的范围。任何所属领域的技术人员可依据本发明的精神轻易完成的改变或均等性 安排均属于本发明所主张的范围,本发明的权利范围应以前述权利要求内容为准。
权利要求
一种存储器共享方法,其特征在于,包含决定出与目标闪存驱动程序相应的目标存储器的容量;以及当可用于数据存储的堆栈存储器的未使用的容量大于所述目标存储器的容量时,将所述目标闪存驱动程序所包含的目标闪存程序加载至所述堆栈存储器中,其中所述堆栈存储器分配于特定存储器装置内。
2. 如权利要求1所述的存储器共享方法,其特征在于,所述特定存储器装置为静态随 机存取存储器。
3. 如权利要求1所述的存储器共享方法,其特征在于,决定所述目标存储器的容量的 步骤包含在所述目标闪存驱动程序所包含的多个闪存程序中,决定具有最大大小的特定闪存程 序;以及设定所述目标存储器的容量等于所述特定闪存程序的所述最大大小。
4. 如权利要求3所述的存储器共享方法,其特征在于,所述多个闪存程序包含 第一程序,用于核对所述闪存存储器的类型; 第二程序,用于在所述闪存存储器上执行擦除操作;以及 第三程序,用于在所述闪存存储器上写入程序操作的闪存程序。
5. 如权利要求3所述的存储器共享方法,其特征在于,加载所述目标闪存程序的步骤 包含在所述堆栈存储器中分配存储器空间,其中所述存储器空间的存储器的容量等于所述 目标存储器的容量;以及加载所述目标闪存程序至所述存储器空间。
6. 如权利要求1所述的存储器共享方法,其特征在于,当变量置入所述堆栈存储器时, 所述变量的存储方向是从所述堆栈存储器的高地址到低地址顺序地存储的,并且加载所述 目标闪存程序的步骤包含加载所述目标闪存程序至所述堆栈存储器内的固定存储器空间。
7. 如权利要求6所述的存储器共享方法,其特征在于,所述固定存储器空间界定于所 述堆栈存储器的预定地址与最低可用地址之间。
8. 如权利要求1所述的存储器共享方法,其特征在于,当变量置入所述堆栈存储器时, 所述变量的存储方向是从所述堆栈存储器的低地址到高地址顺序地存储的,并且加载所述 目标闪存程序的步骤包含加载所述目标闪存程序至所述堆栈存储器内的固定存储器空间。
9. 如权利要求8所述的存储器共享方法,其特征在于,所述固定存储器空间界定于所 述堆栈存储器的预定地址与最高可用地址之间。
全文摘要
本发明披露存储器共享方法,包含决定出与目标闪存驱动程序相应的目标存储器的容量;以及当可用于数据存储的堆栈存储器的未使用的容量大于所述目标存储器的容量时,将所述目标闪存驱动程序所包含的目标闪存程序加载至堆栈存储器中,其中所述堆栈存储器分配于特定存储器装置内。利用本发明所提供的存储器共享方法,为在SRAM中加载及执行闪存驱动程序代码提供了一个适当的存储器分配方法,有效地节省了存储器空间。
文档编号G06F12/02GK101739273SQ20091000090
公开日2010年6月16日 申请日期2009年1月21日 优先权日2008年11月24日
发明者蔡建良 申请人:联发科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1