CN1954291A - 闪存编程 - Google Patents
闪存编程 Download PDFInfo
- Publication number
- CN1954291A CN1954291A CNA2005800128201A CN200580012820A CN1954291A CN 1954291 A CN1954291 A CN 1954291A CN A2005800128201 A CNA2005800128201 A CN A2005800128201A CN 200580012820 A CN200580012820 A CN 200580012820A CN 1954291 A CN1954291 A CN 1954291A
- Authority
- CN
- China
- Prior art keywords
- renewal
- memory
- module
- storer
- object module
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/654—Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
-
- 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/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1293—Printer information exchange with computer
- G06F3/1294—Status or feedback related to information exchange
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- 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
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/10—Programming or data input circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/10—Programming or data input circuits
- G11C16/102—External programming circuits, e.g. EPROM programmers; In-circuit programming or reprogramming; EPROM emulators
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
- Medicines Containing Plant Substances (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
公开了一种用于更新存储在存储器中的程序代码的方法,该存储器包括许多存储扇区。该方法包括将更新的输入代码转换成要存储在存储器中的更新的程序代码版本,该存储器上已存储有占据存储器的第一组存储扇区的当前程序代码版本,其中该更新的程序代码版本当存储在存储器中时占据第二组存储扇区。该转换步骤还包括接收当前程序代码版本的表示;执行至少一个优化步骤,上述优化步骤用于减少由更新的代码版本占据的第二组存储扇区的存储扇区的数目,上述存储扇区不同于由当前程序代码版本占据的第一组存储扇区的对应存储扇区。
Description
技术领域
本发明涉及存储在存储器中的程序代码的更新,该存储器包括许多存储扇区。
背景技术
许多现代电子设备、如嵌入式设备,都是由存储在闪存上的软件控制的。闪存是一种很受欢迎的电子设备中的存储器,因为它允许多次重新写入。然而,每次写操作都被限制在整个存储扇区内,即所谓的页。当前闪存典型的页大小为64千字节。
当存储在电子设备的闪存中的软件被更新时,如为了给该软件增加新的特征和/或纠正当前版本的软件中的错误,闪存的某些或所有的存储扇区都要被重新写入或“重新快擦写”。一般来说,期望将软件更新过程中被重新写入的闪存页的数目最小化,以使安装软件更新所需要的时间最小化。
具体地说,更新时间非常重要的应用是移动终端的空中下载。在这种应用中,可知分配给移动终端的只是当前映像的修改而不是整幅要被更新的映像。修改一般称为增量文件。在这类系统中,一运行于移动终端上的更新代理将该接收到的修改施加到当前映像上,该映像因此而转换成更新后的版本。这类更新系统的一个特殊问题是该终端在更新过程中是不可操作的。因此,期望减少重新快擦写存储器所需要的时间,并从而减少系统的停机时间。
然而,由于上面提到的闪存的限制,即使很小的软件源代码的更新都可导致一大部分的闪存页要被更新,因为即使一个单独的字节变化都需要将一整页全部重新写入。
已公布的美国申请200310142556公开了一种闪存的编程方法,其中易失性信息或易失性软件成份被至少存储在闪存设备中各个闪存地址空间的底部附近,以保证需要变化或调整的闪存扇区尽可能的少。
然而,上述现有技术方法需要关于各个信息成份中的变化的预期可能性的信息。因此,上述现有技术并没有解决该问题,即在更新具有许多存储扇区的存储器中的程序代码时,减少需要重新写入的次数,而无需关于各个软件成份中的未来变化的预期可能性的信息。
发明内容
通过用于更新存储在存储器中的程序代码的方法解决了上述及其他问题,该存储器中包括许多存储扇区,该方法包括:
-将更新的输入代码转换成要存储在存储器中的更新的程序代码版本,该存储器上已存储占据存储器的第一组存储扇区的当前程序代码版本,其中更新的程序代码版本在存储到存储器中时占据第二组存储扇区;
其中,该转换过程还包括
-接收当前程序代码版本的表示;和
-执行至少一步优化步骤,用于减少被更新的代码版本占据的第二组存储扇区的存储扇区的数目,上述存储扇区不同于被当前程序代码版本占据的第一组存储扇区的对应存储扇区。
具体地说,通过接收当前程序代码版本的表示,并执行至少一步优化步骤用于减少被更新的代码版本占据的第二组存储扇区的存储扇区的数目,上述存储扇区不同于被当前程序代码版本占据的第一组存储扇区中的对应的存储扇区,从而需要重新写入的次数减少了。
由于存储在存储器中的当前程序代码版本一般被认为用于生成软件更新的过程,因此上述优化是基于易于被更新过程获取的信息。具体地说,该过程是基于关于最近安装的版本和当前更新的信息,但是不需要关于任何将来的更新可能性的信息。
在一个优选实施例中,当前程序代码版本的表示包括第一组存储扇区的当前映像和/或第一组存储扇区的当前映像的映射文件(mapfile)描述。因此,该表示包括关于存储器中的程序代码组件的布局的信息,从而允许优化过程使用该更新的组件的布局以减少两个版本间的差异。
在一般情况下,代码生成系统包括编译源代码并生成许多目标代码模块的编译器,及生成可执行代码的连接器。连接器解决了构成软件开发项目的一组目标代码模块间的相关关系。连接器的任务一般包括安排存储器中的目标模块,即在对应的地址空间中,将相关的地址分配给不同的目标模块。因此,在连接器级,关于存储器空间中代码布局的必要信息是可得的。目标模块一般表示为采用硬件和/或平台特有的低级文件格式的目标文件。目标文件由编译器生成并用作连接器的输入。目标模块在典型情况下是可重定位的并包含未定引用。
本文存储器中代码的布局包括不同目标模块各自的起始或基地址,即程序代码占据的地址空间内的它们各自的相对地址。
因此,在本发明的一个优选实施例中,优化过程是在连接器级执行的。因此,输入代码包括许多目标模块,而转换过程则包括连接这些目标模块。优选地,该优化过程包括确定存储器中所述目标模块的布局。
在另一个优选实施例中,输入代码包括至少一个源代码模块;转换过程包括:
-编译至少一个源代码模块以生成许多目标模块;以及
-连接这些目标模块;
并且,执行至少一步优化步骤包括:
-在连接步骤生成反馈数据;和
-基于反馈数据重新编译源代码模块的至少一个子集,并生成许多修改后的目标模块;和
-基于这些修改后的目标模块执行连接步骤。
因此,根据这个实施例,连接器为编译器级生成反馈,使编译器重编译至少一部分源代码。这具有的优点是:连接器控制目标模块的结果集合,从而增加了由连接器来重新安排目标代码模块的自由度。
在另一个优选实施例中,转换还包括由至少一个优化参数来控制该优化过程。因此提供了一种用于控制优化过程的机制。在一些实施例中,这些优化参数为优化过程确定一个或多个限制条件。例如,一个或多个优化参数可确定由优化过程引起的大小上的增加所允许的最大值,如允许优化过程增加的填充空间的最大大小。可供选择或附加的是,至少一个优化参数可包括一个参数,用于确定由优化过程引入的所允许的中继数目最大值。
本发明的一个优点是在优化过程中收益(在需要重新写入的次数方面)和开销(在存储容量和执行时间等方面)之间的平衡可以很容易地被控制。
因此,在一优选实施例中,确定存储器中所述目标模块的布局包括:
-检测具有不同于对应的第一当前目标模块的大小的更新的第一目标模块,以及与对应的第二当前目标模块相等的更新的第二目标模块,其中更新的第二目标模块具有的基地址大于更新的第一目标模块的基地址;以及
-使用预确定填充大小的预确定存储内容来填充检测到的更新的第一目标模块,生成填充后的更新的第一目标模块;其中,选择填充大小以使更新的第二目标模块的基地址等于对应的第二当前目标模块的基地址。
在另一个优选实施例中,确定存储器中所述目标模块的布局包括:
-检测更新的第一对象模块,其大于对应的第一当前目标模块;
-将该更新的第一目标模块的预确定部分移动到不同的存储扇区,以生成简化的更新的第一目标模块和该更新的第一目标模块的移动部分;
-在简化的第一更新的存储扇区中插入指向更新的第一目标模块的移动部分的中继。
在另一个优选实施例中,该方法还包括生成表示当前程序代码版本和更新的程序代码版本之间差异的增量文件。因此产生的增量文件包括当前和更新的版本之间的差异,即设备需要用来从存储在设备的当前版本和增量文件来生成更新的版本的信息。本实施例的一个优点是:需要上传到设备中的文件的大小减小了,从而进一步减小了执行软件更新所需要的时间。
更多的优选实施例被公开于从属权利要求中。
需注意的是,上面和下面所描述的方法的特征可以在软件中实施并在数据处理系统上执行,或通过由程序代码组件如计算机可执行指令的执行所产生的其他处理组件来完成。这里,在下文中,术语处理部件包括任何适合执行上述功能的电路和/或设备。具体地说,术语处理部件包括通用或特殊用途的可编程微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、可编程逻辑阵列(PLA)、现场可编程门阵列(FPGA)、特殊目的电子电路等或它们的组合。
例如,程序代码组件可以从存储介质或通过计算机网络从其他计算机中加载到如RAM等存储器中。或者,所描述的特征可以由硬件电路而不是由软件或结合软件来执行。
可采用不同方式实施本发明,包括前面及后面描述的方法、数据处理系统及更多的产品部件。每种方式都产生描述在第一个提及的方法中的一个或多个好处和优点,而且每种方式都具有对应于结合第一个提及的方法的优选实施例的一个或多个优选实施例。
具体地说,本发明涉及一种用于更新存储在包括许多存储扇区的存储器中的程序代码的数据处理系统,该数据处理系统被适当地编程以执行前面及后面所描述的方法中的步骤。
本发明还涉及包括程序代码组件的计算机程序产品,当在数据处理系统上执行所述程序代码组件时使数据处理系统执行前面及后面所描述的方法。计算机程序产品可实施为已在其上存储了所述程序代码组件的计算机可读介质。
为了当前的说明,术语电子设备包括任何具有用于存储程序代码的存储器、如闪存的设备。这种设备的例子包括便携式无线电通信装置及其他手提或便携式设备。便携式无线电通信装置包括所有的如移动电话、寻呼机、通信器(即电子组织器、智能电话、个人数字助理(PDA)、手提电脑等)等装置。
附图说明
参考附图,并通过下文中描述的实施例,本发明的上述及其他方面将是明白且具有说明性的,其中:
图1示意性地显示了用于更新移动终端中的软件的系统的实施例的方框图;
图2示意性地显示了根据本发明实施例的移动终端的方框图;
图3显示了软件更新过程的实施例的方框图;
图4示意性地说明了在软件更新之前和之后闪存的存储布局,其中该布局通过填充空间的引入来进行优化;
图5示意性地说明了在软件更新之前和之后闪存的存储布局,其中该布局通过中继的引入来进行优化;
图6显示了软件更新过程的另一个实施例的方框图。
具体实施方式
图1示意性地显示了用于更新电子设备(如移动终端等)中的软件的系统的实施例的方框图。该系统包括移动终端101(例如移动电话等)、软件更新系统102及通信接口103。
软件更新系统102可包括可访问通信网络的服务器计算机。在一些实施例中,服务器计算机的功能性可以在多个计算机、例如通过计算机网络(如局域网、广域网、因特网等)连接在一起的计算机之间分布。软件更新系统102包括允许软件更新系统通过通信接口103传送数据的接口电路104。例如,接口电路可以包括串口、并口、短程无线通信端口(如红外端口、蓝牙收发器等)。接口电路的其他例子包括网卡、DSL调制解调器、网关计算机等。
软件更新系统还包括处理单元105、例如服务器计算机的CPU,其被适当地编程以控制并执行更新过程,上述更新过程包括如本文描述的更新程序代码的产生。该处理单元还包括版本数据库106,其中已存储待更新的软件的至少一个基础版本和一个更新的版本的存储映像(memory image)。在一些实施例中,该版本数据库还包括如用于不同类型的移动终端、用于不同组的客户等的如多个基础版本和/或更新的版本的附加信息。通信接口103可以是任何合适的有线或无线通信接口,用于在软件更新系统102和移动终端101之间传送数据。例如,在移动电话用于通过蜂窝通信网络(如GSM网络、UMTS网络、GPRS网络等)进行通信的情况下,在软件更新系统和移动终端之间关于软件更新的通信,可以通过该蜂窝通信网络来执行,因此避免了移动终端中附加通信接口的需求。还应该知道的是,移动终端和软件更新系统间的通信可以涉及一个以上的通信网络。例如,移动电话可以通过基站和具有网关系统的蜂窝通信网络来进行通信,上述网关系统又借助因特网来提供与软件更新系统的通信。
因此为了更新移动终端101上的软件(例如移动终端的固件或操作系统),该移动终端连接到软件更新系统102。或者,一旦更新软件版本可以获取时,软件更新系统可以连接到移动终端。移动终端一旦连接到该软件更新系统,就向软件更新系统发送关于其当前软件版本的信息。通过合适的更新协议(如建立在TCP/IP协议上的协议)来执行该通信。基于从移动终端接收的信息,软件更新系统生成包括更新指令的专用更新消息给移动终端。在一些实施例中,更新指令包括要被重新写入的存储扇区的映像。在使用增量文件的不同的更新系统中,生成更新指令,使得它们使移动终端能从已存储在移动终端中的现有版本和从包括在更新指令中的附加信息中生成更新的软件版本。
在一个实施例中,更新过程由运行于移动终端上的更新代理来发起。该更新代理控制增量文件的接收和验证。然后,更新代理使移动终端与网络断开连接,并以修补模式重启。在修补模式下,增量文件中的变化以递增的方式被施加,直到新的存储映像完成。
增量文件的生成可示意性地通过下面的运算来说明:
filenew-filebase→Δfile
相应地,新版本的实际生成则可由移动终端按照下面的运算来执行:
filebase+Δfile→filenew
应该知道的是,生成增量文件(在上面的表示法中表示为“-”)和在移动终端上生成新版本(在上面的表示法中表示为“+”运算)的上述运算中可以包括更多或更少的合成运算。
可以在适当位置施加增量文件,即移动终端在现有映像上进行的改变,因此几乎不需要附加存储装置。而且,由于只有增量文件需要被加载而且由于增量文件一般远小于新版本,所以通过上述方法减少了加载时间。
代码生成过程的实施例将在下文中进行更详细的描述。
图2示意性地显示了诸如移动终端的电子设备的方框图。移动终端101包括通信模块210、处理单元211和存储器单元212。
通信模块210包括允许通过蜂窝通信网络进行基于无线电数据通信的电路和/或设备。因此,为了当前的说明,通信模块210包括用于接收和发送数据信号的接收器电路和发送器电路。通信模块还可包括用于合适地处理信号(例如使用无线电通信领域中熟知的合适技术来调制、编码、放大信号)的电路。
移动终端还包括处理单元211,如被适当编程的微处理器。该处理单元用于确定存储在移动终端内的软件的版本、计算所存储的软件的校验和、并基于收到的相应的更新指令生成软件的更新的版本。
存储器单元212已在其上存储有预定版本的软件和/或其他数据。例如,存储器212可以包括当被加载到处理单元210并由处理单元210执行时用于实施移动终端的基本功能的移动终端的固件。固件还包括允许应用软件执行的操作系统。因此,在存储器212上还可存储有提供附加功能性的应用软件。存储器212采用适当的地址空间进行编址,因此允许处理单元访问存储器中选定的部分。在一些实施例中,存储器212在逻辑上或在物理上被划分成许多存储扇区。例如,存储器212可包括允许数据被写入预定大小的扇区中的闪存。
在下面,假设存储器212被划分成许多预定大小的扇区,表示为P1、P2、P3、...、PN。然而,应当知道的是,作为替代,可以使用存储器的任何其他编址方法。还应当知道的是,本文描述的更新过程可以施加到整个存储器212、例如如果移动手机闪存的整个映像要被更新,或者只施加到存储器的预定部分、例如如果一个或多个软件应用程序要被更新。
图3显示了软件更新过程的实施例的方框图。连接器模块302接收许多目标文件301。每个目标文件301都由编译器(未显示)编译,其中某些或所有的目标文件可被彼此分开地编译。连接器模块302将目标模块结合到绝对文件305中准备执行。连接器模块302执行的任务之一是分开编译的目标模块之间交叉引用的确定和最终地址的分配,以创建单个可执行程序305。因此,连接器的输出305是能够被直接加载到闪存中的文件。该输出305也被称为构造文件。
连接器模块302还接收关于在前构造文件303(例如以其中存储有当前构造的闪存中的相应地址空间的映像的形式)的信息。在另一个实施例中,连接器302也可生成当前构造的存储布局的文本文件表示,即所谓的映射文件。例如,映射文件可包括功能列表、分配给它们的地址、它们的输入参数等。在这种实施例中,关于在前构造的信息303可包括该在前构造的对应映射文件。在又一个实施例中,连接器模块接收映射文件和在前构造的存储映像。
连接器模块302用于生成新构造305的存储映像,使得该新映像尽可能类似在前构造303的存储映像。因此,为了减少存储映像间的差异,连接器用于执行很多优化步骤。这些优化步骤的例子包括:
-在模块间引入额外的填充空间,以避免需要相对于这些模块在在前构造中的位置而到处移动它们。这将在图4中进行说明。
-将目标模块划分成两个或两个以上其间具有引用的子模块,即引入所谓的中继,如将在图5中进行说明的。
-上述步骤的组合。
连接器模块302还接收一个或多个用于控制优化步骤的优化参数304。例如,优化参数可以确定连接器应该执行哪些优化步骤。而且,优化参数可以为一个或多个优化步骤确定许多限制条件或边界条件。因此,连接器可配置为在由优化参数确定的许多限制条件或边界条件下减少,更适当地说是最小化新构造和在前构造间的差异。
优化参数的例子包括:
-允许连接器引入的关于所允许的填充空间的最大边界;
-允许连接器引入的中继的最大数目。
应该了解的是,在一些实施例中,一个或多个上述优化参数可以被预设置以预确定缺省值。图4示意性说明了在软件更新之前和之后的闪存的存储布局,其中通过引入填充空间来优化该布局。
图4a说明了闪存的部分地址空间的结构。地址空间401被划分成许多页,表示为P1、P2、P3、P4、P5、P6、P7和P8。这些页具有预定的大小S;在典型的现有闪存中,页的大小是64KB。
图4b说明了存储在地址空间401中的程序代码版本V1(通常由标记数字402表示)的存储布局的例子。本例中的程序代码版本包括五个命名为A、B、C、D和E的目标模块。这些目标模块具有不同的大小并且连续排列在地址空间401中。这种布局也称为单片(monolith)。
图4c说明了程序代码的更新版本V2,通常命名为403。在这个例子中,假定版本V1和版本V2之间仅有的变化是模块A被模块A’取代了,其中,假定模块A’大于在前模块A,如A’所需的附加存储空间405所示。假定其余的模块B、C、D和E都没有变化,即与版本V1中对应的部分一致。然而,如由图4c中的标记数字406所说明的,当连续排列更新的版本V2时,存储页P1到P7的全部内容都需要被重新写入。页P1、P2和P3需要被重新写入,因为模块A的内容已变化为A’,并且其余的页需要被重新写入,因为版本V1和V2之间模块B、C、D和E的位置已经变化了。
图4d说明了更新的程序版本V2的优化存储布局,一般命名为404。在图4的例子中,连接器已经将模块B移动到单片的底部。而且,连接器在模块A’和C之间插入了从未用过的存储器的填充空间407。确定该填充空间407的大小,使得版本V2中模块C的起始地址与在前版本V1中的相同。因此,假定模块C、D和E都没有引用模块B中的实体,即没有引用发生变化,则模块C、D和E的存储映像均不发生变化。因此,当通过以优化的更新的版本V2替代在前版本V1的方式来更新存储器时,即通过重新快擦写闪存中的有关页,如由标记数字408说明的,只有页P1、P2、P3、P7和P8需要被重新写入。其余的页,如页P4、P5和P6均无需被重新写入。
应该知道的是,在A’小于A的情况下,布局可以被优化,仅通过增加适当的填充空间来确保模块B的基地址不变,即无需移动B。
还应该知道的是,上述通过增加填充空间对存储布局的优化减少了必需的重新写入的次数,其代价是增加了对应于附加填充空间大小的存储映像的大小。如上文所提到的,该平衡可通过用于确定允许连接器插入的填充空间的最大大小的优化参数来控制。
还应该注意的是,上述例子中存储模块B的变更位置可包括一个或多个模块C、D和E中的变化,如果它们包括对模块B中函数的引用。这种引用将受模块B重新编址的影响。在未变化的模块中没有其他函数访问的模块可以自由移动,然而被另一未发生变化的模块引用的模块的移动,则在需要重新写入的次数方面增加了开销。因此,为了确定是否移动模块以及移动哪些模块,首选的是连接器配置为确定目标模块的移动的全部影响/开销。
因此,在一个实施例中,存储器中目标模块的布局的确定包括:
-检测与对应的第一当前目标模块相比具有不同大小的更新的第一目标模块,以及与对应的第二当前目标模块相等的更新的第二目标模块,其中更新的第二模块具有的基地址大于更新的第一目标模块的基地址;以及
-用预确定填充大小的预确定存储内容来填充该检测到的更新的第一目标模块,以生成填充后的更新的第一目标模块。其中,选择填充大小以使更新的第二目标模块的基地址等于对应的第二当前目标模块的基地址。
图5示意性地说明了软件更新之前和之后闪存的存储布局,其中通过引入中继来优化布局。
图5a说明了部分闪存地址空间的结构。地址空间501被划分成许多页,表示为P1、P2、P3、P4、P5、P6、P7和P8。这些页具有预确定的大小S。
图5b说明了存储在地址空间501中的程序代码版本V1(通常由标记数字502表示)的存储布局的例子。与在前的例子一样,该程序代码版本包括五个命名为A、B、C、D和E的目标模块。这些目标模块具有不同的大小,并且连续排列在地址空间501中。
图5c说明了程序代码的更新版本V2,通常命名为503。同样,假定版本V1和版本V2之间仅有的变化是模块A被模块A’取代了,其中假定模块A’大于在前模块A,如可由A’需要的附加存储空间505所示。假定其余的模块B、C、D和E没有变化,即与版本V1中对应的部分一致。然而,如由图5c中标记数字506所示,当连续排列更新的版本V2时,存储页P1到P7的全部内容都需要被重新写入。页P1、P2和P3需要被重新写入,因为模块A的内容已变为A’,而且其余的页需要被重新写入,因为版本V1和V2之间模块B、C、D和E的位置变化了。
图5d说明了更新的程序版本V2(通常命名为504)的优化存储布局。在图5的例子中,假定目标模块A’的一部分仅引用了A’本身,即没有引用任何其他模块。A’的该部分被指定为A2′。A’其余的部分(被指定为A1′)引用一个或多个其他模块。因此,如图5d所示,连接器模块可以将模块A’划分成A1′和A2′,并将模块A2′移动到单片的底部,因此改变A1′到A2′的内部引用,即通过引入中继。而且,连接器插入了填充空间507,使得模块B的起始地址相对于在前版本V1保持不变。从而,模块B、C、D和E的存储映像是未变化的。因此,当上传优化的更新的版本V2以取代在前版本V1时,只有页P1、P2、P7和P8需要被重新写入,如标记数字508所示。其余的页即页P3、P4、P5和P6都不需要被重新写入。
因此,在该实施例中,存储器中目标模块的布局的确定,包括:
-检测更新的第一对象模块,该模块大于对应的第一当前目标模块;
-将该更新的第一目标模块中的预确定部分移动到不同的存储扇区中,以生成简化的更新的第一目标模块和该更新的第一目标模块的移动部分;
-在简化的第一更新的存储扇区中插入指向更新的第一目标模块的移动部分的中继。
应该知道的是,上述通过中继对存储布局的优化可减少必需的重新写入的次数,其代价是由于中继而导致的执行时间的损失。如上文提到的,该平衡可由优化参数来控制,该参数确定允许连接器插入的中继的最大数目。
还应该注意的是,在图5的例子中,中继的引入与填充空间的插入结合在一起。
还应该知道的是,在其他实施例中,将一个模块拆分为两个单独的模块,是由编译器而不是由连接器本身来执行的。这样的一个实施例,其中连接器给编译器发送反馈信号,将如下描述:
图6显示了软件更新过程的另一个实施例的方框图。这个实施例与图3所描述的实施例类似,其中相同的标记数字指相同的组件。在图6的实施例中,连接器302还生成反馈信号608给已经从对应的源文件607的集合生成目标文件301的编译器606。该反馈信号使编译器重新编译一个或多个源文件,产生修改后的目标文件,上述修改后的目标文件更适合于由连接器来生成优化的存储布局。例如在图5说明的场合中,连接器302可请求编译器606生成目标模块A1′和A2′而不是A’。在一个实施例中,反馈信号608甚至可以包括关于包含在每个子模块中的函数的信息。
因此,在上文中,公开的连接器配置为用于减少更新闪存中的程序代码时需要重新写入的次数。
本发明可通过包括多个不同元件的硬件并通过适当编程的计算机来实施。在列举了若干部件的装置权利要求中,这些部件中的若干个都可由一个且相同类型的硬件、如适当编程的微处理器或计算机和/或一个或多个如本文描述的通信接口来实施。某些方法被引用在相互不同的从属权利要求中或被描述在不同的实施例中的微小事实并不表明为了优点突出不能使用这些方法的结合。
需要强调的是,术语“包括”用于本说明书中时,用于明确说明陈述的特征、整数、步骤或成份的存在,然而并不排除一个或多个其他特征、整数、步骤及其组合的存在或增加。
Claims (16)
1.一种用于更新存储在存储器中的程序代码的方法,所述存储器包括许多存储扇区,所述方法包括:
-将更新的输入代码转换成要存储在存储器中的更新的程序代码版本,所述存储器上已存储占据所述存储器的第一组存储扇区的当前程序代码版本,其中所述更新的程序代码版本当存储在所述存储器中时占据第二组存储扇区;
其特征在于,所述转换过程还包括:
-接收当前程序代码版本的表示;以及
-执行至少一步优化步骤,所述优化步骤用于减少被所述更新的代码版本占据的第二组存储扇区的存储扇区的数目,所述存储扇区不同于被所述当前程序代码版本占据的第一组存储扇区的对应存储扇区。
2.如权利要求1所述的方法,其中所述当前程序代码版本的表示包括所述第一组存储扇区的当前映像的映射文件描述和所述第一组存储扇区的当前映像的至少其中之一。
3.如权利要求1或2所述的方法,其中输入代码包括许多目标模块;其中所述转换过程包括连接这些目标模块。
4.如权利要求1或2所述的方法,其中输入代码包括至少一个源代码模块;其中所述转换过程包括:
-编译所述至少一个源代码模块以产生许多目标文件;以及
-连接这些目标模块;
并且其中执行至少一步优化步骤包括:
-在连接步骤期间生成反馈数据;以及
-基于所述反馈数据重新编译源代码模块的至少一个子集,并产生许多修改后的目标模块;以及
-基于这些修改后的目标模块执行连接步骤。
5.如权利要求3或4所述的方法,其中所述优化步骤包括确定存储器中所述目标模块的布局。
6.如权利要求5所述的方法,其中确定存储器中所述目标模块的布局包括:
-检测具有不同于对应的第一当前目标模块的大小的更新的第一目标模块,以及与对应的第二当前目标模块相等的更新的第二目标模块,所述更新的第二目标模块具有的基地址大于所述更新的第一目标模块的基地址;以及
-使用预确定填充大小的预确定存储内容来填充所检测到的更新的第一目标模块,以产生填充后的更新的第一目标模块;其中选择填充大小以使所述更新的第二目标模块的基地址等于对应的第二当前目标模块的基地址。
7.如权利要求5或6所述的方法,其中确定存储器中所述目标模块的布局包括:
-检测更新的第一目标模块,所述模块大于对应的第一当前目标模块;
-将所述更新的第一目标模块的预确定部分移动到不同的存储扇区中,以产生简化的更新的第一目标模块和所述更新的第一目标模块的移动部分;
-在所述简化的第一更新的存储扇区中插入指向所述更新的第一目标模块的移动部分的中继。
8.如权利要求1至7中任何一项所述的方法,其中所述转换过程还包括通过至少一个优化参数来控制所述优化步骤。
9.如权利要求8所述的方法,其中所述至少一个优化参数包括用于确定由所述优化步骤引起的大小上的增加所允许的最大值的参数。
10.如权利要求8或9所述的方法,其中所述至少一个优化参数包括用于确定由优化步骤引入的所允许的中继的最大数目的参数。
11.如权利要求1至10中任何一项所述的方法,还包括生成表示所述当前程序代码版本和所述更新的程序代码版本之间的差异的增量文件。
12.如权利要求1至11中任何一项所述的方法,其中所述存储器是闪存。
13.一种用于更新存储在存储器中的程序代码的数据处理系统,所述存储器包括许多存储扇区,所述数据处理系统被适当地编程以执行根据权利要求1至12中任何一项的方法的步骤。
14.一种包括程序代码组件的计算机程序产品,当所述程序代码组件在所述数据处理系统上执行时,所述程序代码组件用于使数据处理系统执行根据权利要求1至12中任何一项的方法。
15.如权利要求14所述的计算机程序产品,其中所述计算机程序产品包括连接器模块。
16.使用如权利要求1至12所述的方法,用于便携式无线电通信设备的重新编程。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US54884104P | 2004-02-27 | 2004-02-27 | |
US60/548,841 | 2004-02-27 | ||
EP04388033A EP1569102B1 (en) | 2004-02-27 | 2004-05-11 | Flash memory programming |
EP04388033.5 | 2004-05-11 | ||
US57327504P | 2004-05-20 | 2004-05-20 | |
US60/573,275 | 2004-05-20 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1954291A true CN1954291A (zh) | 2007-04-25 |
CN100449486C CN100449486C (zh) | 2009-01-07 |
Family
ID=34749073
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005800128201A Expired - Fee Related CN100449486C (zh) | 2004-02-27 | 2005-01-07 | 闪存编程方法 |
Country Status (9)
Country | Link |
---|---|
US (1) | US8255892B2 (zh) |
EP (1) | EP1569102B1 (zh) |
JP (1) | JP4903686B2 (zh) |
KR (1) | KR101088192B1 (zh) |
CN (1) | CN100449486C (zh) |
AT (1) | ATE466334T1 (zh) |
DE (1) | DE602004026822D1 (zh) |
HK (1) | HK1106036A1 (zh) |
WO (1) | WO2005085996A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101686340A (zh) * | 2008-09-26 | 2010-03-31 | 深圳市朗科科技股份有限公司 | 扩展图像通信设备功能的方法及系统 |
CN109496301A (zh) * | 2017-05-19 | 2019-03-19 | 深圳配天智能技术研究院有限公司 | 嵌入式系统中管理文件的方法、嵌入式设备及其存储介质 |
Families Citing this family (44)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7409685B2 (en) | 2002-04-12 | 2008-08-05 | Hewlett-Packard Development Company, L.P. | Initialization and update of software and/or firmware in electronic devices |
US8479189B2 (en) | 2000-11-17 | 2013-07-02 | Hewlett-Packard Development Company, L.P. | Pattern detection preprocessor in an electronic device update generation system |
US8555273B1 (en) | 2003-09-17 | 2013-10-08 | Palm. Inc. | Network for updating electronic devices |
US7873956B2 (en) * | 2003-09-25 | 2011-01-18 | Pantech & Curitel Communications, Inc. | Communication terminal and communication network for partially updating software, software update method, and software creation device and method therefor |
US7694291B2 (en) * | 2004-04-06 | 2010-04-06 | Hewlett-Packard Development Company, L.P. | Build optimizer tool for efficient management of software builds for mobile devices |
US7904895B1 (en) | 2004-04-21 | 2011-03-08 | Hewlett-Packard Develpment Company, L.P. | Firmware update in electronic devices employing update agent in a flash memory card |
JP4505265B2 (ja) * | 2004-06-09 | 2010-07-21 | シスメックス株式会社 | 試料分析装置および試料分析装置に用いる外部記憶媒体 |
US8526940B1 (en) | 2004-08-17 | 2013-09-03 | Palm, Inc. | Centralized rules repository for smart phone customer care |
US7716661B2 (en) * | 2005-03-16 | 2010-05-11 | Microsoft Corporation | Embedded device update service |
TWI345175B (en) * | 2005-06-08 | 2011-07-11 | Winbond Electronics Corp | Method for updating firmware of memory card |
DE102005059319A1 (de) * | 2005-12-09 | 2007-06-14 | Robert Bosch Gmbh | Verfahren zum Betreiben einer Einrichtung |
JP2007164242A (ja) * | 2005-12-09 | 2007-06-28 | Nec Electronics Corp | プログラム書換データ生成装置、プログラム及びプログラム書換データ生成方法 |
US7660558B2 (en) | 2005-12-31 | 2010-02-09 | Adobe Systems Incorporated | Interrupting and resuming a media player |
US20070157194A1 (en) * | 2005-12-31 | 2007-07-05 | Govind Balakrishnan | Post-deployment user interface update in a mobile device |
US20070156841A1 (en) * | 2005-12-31 | 2007-07-05 | Govind Balakrishnan | Platform independent user interface for a mobile device |
US7603113B2 (en) | 2005-12-31 | 2009-10-13 | Adobe Systems Incorporated | Using local codecs |
US8209676B2 (en) | 2006-06-08 | 2012-06-26 | Hewlett-Packard Development Company, L.P. | Device management in a network |
US8752044B2 (en) | 2006-07-27 | 2014-06-10 | Qualcomm Incorporated | User experience and dependency management in a mobile device |
KR20080025957A (ko) * | 2006-09-19 | 2008-03-24 | 삼성전자주식회사 | 휴대용 단말기에서 소프트웨어를 업그레이드하기 위한 장치및 방법 |
US20080117991A1 (en) * | 2006-11-21 | 2008-05-22 | Samsung Electronics Co., Ltd. | Partitioning Compression-Based Firmware Over the Air |
US20080119178A1 (en) * | 2006-11-21 | 2008-05-22 | Samsung Electronics Co., Ltd. | Allocating Compression-Based Firmware Over the Air |
US20130167024A1 (en) | 2006-12-05 | 2013-06-27 | Adobe Systems Incorporated | Embedded document within an application |
US7681009B2 (en) | 2006-12-28 | 2010-03-16 | Motorola, Inc. | Dynamically updateable and moveable memory zones |
US7743339B1 (en) | 2007-02-01 | 2010-06-22 | Adobe Systems Incorporated | Rendering text in a brew device |
US8589779B2 (en) | 2007-03-08 | 2013-11-19 | Adobe Systems Incorporated | Event-sensitive content for mobile devices |
US8806439B1 (en) * | 2007-04-30 | 2014-08-12 | AT & T Intellectual Property II, LP | System and method for program stack security |
EP2012230A1 (en) * | 2007-07-05 | 2009-01-07 | Samsung Electronics Co., Ltd. | Partitioning compression-based firmware over the air |
ATE522861T1 (de) | 2007-12-13 | 2011-09-15 | Ericsson Telefon Ab L M | Firmware-aktualisierung bei einem elektronischen gerät |
US8312447B2 (en) * | 2008-09-25 | 2012-11-13 | Microsoft Corporation | Managing updates using compiler and linker information |
CN103180828A (zh) * | 2010-10-28 | 2013-06-26 | 汤姆逊许可公司 | 用于信息存储的非易失性存储器重新分配的方法 |
JP5660386B2 (ja) * | 2011-05-26 | 2015-01-28 | 日本電気株式会社 | メモリ配置管理装置、メモリ配置管理方法、メモリ配置管理プログラム、およびプログラム作成システム |
US9069966B2 (en) | 2011-10-11 | 2015-06-30 | International Business Machines Corporation | Code updates in processing systems |
JP2013218388A (ja) * | 2012-04-05 | 2013-10-24 | Sharp Corp | プログラム更新装置、方法、プログラム、及び記憶媒体 |
US20140058532A1 (en) * | 2012-08-23 | 2014-02-27 | GM Global Technology Operations LLC | Method for partial flashing of ecus |
US9268552B1 (en) * | 2013-06-18 | 2016-02-23 | Ayla Networks, Inc. | Patching improvement for executables in memory constrained devices |
US10353793B2 (en) | 2014-11-05 | 2019-07-16 | Oracle International Corporation | Identifying improvements to memory usage of software programs |
US9552192B2 (en) * | 2014-11-05 | 2017-01-24 | Oracle International Corporation | Context-based generation of memory layouts in software programs |
US10275154B2 (en) | 2014-11-05 | 2019-04-30 | Oracle International Corporation | Building memory layouts in software programs |
US11329683B1 (en) * | 2015-06-05 | 2022-05-10 | Life365, Inc. | Device configured for functional diagnosis and updates |
US10162547B1 (en) * | 2015-09-16 | 2018-12-25 | Marvell International Ltd. | Memory expansion in a linking process |
US9946533B2 (en) * | 2015-09-30 | 2018-04-17 | Apple Inc. | Software updating |
WO2017158663A1 (ja) * | 2016-03-15 | 2017-09-21 | パナソニックIpマネジメント株式会社 | データ生成装置、組込端末、ファームウェア更新システム及びデータ生成方法 |
KR20210079601A (ko) * | 2019-12-20 | 2021-06-30 | 주식회사 실리콘웍스 | 펌웨어를 업데이트하는 터치 시스템 및 방법 |
FR3139216A1 (fr) * | 2022-08-29 | 2024-03-01 | Stmicroelectronics (Rousset) Sas | Procédé de génération d’un fichier de mise à jour et dispositif serveur correspondant, procédé de mise à jour et dispositif client correspondant, méthode de mise à jour et système correspondant. |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH033036A (ja) * | 1989-05-31 | 1991-01-09 | Nec Corp | ロードモジュール修正方法 |
EP0472812B1 (de) | 1990-08-28 | 1998-05-06 | Landis & Gyr Technology Innovation AG | Verfahren zum Aendern einer in einem Computer eines Gerätes abgespeicherten Maschinensprachenfassung eines ersten Programms in eine Maschinensprachenfassung eines durch mindestens eine Aenderung vom ersten Programm abgeleiteten zweiten Programms |
US5699275A (en) * | 1995-04-12 | 1997-12-16 | Highwaymaster Communications, Inc. | System and method for remote patching of operating code located in a mobile unit |
US6077315A (en) * | 1995-04-17 | 2000-06-20 | Ricoh Company Ltd. | Compiling system and method for partially reconfigurable computing |
US5920723A (en) * | 1997-02-05 | 1999-07-06 | Hewlett-Packard Company | Compiler with inter-modular procedure optimization |
US7409694B2 (en) * | 1998-09-09 | 2008-08-05 | Microsoft Corporation | Highly componentized system architecture with loadable virtual memory manager |
US6401182B1 (en) * | 1999-02-10 | 2002-06-04 | International Business Machines Corporation | Method and apparatus for memory management |
JP2000293366A (ja) * | 1999-04-06 | 2000-10-20 | Mitsubishi Electric Corp | セットトップボックス用モジュールのアップデート方法 |
US20010047512A1 (en) * | 2000-03-23 | 2001-11-29 | Leland Szewerenko | Method and system for linking multiple processors having shared memory |
US6560703B1 (en) * | 2000-04-18 | 2003-05-06 | International Business Machines Corporation | Redundant updatable self-booting firmware |
JP2001344109A (ja) * | 2000-05-31 | 2001-12-14 | Sony Corp | プログラム生成方法及びプログラム生成装置、並びに、記憶媒体 |
EP1337917A4 (en) * | 2000-11-17 | 2009-04-08 | Hewlett Packard Development Co | SYSTEM AND METHOD FOR UPDATING AND DISTRIBUTING INFORMATION |
JP2004536405A (ja) * | 2001-07-16 | 2004-12-02 | ユキング レン | 組み込みソフトウェア更新システム |
CA2357382A1 (en) * | 2001-09-17 | 2003-03-17 | Soma Networks, Inc. | Software update method, apparatus and system |
JP2003108397A (ja) * | 2001-09-27 | 2003-04-11 | Nec Eng Ltd | ファームウェア書き換え方法 |
EP1331643B1 (en) * | 2002-01-29 | 2009-12-16 | Agere Systems Inc. | Differential flash memory programming technique |
JP3801545B2 (ja) * | 2002-08-02 | 2006-07-26 | 松下電器産業株式会社 | コンパイラ用プログラム、コンパイラ装置及びコンパイル方法 |
US7275242B2 (en) * | 2002-10-04 | 2007-09-25 | Hewlett-Packard Development Company, L.P. | System and method for optimizing a program |
JP4063076B2 (ja) * | 2002-12-27 | 2008-03-19 | ソニー株式会社 | 光記録方法及び光記録装置 |
EP1614034B1 (en) * | 2003-04-11 | 2012-01-25 | Hewlett-Packard Development Company, L.P. | Initialization and update of software and/or firmware in electronic devices |
US7089270B2 (en) * | 2003-06-20 | 2006-08-08 | Innopath Software | Processing software images for use in generating difference files |
-
2004
- 2004-05-11 EP EP04388033A patent/EP1569102B1/en not_active Expired - Lifetime
- 2004-05-11 AT AT04388033T patent/ATE466334T1/de not_active IP Right Cessation
- 2004-05-11 DE DE602004026822T patent/DE602004026822D1/de not_active Expired - Lifetime
-
2005
- 2005-01-07 WO PCT/EP2005/000190 patent/WO2005085996A1/en active Application Filing
- 2005-01-07 CN CNB2005800128201A patent/CN100449486C/zh not_active Expired - Fee Related
- 2005-01-07 KR KR1020067017293A patent/KR101088192B1/ko active IP Right Grant
- 2005-01-07 JP JP2007500074A patent/JP4903686B2/ja not_active Expired - Fee Related
- 2005-01-07 US US10/598,332 patent/US8255892B2/en not_active Expired - Fee Related
-
2007
- 2007-10-17 HK HK07111197.1A patent/HK1106036A1/xx not_active IP Right Cessation
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101686340A (zh) * | 2008-09-26 | 2010-03-31 | 深圳市朗科科技股份有限公司 | 扩展图像通信设备功能的方法及系统 |
CN109496301A (zh) * | 2017-05-19 | 2019-03-19 | 深圳配天智能技术研究院有限公司 | 嵌入式系统中管理文件的方法、嵌入式设备及其存储介质 |
Also Published As
Publication number | Publication date |
---|---|
DE602004026822D1 (de) | 2010-06-10 |
KR101088192B1 (ko) | 2011-11-30 |
HK1106036A1 (en) | 2008-02-29 |
JP2007524171A (ja) | 2007-08-23 |
US8255892B2 (en) | 2012-08-28 |
CN100449486C (zh) | 2009-01-07 |
KR20060127161A (ko) | 2006-12-11 |
JP4903686B2 (ja) | 2012-03-28 |
ATE466334T1 (de) | 2010-05-15 |
US20070220504A1 (en) | 2007-09-20 |
EP1569102A1 (en) | 2005-08-31 |
EP1569102B1 (en) | 2010-04-28 |
WO2005085996A1 (en) | 2005-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100449486C (zh) | 闪存编程方法 | |
TWI439931B (zh) | 用於增加三角差動效能之目的碼之產生 | |
US7529779B2 (en) | Apparatus and method for efficient generation of delta files for over-the-air upgrades in a wireless network | |
US8296535B2 (en) | Generating incremental program updates | |
EP1755039B1 (en) | Feedback linker for increased delta performance | |
KR101417759B1 (ko) | 시스템 정보 갱신 장치 및 방법 | |
US20050278715A1 (en) | Segmented linker using spatial locality of reference for over-the-air software updates | |
US20040098427A1 (en) | Device memory management during electronic file updating | |
Panta et al. | Zephyr: Efficient incremental reprogramming of sensor nodes using function call indirections and difference computation | |
US11442740B2 (en) | Supporting instruction set architecture components across releases | |
KR20070057667A (ko) | 패치 최소화 도구용 시스템 및 방법 | |
CN101026826A (zh) | 用于提供在无线装置中使用的整体映像的系统和方法 | |
CN1973262A (zh) | 使用集中动态寻址(da)管理器的动态寻址 | |
EP2778910B1 (en) | Systems and methods to extend rom functionality | |
KR100849301B1 (ko) | 무선 네트워크에서의 오버-더-에어 업그레이드용 델타파일의 효율적 생성 장치 및 방법 | |
CN101436139A (zh) | Fpga下载方法和装置 | |
EP1754322A1 (en) | Apparatus and method for efficient generation of delta files for over-the-air upgrades in a wireless network | |
KR101334938B1 (ko) | 스크립트 파일 기반으로 카드 처리를 수행하는 rf 결재 단말기 | |
KR20070010760A (ko) | 이동통신 단말기의 업그레이드장치 및 그 방법 | |
KR20030041605A (ko) | 통신시스템의 프로그램 원격 업그레이드 장치 및 그 방법 | |
CN115904421A (zh) | 固件空中升级方法、装置和植于处理器的软件架构 | |
CN103984566A (zh) | 一种在轨细粒度的功能函数增加方法 | |
CN116166611A (zh) | 一种基于amd平台动态适配主板的方法、系统及终端 | |
CN112068870A (zh) | 一种程序差异增量升级的方法 | |
CN116954676A (zh) | 汽车控制器远程升级系统、方法、设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1106036 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1106036 Country of ref document: HK |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090107 Termination date: 20210107 |