用于配有有限ram的控制器的数据解压缩方法

文档序号:6515480阅读:210来源:国知局
用于配有有限ram的控制器的数据解压缩方法
【专利摘要】一种运作控制器(14)以对存储在主机计算机(18)上的压缩数据(22)文件解压缩并将得到的解压缩数据存储在闪存(26)中的方法(200)。处理器(30)将压缩的数据加载(205)入随机存取存储器(RAM)(24),直到预定量的压缩的数据(22)出现在RAM(24)中为止。控制器(14)然后对从RAM(24)捡取的压缩的数据(22)进行解压缩(220),直到解压缩数据的解压缩量等于与闪存(26)的最小模尺寸对应的块尺寸,其中由于闪存(26)的设计,数据的最小尺寸块(28)可被写至闪存(26)。控制器(14)随后将解压缩数据的块(28)转移(245)至闪存(26)。以协调方式重复这些步骤,直到整个压缩的数据(22)文件已从主机计算机(18)下载、由控制器(14)解压缩并被存储在闪存(26)为止。
【专利说明】用于配有有限RAM的控制器的数据解压缩方法
【技术领域】
[0001]本公开总地涉及用来自主机计算机的软件或数据对控制器编程,更具体地涉及使用不具有足以在解压缩的同时保持整个经压缩的数据文件的随机存取存储器(RAM)的控制器来解压缩数据文件的方式。
【背景技术】
[0002]许多人们每天使用的设备具有嵌入式控制器。这类设备的例子包括但不限于,汽车、全球定位卫星(GPS)导航单元、智能电话、电冰箱、洗衣机等等。典型地,这些设备中的控制器配有:控制器中由处理器(例如微处理器)使用的随机存取存储器(RAM),当从控制器撤去电力导致RAM的内容丢失时用于临时存储;以及非易失性存储器(例如闪存),用于当执行软件程序时存储诸如软件程序或校正数据之类的数据文件。已知经由例如膝上个人计算机的主机计算机编程或下载具有软件或数据更新的嵌入式控制器。这种下载当构造设备时可以是制造过程的一部分,或者在设备已被出售给消费者之后是服务/维护过程的一部分。
[0003]随着设备变得更为复杂以为消费者提供更多的特征,所下载的数据文件的大小也增加,因此执行这些下载所需的时间增加。主机计算机和控制器之间的通信速度的局限使得如果数据文件被压缩、以压缩的形式与控制器通信并随后在将解压缩的数据文件存储在闪存中之前通过控制器解压缩,则总下载效率提高(即下载时间减少)。然而,经常发生的情形是控制器不具有足够的RAM来接收整个压缩的数据文件。为了克服这个问题,已提出以多个较小数据文件的形式从主机计算机至控制器的通信数据文件,所述较小数据文件的尺寸被设计成在每个数据文件被接收到RAM之后处理器对每个数据文件解压缩的同时RAM能暂存每个较小的数据文件。然而,当原始数据文件的尺寸需要几百个较小数据文件来完成数据下载时,这种方法比所要求的更缓慢(即时间低效)。

【发明内容】

[0004]根据一个实施例,给出一种方法,该方法运作控制器以对存储在主机计算机上的压缩的数据文件解压缩并将得到的解压缩的数据存储在闪存中。解压缩过程使未知量的未压缩的数据产生自已知量的压缩的数据。控制器包括被配置成从主机计算机接收压缩的数据并当压缩的数据被解压缩时累积未压缩的数据的随机存取存储器(RAM),其中闪存被配置成存储已累积在RAM中的解压缩数据块。数据块具有与闪存的最小模尺寸的整数倍对应的块尺寸。该方法包括步骤:将从主机计算机接收的压缩的数据加载入RAM,直到预定量的压缩的数据出现在RAM中或者检测到压缩的数据文件的文件末尾。该方法还包括步骤:随后对从RAM捡取的压缩的数据进行解压缩,直到解压缩的数据的解压缩量等于块尺寸或RAM中的全部压缩的数据被解压缩。该方法还包括步骤:如果解压缩量的解压缩数据等于块尺寸则将解压缩的数据的块转移至闪存。该方法还包括步骤:如果解压缩的数据的量小于块尺寸并且尚未检测到文件末尾则重复加载和解压缩步骤。该方法还包括步骤:如果解压缩的数据的量小于块尺寸并且已检测到文件末尾则将解压缩的数据转移至闪存。
[0005]在另一实施例中,提供一种控制器,该控制器被配置成从主机计算机接收压缩的数据文件并对所述压缩的数据文件解压缩以供控制器使用。控制器包括随机存取存储器(RAM)、闪存和处理器。RAM被配置成在对压缩的数据解压缩时从主机计算机接收压缩的数据并累积未压缩的数据。数据以使未知量的未解压缩数据产生自已知量的压缩数据的方式被解压缩。闪存被配置成存储已累积在RAM中的解压缩数据块。数据块具有与闪存的最小模尺寸的整数倍对应的块尺寸。处理器被配置成:将从主机计算机接收的压缩的数据加载入RAM,直到预定量的压缩的数据出现在RAM中或者检测到压缩的数据文件的文件末尾(EOF)。处理器还被配置成:随后对从RAM捡取的压缩的数据进行解压缩,直到解压缩的数据的解压缩量等于块尺寸或RAM中的全部压缩的数据被解压缩。处理器还被配置成:如果解压缩量的解压缩数据等于块尺寸则将解压缩的数据的块转移至闪存。处理器还被配置成:如果解压缩的数据的量小于块尺寸并且尚未检测到文件末尾则重复加载和解压缩步骤。处理器还被配置成:如果解压缩的数据的量小于块尺寸并且已检测到文件末尾则将解压缩的数据转移至闪存。
[0006]通过阅读优选实施例的以下具体说明,进一步的特征和优点将变得更加清楚,该说明仅借助于非限制的示例并参考附图来给出。
[0007]附图简述
[0008]现在,作为示例将参考附图来描述本发明,其中:
[0009]图1是根据一个实施例用于更新控制器上的软件的系统的图;
[0010]图2描述根据一个实施例的图1的更新控制器上的软件的方法的流程图;
[0011]图3描述根据一个实施例的图1的控制器上的解压缩软件的方法的流程图;
[0012]图4描述根据一个实施例的图1的更新控制器上的软件的方法的流程图;
[0013]图5是根据一个实施例运行图1的系统的主机计算机的方法的流程
[0014]图;
[0015]图6是根据一个实施例运行图1的系统上的控制器的方法的流程图;以及
[0016]图7是根据一个实施例运行图1的系统上的控制器的方法的流程图。
【具体实施方式】
[0017]图1示出软件更新系统的非限定性示例,下文称为系统10。在该例中,车辆12配有发动机控制单元(ECU),下文中称其为控制器14,它被配置成控制发动机16。其它非限定性示例包括用于控制空调、悬浮系统、诸如气囊之类的乘客保护和导航系统的控制器。非车辆控制器的非限定性示例包括智能电话、平板计算机、家用设施、娱乐系统以及大楼保安系统。显然,在后面的描述中,这里给出的教义不仅限于车辆应用。
[0018]如果控制器14要接收更新的软件或更新的发动机校正数据,则控制器14可耦合至主机计算机18 (例如膝上个人计算机)。控制器14与主机计算机18之间的连接可借助通信缆线20,该通信缆线20可连接至车内通信网络(未示出),例如通信域网(CAN)总线。替代地,控制器14与主机计算机18之间的通信可以是无线的,如本领域内技术人员理解的那样。 申请人:发现从主机计算机18向控制器14转移压缩的数据文件并随后使用控制器14对压缩的数据22解压缩所需的时间少于在解压缩形式下转移与未压缩或解压缩的数据文件相同的信息的时间。换句话说,相比从解压缩的数据文件开始并在通信缆线20 (例如CAN总线)上发送整个解压缩的数据文件,下载压缩的数据文件然后解压缩更快。
[0019]如此,控制器14 一般被配置成从主机计算机18接收压缩的数据22并随后对压缩的数据22进行解压缩以供控制器14使用。控制器14包括随机存取存储器(RAM) 24,其被配置成从主机存储器18接收压缩的数据文件(即压缩的数据22)形式的数据并且当对压缩的数据解压缩时累积未压缩的数据。本文中使用的,RAM指逐字节或逐位可寻址的一类存储器,与必须被写至诸如八字节块的数据块的存储器类型相反。另外,如本文中使用的,RAM指当从控制器14或RAM24(即易失性存储器)撤去电力时不保留被存储在RAM24中的数据的存储器。还应当注意,产生自压缩已知量的压缩数据的未压缩数据的量是不固定的,即未知的。例如,千字节(1024字节)的压缩的数据当被解压缩时可从数据的1460字节产生数据的2560字节。
[0020]控制器14也包括闪存26,该闪存被配置成存储已被累积在RAM24中的解压缩数据的块28或多个块。总地来说,块28具有与闪存26的最小模尺寸的整数倍相对应的块尺寸,其中最小模尺寸是能被写至闪存26的数据的最小量。如本文中使用的,闪存指当从控制器14或闪存26 (即非易失性存储器)撤去电力时保留被存储在闪存26中的数据的存储器。如本领域内技术人员已知的,闪存经常需要将数据写入到多个字节块(即块28)中,在本文中将其称为最小模尺寸。例如,闪存26的最小模尺寸可以是八字节(8字节)或八字节的某些整数倍,例如16字节或32字节,因此数据必须以特征化为闪存26的最小模尺寸的整数倍的量被写至闪存26。
[0021 ] 控制器14也包括处理器30,该处理器30被配置成将压缩的数据22从主机计算机18加载入RAM24。将压缩的数据22加载入RAM24可借助通信块34实现,该通信块34例如包括CAN通信电路或被配置用于BLUETOOTH?或W1-FI?无线通信的无线收发机。加载过程继续,直到预定量的压缩数据出现在RAM24中或者检测到压缩的数据文件的文件末尾(EOF) 32的指示为止。这避免了 RAM24的过度加载或上溢出。RAM24可被分割成多个部分,这些部分被预留以实现处理器30的特殊用途。例如,RAM24可包括压缩数据部分36,它被设计用以存储由控制器14接收的压缩数据22。应当理解,当压缩的数据文件的尺寸(逐数据、非物理)大于可供压缩的数据部分36使用的RAM尺寸时,本文中给出的教义尤为有利。
[0022]一旦压缩的数据部分36满溢或以预定量的压缩数据被填充,则控制器14或处理器30可停止下载压缩的数据22并开始对存储在RAM24的压缩数据部分36中的压缩的数据22进行解压缩。应认识到,如果使用多核型处理器则可同时执行多个步骤。因此,RAM24也可被分割以定义RAM24的压缩的数据部分38以累积或暂存对压缩的数据22解压缩而产生的未压缩数据。压缩的数据22的解压缩可继续,直到存储在解压缩的数据部分38中的解压缩数据的量等于块28的块尺寸或存储在RAM25中的全部压缩数据22被解压缩为止,因为存在不充分压缩的数据以产生未压缩数据的整个块。下面将更具体地描述开始和停止压缩数据22的加载、开始和停止压缩数据22的解压缩以及开始和停止将未压缩数据转移至闪存26中的块28的有利交互。处理器30被配置成控制这些多个过程的交互。处理器30与主机计算机18的协作提供在闪存26内的压缩的数据22的时间高效下载。
[0023]图2示出操作控制器14或处理器30以对被存储在主机计算机18上的压缩数据文件解压缩并将得到的未压缩数据存储在闪存26的方法200的非限定示例。相比压缩比或解压比已知的压缩/解压算法,当未知量的未压缩数据源自已知量的压缩数据22时,方法200是适于使用的。
[0024]步骤205,加载压缩的数据,可包括控制器14或处理器30将对数据的请求发送至主机计算机18,之后控制器14将压缩的数据22从主机计算机18加载入RAM24。如果压缩的数据22的量或尺寸是预定的由此下载的量填满压缩数据部分36,则可省去选用步骤210、215。如果从文件读出的压缩数据22的尺寸小于压缩的数据部分36 (例如I字节),则在步骤205的每次发生之后,可执行选用步骤210、215,之后重复步骤205,直到步骤210或215中的测验之一改变逻辑路由。选用的步骤210、215可在满足预定的数据块大小之前被执行若干次。如果从文件读出的数据等于预定块尺寸的尺寸,则操作下降至步骤220,直到读出文件的最末部分为止。该最末部分可小于预定块尺寸,但将导致EOF。这将迫使执行继续至步骤220,其中数据小于预定的块尺寸。
[0025]步骤210,检测到EOF ?可包括检查压缩的数据22的内容以观察E0F32是否被包含在压缩的数据22中,由此指示没有更多压缩的数据可用。替代地,E0F32的检测可由主机计算机18完成并且该检测可被传达至与控制器14以控制将数据下载至控制器14。如果检测到E0F32,方法200进至步骤220以发起对压缩的数据22的解压缩。借助示例而非限定,可通过处理器30对EOF标志置位,由此可通过步骤225、250检查EOF标志而不是重复寻找E0F32的数据检查。
[0026] 步骤215,压缩量>预定量?,可包括确定出现在压缩的数据部分36中的压缩数据的量,且如果返回到步骤205很可能使压缩的数据部分36溢出或过载,则引导方法200执行步骤220。归结来说,步骤205、210和215协作以将适当量的压缩数据放入RAM24,同时如果检测到E0F32或已将适当量的压缩数据放入RAM24则提供退出加载过程的机制。
[0027]步骤220,对压缩的数据解进行压缩,可包括对从RAM24捡取的压缩数据进行解压缩。图3示出用于解压缩数据的方法300的非限定示例。预期解压缩过程可能导致压缩或未压缩的数据的全部字节被划分成存在于压缩的数据部分36和未压缩的数据部分38的任一者中的部分字节的实例。因此,尽管图3暗示了数据是逐字节处理的,但预期数据可能是逐位处理的,如本领域内技术人员熟知的那样。“解压缩一个数据字节”步骤可基于许多已知的压缩/解压缩算法中的任何算法,例如Lempel-Ziv-Storer-Szymanski(LZSS)压缩和解压缩算法。图3是遵照图2的描述更详细描述的。
[0028]步骤225,检测到EOF ?,可包括退出由步骤220-230定义的解压缩循环,因为RAM中所有压缩的数据被解压缩。
[0029]步骤230,未压缩的量>块尺寸?,可包括确定解压缩的数据的解压缩量是否等于块28的块尺寸。当RAM24中存在的解压缩数据的量至少像块28那样大时,方法200可发起将解压缩的数据转移至闪存的块28。
[0030]步骤235,未压缩的量<块尺寸?,可包括确定解压缩的数据的量是否小于块28的块尺寸。如果方法200正在准备将未压缩的数据转移至闪存26,但由于例如没有更多压缩的数据要解压缩而导致未压缩的数据的量小于块尺寸,则步骤需要保证所转移的内容与块尺寸相对应。
[0031]步骤240,填充解压缩的数据部分,可包括用空数据填充解压缩的数据部分以准备将数据块转移至闪存。如本文中使用的,空数据可以是全零或全一,或者可由控制器14识别为空存储器的数据图案。换句话说,对应于空白页的一部分。
[0032]步骤245,将未压缩的数据转移至块,可包括控制器14将块尺寸量的未压缩的数据从未压缩的数据部分38转移至闪存26中的块28。
[0033]步骤250,检测到EOF ?,可包括确定E0F32存在于转移的未压缩数据中,或确定EOF已由处理器30设定,且如果检测到EOF就退出方法200。如果不是,方法200回到步骤205以将压缩的数据22的另一分组加载入RAM,并重复解压缩和转移过程。
[0034]图3示出用于解压缩数据的方法300的非限定示例。在后面的描述中,方法中的每个步骤是参照每个步骤中的文字对每个步骤进行描述的,其中方法300可表征为由方法200调用的子例程。
[0035]剩余数据计数器等于0(来自最后的转换)——检查以观察是否存在来自前一、未完成的解压缩请求的数据剩余。当调用程序请求比可供从缓冲器解压的数据更多的数据时,这可能发生。计数器指示这是否已发生。当例程能返回前一解压缩请求过程中由调用程序请求的字节数时,该值等于零。如果计数器不等于零,则代码必须加载从前一转换剩下的数据(存储在临时缓冲器中)并将转换计数器(告知已解压缩了多少个字节)设置为与剩下的字节数相同的值。这是在下面列出的两个过程框中完成的。
[0036]加载旧数据(解压缩的数据)——将来自前一转换的剩下数据移入缓冲器,该缓冲器保持已被解压缩并准备返回给调用程序的字节,该调用者即调用该子例程的方法或例程,方法300。
[0037]设置解压缩字节数——将转换计数器(告知已解压缩了多少字节)设置为剩下的字节数。
[0038]将解压缩的字节数设为O—初始化表明已对多少字节进行了解压缩的计数器。
[0039]解压缩的字节数<请求的字节数?——如果例程尚未对调用程序请求的字节数进行解压缩,则代码执行停留在该循环中,直到它处理或数据用完为止。
[0040]解压缩一个数据字节一该子例程返回一个解压缩的字节或指示数据缓冲器中需要更多数据的出错。“解压缩一个数据位”步骤可基于许多已知压缩/解压缩算法中的任何一种,例如Lempel-Ziv-Storer-Szymanski(LZSS)压缩和解压缩算法。
[0041]足够数据以得到一个字节(解压缩的数据)?一检查一个字节数据的成功解压缩。
[0042]存储经转换的数据(返回缓冲器)——经转换的数据被存储在将把数据返回给调用器的缓冲器中。
[0043]递增的解压缩的字节数一解压缩的字节数递增以反映在该请求过程中解压缩的字节的总数。
[0044]临时存储经转换的数据?——如果请求的字节的总数无法被满足,则已被解压缩的字节必须被存储以使它们能在下一转换请求中被重新调用(在数据缓冲器加载更多数据之后)。
[0045]存储经转换的数据(临时缓冲器)一解压缩的数据字节被存储在临时数据缓冲器中,由此它们能在之后被恢复。
[0046]设定剩余数据计数器——存储在临时数据缓冲器中的字节数被存储在计数器中,由此它也能够在之后被重新`调用。[0047]图4-6示出对被存储在主机计算机18上的压缩的数据文件解压缩并将得到的未压缩数据存储在闪存26的方法400的非限定示例。图4中的每个步骤被标记以“H”或“C”以表示该步骤是由主机计算机18(H)执行的还是由控制器14(C)执行的。图5和图6给出运作主机计算机18的方法500和运作控制器14的方法600的更多细节。在后面的描述中,方法400、500和600中的每个步骤是参照由每个步骤中的文字引用每个步骤进行描述的。
[0048]下面的描述是针对图4中标注“H”的步骤以及图5中的步骤给出的。
[0049]打开压缩的文件一打开将被转移至微控制器的压缩文件。
[0050]在填充缓冲器的同时读取文件末尾——每次一行地从文件读取数据以用拟送至微控制器的数据填充小缓冲器(仅文件的一小部分将适应到RAM缓冲器)。RAM缓冲器是易失性存储器存储设备(在微处理器掉电后数据丢失)。
[0051]加载邮件箱和数据缓冲器一微控制器的RAM中的存储器位置被指派为邮件箱。将命令信息写至该区域。该命令数据将告诉在微控制器上运行的代码要执行什么任务。在这种情形下,它将指令代码在数据缓冲器中使用经压缩的数据对FLASH进行编程。FLASH数据是非易失数据(在微处理器掉电后数据仍然存在)。邮件箱也将保持数据,该数据指示数据缓冲器中将会有多少字节的数据。数据缓冲器被加载以从前述压缩文件读取的数据。
[0052]执行编程引擎一微控制器代码随后被执行。微控制器中的代码将读取邮件箱数据并结束该命令。微控制器上的代码随后将用结果的状态加载邮件箱。
[0053]读邮件箱一读取邮件箱以得到命令执行的结果。
[0054]编程失败?一如果编程操作失败,则程序将掉出循环。如果编程通过,它跳回到循环顶部以处理更多数据,直到到达文件末尾为止。
[0055]关闭压缩的文件——关闭文件以释放指向该文件的指针。
[0056]设置编程状态——编程操作的状态被存储以返回给调用应用程序。
[0057]下面的描述是针对图4中标注“C”的步骤以及图6中的步骤给出的。
[0058]读邮件箱一从邮件箱加载命令
[0059]命令对压缩的数据编程?——如果邮件箱中的命令是使用压缩的数据来编程,则代码将开始处理该数据。如果该命令不是,则它将跳至与所请求的任务对应的例程。
[0060]处理其它命令一代码跳至针对其它命令的任务。
[0061]缓冲器中有未使用的数据?一检查以观察数据缓冲器是否保持需要被解压缩的数据。
[0062]解压缩数据——解压缩的数据从数据缓冲器被读出并被用来产生固定数目的解压缩的数据字节。该固定数目是使用一次必须被编程的数据最小尺寸(根据FLASH技术一般在8、16、32或64字节边界上)来确定的。可使用更大的尺寸,但必须是最小尺寸的模同时保持足够小以适应在可用的RAM中。当数据缓冲器中没有足够的数据以产生所请求的字节数时,例程将返回指示需要更多数据来完成该请求的出错。这告诉调用程序要将更多压缩的数据加载入缓冲器并再次调用该例程。该例程将存储在不完全的解压缩请求过程中解压缩的数据位并在数据缓冲器用更多压缩的数据被加载之后在下一转换请求返回这些数据位(对于不完整的解压缩不丧失数据)。
[0063]足够的数据?——检查解压缩子例程的结果。如果存在足够的数据以完成转换,则代码将继续至程序数据区段。如果没有足够的数据,程序将以出错退出。[0064]程序数据一被解压缩的数据被编程入FLASH器件。
[0065]用状态设置邮件箱一一用状态和退出来加载邮件箱。可能的状态将是失败的编程、数据用完以及已编程所有数据(没有未完成的解压缩)。
[0066]图7示出对于控制器14的方法700的非限定实例(即子例程),以对存储在RAM24的压缩的数据部分36中的压缩的数据进行解压缩并将得到的未压缩数据存储在RAM24的未压缩数据部分38中。由于对压缩的数据进行解压缩而产生的解压缩数据的量是不确定的,因此方法700在位流耗尽压缩的数据时使解压缩的过程终止并且在位流充盈解压缩的数据时重新开始。在接下来的描述中,附图所示的每个步骤中参照文字描述方法700中的每个步骤。
[0067]步骤703—正在转换经编码的数据中?一可包括确定经编码的数据是否正在被转换的过程中。在压缩的数据中可以发现两种类型的数据,未编码的和经编码的。未编码的数据不被压缩并相比不作为压缩格式的一部分的数据而言具有更大的尺寸。经编码的数据是已被压缩的压缩数据格式的部分。如果是,即如果对编码的数据进行解压缩或形成用于对编码的数据进行解压缩所使用的指令正被执行,则逻辑路线转向步骤706,“位流>7且位流< 15”,这将在后面对步骤733的描述中更详细地描述。
[0068]步骤709—这些位在位流中吗?一可包括检查位流缓冲器是否用完数据(outof data),同时预备位测试以确定接下来需要处理什么类型的数据。压缩方法涉及工作在数据的位流并与字节层操作相反。如果例程数据用完了,则逻辑路线进至步骤712。
[0069]步骤712—用8位(I)加载位流——可包括对于接下来的处理将数据从压缩的数据部分36加载入位流缓冲器(未示出)。作为示例而非限定,步骤712可包括加载八位以上的数据,由此对编码的数据进行解压缩所需的指令的八个位将是完全的。位流中需要至少一个位以检测未经编码或经编码的数据。压缩方法涉及工作在数据的位流并与字节层操作相反。
[0070]步骤715——数据缓冲器具有数据(压缩的数据)?——可包括确定例程是否成功地将存储在缓冲器中用于压缩的数据部分36的数据移动至位流。
[0071]步骤718——最高有效位指示未编码的数据?——可包括确定最高有效数据位是否指示后面的数据是未经编码的,例程前进以步骤724处理未经编码的数据的一个字节。如果该位指示编码的数据,则位流将需要用于检测未经编码vs经编码的on位以外的十六个数据位。这将在步骤748被加载。
[0072]步骤721—从位流中移出最高有效位一可包括从位流中移除指示未经编码vs经编码的位。该步骤发回与步骤745相同的功能。
[0073]步骤724——用8以上的位(2)加载位流——可包括用八以上的数据位加载位流。流中接下来的八个位是返回的未经编码的数据字节。
[0074]步骤727——缓冲器具有数据(CPD(压缩的数据))吗——可包括确定将数据从压缩的数据部分36加载入位流是否成功。
[0075]步骤730—返回一个数据字节一可包括返回流中接下来的八个位。
[0076]步骤733——返回数据用完——可包括返回指示保持压缩的数据的缓冲器变空的出错消息。由于例程用完数据,取该头顶(pate),同时创建指令以对经编码的数据解压缩或返回未经编码的数据。[0077]步骤706—位流> 7且位流< 15 ?——可包括确定例程是否用完数据,同时创建对经编码的数据进行解压缩所需的指令的十六位。如果是,则将在步骤736加载八个以上的位。
[0078]步骤736—用8个以上位加载位流(3)——可包括加载完成指令所需的八个更多位,这些指令是将经编码的数据解压缩成位流中要求的十六位所需要的指令。
[0079]步骤739——缓冲器具有数据(压缩的数据)吗——可包括确定将数据从压缩的数据部分36加载入位流是否成功。
[0080]步骤742——加载表指针和字节计数器并设置位流以指示残留位——可包括加载对经编码的数据解进行解压缩所需的消息并设置指示器以表示已创建完整的指令。经压缩的数据可被保持在数据表中。指针和字节计数器(由经编码数据的十六位表示)可用来从表中读取数据串。更新计数器,该计数器指示位流中加载的数目。
[0081]步骤745—从位流中移出最高有效位一可包括从位流中移除指示未经编码vs经编码的位。
[0082]步骤748—用16以上的位加载位流——可包括加载完成指令所需的16以上的位,该指令是对经编码的数据进行解压缩所需的。应当理解,建立从表读取经压缩数据所需的指针和字节计数要花费16位数据。
[0083]步骤757——读一个经编码的数据字节——可包括使用该指令从查找表读取(解压缩)一个数据字节。该查找表是重现数据字节的表,它在压缩数据时是有帮助的(instrumental)。
[0084]步骤760—所有字节读取自表?一可包括确定是否已针对当前指令提取了所有经压缩的字节。
[0085]步骤763—在转换经编码数据的过程中设为否?一可包括指示当前解压缩指令的完成。
[0086]步骤766——设置位流计数以指示加载的位?——可包括指示所加载指令的不完
整解压缩。
[0087]因此,给出系统10、用于系统10的控制器以及操作控制器14以对存储在主机计算机18上的压缩数据文件进行解压缩并将结果得到的未压缩的数据存储在闪存26中的方法200、300、400、500、600和700。系统、控制器和方法给出一种比现有技术方法更快地更新控制器14上的软件或数据的方式。
[0088]尽管本发明在其优选实施例的方面进行了描述,但本发明不旨在如此地限制,而是只旨在限于在以下权利要求书中阐释的范围。
【权利要求】
1.一种运作控制器(14)以对存储在主机计算机(18)上的压缩的数据(22)文件进行解压缩并将结果得到的未压缩数据存储在闪存(26)中的方法(200),其中未知量的未压缩的数据产生自已知量的压缩的数据(22),所述控制器(14)包括随机存取存储器(RAM)(24),所述RAM被配置成从所述主机计算机(18)接收压缩的数据(22)并在对压缩的数据(22)进行解压时累积未压缩的数据,其中所述闪存(26)被配置成存储已累积在所述RAM(24)中的解压缩数据的块(28),并且其中所述块(28)具有与所述闪存(26)的最小模尺寸的整数倍对应的块尺寸,所述方法(200)包括: 将从所述主机计算机(18)接收的压缩的数据(22)加载(205)入所述RAM (24),直到预定量的压缩的数据(22)出现在所述RAM(24)中或者检测到压缩的数据(22)文件的文件末尾;然后 对从所述RAM(24)捡取的压缩的数据(22)进行解压缩(220),直到解压缩的数据的解压缩量等于所述块尺寸或对RAM(24)中的所有压缩的数据(22)进行解压缩;然后 如果(230)解压缩的数据的解压缩量等于所述块尺寸,将所述解压缩的数据的块(28)转移(245)至所述闪存(26); 如果(235)所述解压缩的数据的量小于块尺寸并且尚未检测到(225)文件末尾,则重复所述加载(205)和解压缩(220)步骤;以及 如果所述解压缩的数据的量小于所述块尺寸并且已检测到(225)文件末尾,则将所述解压缩的数据转移(245)至所述闪存(26)。
2.如权利要求1所述的方法(200),其特征在于,所述RAM(24)被分割以至少定义RAM(24)的压缩的数据部分(36)和解压缩的数据部分(38)。
3.如权利要求2所述的方法(200),其特征在于,所述压缩的数据(22)文件大于所述压缩的数据部分(36)。
4.如权利要求2所述的方法(200),其特征在于,所述当解压缩的数据量小于所述块大小时将解压缩的数据转移至闪存(26)的步骤(205)包括在将所述块(28)转移至所述闪存(26)之前用空数据填充(240)所述解压缩的数据部分(38)。
5.如权利要求1所述的方法(200),其特征在于,所述解压缩(220)的步骤包括: 当位流耗尽压缩的数据(22)时终止所述解压缩步骤;以及 当所述位流充满压缩的数据(22)时重新开始所述解压缩步骤。
6.一种控制器(14),配置成从主机计算机(18)接收压缩的数据(22)文件并对所述压缩的数据(22)文件进行解压以供控制器(14)使用,所述控制器(14)包括: 随机存取存储器(RAM) (24),被配置成从所述主机计算机(18)接收压缩的数据(22)并在对所述压缩的数据(22)进行解压缩时累积未压缩的数据,其中未知量的未压缩的数据产生自已知量的压缩的数据(22); 闪存(26),被配置成存储已累积在所述RAM(24)中的解压缩的数据的块(28),并且所述块(28)具有与所述闪存(26)的最小模尺寸的整数倍对应的块尺寸;以及 处理器(30),被配置成: 将从所述主机计算机(18)接收的压缩的数据(22)加载(205)入所述RAM (24),直到预定量的压缩的数据(22)出现在所述RAM(24)中或者检测到压缩的数据(22)文件的文件末尾;然后对从所述RAM(24)捡取的压缩的数据(22)进行解压缩(220),直到解压缩的数据的解压缩量等于所述块尺寸或对RAM(24)中的所有压缩的数据(22)进行解压缩;然后 如果解压缩的数据的解压缩量等于所述块尺寸,将所述解压缩的数据的块(28)转移(245)至所述闪存(26); 如果所述解压缩的数据的量小于块尺寸并且尚未检测到文件末尾,则重复所述加载和解压缩步骤(205);以及 如果所述解压缩的数据的量小于所述块尺寸并且已检测到文件末尾,则将所述解压缩的数据转移( 245)至所述闪存(26)。
【文档编号】G06F9/445GK103729207SQ201310482319
【公开日】2014年4月16日 申请日期:2013年10月15日 优先权日:2012年10月16日
【发明者】J·T·博林 申请人:德尔福技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1