[go: up one dir, main page]

CN1168005C - 局部缺陷内存的处理方法和系统 - Google Patents

局部缺陷内存的处理方法和系统 Download PDF

Info

Publication number
CN1168005C
CN1168005C CNB011104082A CN01110408A CN1168005C CN 1168005 C CN1168005 C CN 1168005C CN B011104082 A CNB011104082 A CN B011104082A CN 01110408 A CN01110408 A CN 01110408A CN 1168005 C CN1168005 C CN 1168005C
Authority
CN
China
Prior art keywords
program code
mentioned
address
memory
storage unit
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.)
Expired - Fee Related
Application number
CNB011104082A
Other languages
English (en)
Other versions
CN1378139A (zh
Inventor
林锡聪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Winbond Electronics Corp
Original Assignee
Winbond Electronics Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Winbond Electronics Corp filed Critical Winbond Electronics Corp
Priority to CNB011104082A priority Critical patent/CN1168005C/zh
Publication of CN1378139A publication Critical patent/CN1378139A/zh
Application granted granted Critical
Publication of CN1168005C publication Critical patent/CN1168005C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

一种局部缺陷内存的处理方法,扫描此原始程序代码,在缺陷存储单元所对应的缺陷地址前后,定出第一分断点和第二分断点。移动之间的区段程序代码到程序代码的不对应缺陷地址的第一地址和第二地址间。连接移动后的区段程序代码与原始程序代码中未移动部分的执行顺序,调整移动后的区段程序代码与原始程序代码中未移动部分之间或是区段程序代码本身的参考地址。便可以将更改过的程序加载至内存中。可以避开缺陷存储单元且不影响原程序代码的执行功能。

Description

局部缺陷内存的处理方法和系统
技术领域
本发明是有关于一种局部缺陷内存的处理方法和系统,特别涉及一种处理方法和系统,能够针对还未加载内存或是已存在于内存内的程序代码加以调整,而使得此程序代码仍可以加载至具有局部缺陷存储单元的内存内并且加以执行。
背景技术
以往如果内存IC内存在任何缺陷存储单元(defective memorycell)时,一般是不会将这样的内存IC在市面上贩售。为了减少因单一或少数缺陷而废弃整个IC的情况,目前有许多技术可以让局部缺陷的内存IC,在操作上如同完全正常的内存IC。
例如,美国专利NO.4939694中即揭露一种能够自我测试(self-testing)和自我修补(self-repairing)的内存系统。此内存系统可以在使用现场进行自我测试,以便定位出其中的缺陷存储单元。一旦发现任何缺陷存储单元,此内存系统便会使用一种称为错误修正码引擎(error correction code engine)的装置,对于这些缺陷存储单元进行修补。如果错误修正码引擎无法负荷,则内存系统便会取代掉这些缺陷存储单元。
另外在美国专利No.5644541中则是利用替换内存(substitutionmemory)来处理含有缺陷存储单元的半导体内存。当半导体内存在数个已知位置的错误位时,则利用一映像逻辑(mapping logic)将所有需要存取到这些错误位的存取请求,导向到替换内存内良好的存储单元,借此取代原本的缺陷存储单元。
美国专利No.5278847中则是揭露一种使用错误侦测/修正码(error detecting and correcting code,EDAC)的容错(fault-tolerating)记忆系统。储存数据的可靠度可以利用对于每个数据字符加入EDAC编码和增加备用位(spare-bit)而达成。
美国专利No.5579266中则是利用雷射修补技术和可程化熔丝修补技术来处理缺陷存储单元,可以利用冗余内存来取代缺陷内存。
其中像是美国专利NO.4939694中所揭露的错误检测和修补技术、美国专利No.5278847中所揭露的编码和备用位技术,亦或是美国专利No.5644541中所揭露的存取导向技术,不仅会增加硬件设计上的困难度,同时在可执行机器码每次执行时也会造成程序执行上的负担。另外,如美国专利No.5579266所揭露的冗余内存技术,在硬件设计上或是在实际进行修补的程序上也都十分复杂。
另一方面,一般可执行的机器程序代码是由计算机程序的原始码(source code),利用编辑器(compiler)和连结器(linker)所产生。机器程序代码则可以直接加载内存中来执行。第1图表示一般单芯片计算机(single chip computer)或单芯片系统(system-on-a-chip)的系统配置图。如图所示,此系统包括CPU(central processing unit,或称微处理器)1、RAM(random access memory,随机存取内存)3、ROM(read-only memory,只读存储器)5、I/O界面7以及外部储存装置9,例如硬盘机、软盘机或CD-ROM等等。在正常操作情况下,CPU1会通过数据/地址总线10,由I/O界面7或是外部储存装置9将预备执行的机器程序代码,加载到RAM3中。一般机器程序代码中包含了三个部分,分别为指令(instruction)、数据(data)和堆栈(stack)。CPU1会从指令部分的程序进入点(entry point)开始执行此机器程序代码。
第2图表示一般机器程序代码在执行(execution)时的流程图。首先,取得程序进入点(S1)。接着取得下一个指令的地址(address)(S2),并且根据此地址,读取下一个指令中的操作码(opcode)(S3)。接着将操作码进行译码(S4),并且根据指令形式来判断是否需要操作数(operand)。如果此指令需要操作数,则再从后续地址中读取操作数(S5)。最后根据操作码所代表的指令动作以及操作数所代表的数据内容或参考地址,执行该指令(S6)。如果此指令为程序终止指令(S7),则机器程序代码执行完成(S8),否则回到步骤S2取得下一个指令的地址。必须说明的是,每个指令并不一定包含相同的位组长度,这与所采用的CPU类型有关。一般CPU所采用的指令集可分为可变长度码字指令集和固定长度码字指令集。
在上述执行流程中,主要是针对机器程序代码中的指令部分。如果相同的执行程序应用于数据部分或是堆栈部分,其译码结果则会完全错乱。当某个数据字节由CPU1译码成某个错误的操作码后,则会根据错误的操作码让后面数个数据被误认为操作数。一般CPU1是无法通过标准的撷取和译码动作来辨认出何者为指令部分,何者为数据部分或堆栈部分。另外,程序代码的指令部分和数据/堆栈部分亦不可以任意地加以分断,指令部分的分断必须根据各指令的格式而定,亦即各指令(包含操作数和操作码)的位组长度。而数据/堆栈部分一般是无法分断的,这是因此在数据/堆栈部分中可能包含只有在执行时才能判断的数据关连性,例如数据结构中的数组。
发明内容
有鉴于此,本发明的主要目的,在于提供一种局部缺陷内存的处理方法和系统,能够在不改变硬件配置和不增加软件执行负担的前提下,分别可以在程序代码未加载或是程序代码已存在的情况中,修改程序代码在此局部缺陷内存中的储存方式,以避免使用到缺陷存储单元。
本发明的目的可以通过以下措施来达到:
一种将程序代码加载内存以供执行的方法,适用于包含多个存储单元的一内存和待加载于上述内存的一原始程序代码,其包括下列步骤:
决定上述内存是否包含缺陷存储单元;
当上述内存不包含缺陷存储单元时,则加载上述原始程序代码至上述内存;
当上述内存包含至少一缺陷存储单元时,则执行下列步骤:
扫描上述原始程序代码,在上述缺陷存储单元所对应于上述原始程序代码的一缺陷地址前后,决定第一分断点和第二分断点;
移动上述第一分断点和上述第二分断点之间的区段程序代码,至第一地址和第二地址之间,上述第一地址和上述第二地址之间的地址皆不对应于上述内存的上述缺陷地址;
当上述区段程序代码包含至少一可执行的指令时,提供一连接指令,用以连接移动后的上述区段程序代码与上述原始程序代码中未移动部分的执行顺序;以及
加载上述原始程序代码中未移动部分、上述连接指令和移动后的上述区段程序代码至上述内存中。
一种内存处理系统,用以处理一包含多个存储单元的内存,其包括:
一微处理器,耦接于上述内存,用以加载一原始程序代码,当上述原始程序代码被加载的存储单元皆为无缺陷存储单元时,则加载上述原始程序代码于上述内存,当上述原始程序代码被加载的存储单元包含至少一缺陷存储单元时,则扫描上述原始程序代码,在上述缺陷存储单元所对应于上述原始程序代码的一缺陷地址前后,决定第一分断点和第二分断点,并且移动上述第一分断点和上述第二分断点之间的区段程序代码至第一地址和第二地址之间,并且当上述区段程序代码包含至少一可执行的指令时,提供一连接指令,用以连接上述区段程序代码与上述原始程序代码中未移动部分的执行顺序,并且加载上述原始程序代码中未移动部分、上述连接指令和移动后的上述区段程序代码至上述内存中,其中上述第一地址和上述第二地址之间的程序代码所对应的内存地址不包含上述缺陷地址。
一种防治局部弱化内存处理方法,适用于已载负一原始程序代码的一内存,其包括下列步骤:
检查上述内存,用以找出上述内存中功能弱化的缺陷存储单元;
当上述内存中包含至少一功能弱化的存储单元,则执行下列步骤:
扫描上述原始程序代码,在上述缺陷存储单元对应于上述原始程序代码的一缺陷地址前后,决定第一分断点和第二分断点;
移动上述第一分断点和上述第二分断点之间的区段程序代码,至上述内存中的第一存储单元和第二存储单元之间,上述第一存储单元和上述第二存储单元之间不包含上述缺陷存储单元;以及
当上述区段程序代码包含至少一可执行的指令时,连接移动后的上述区段程序代码与上述原始程序代码中未移动部分的执行顺序。
一种内存处理系统,用以处理一包含多个存储单元并且已储存一原始程序代码的内存,其包括:
一微处理器,耦接于上述内存,用以检查上述内存的存储单元是否有功能弱化的存储单元,当上述弱化的存储单元存在并且已储存上述原始程序代码时,则扫描上述原始程序代码,在上述弱化的存储单元对应于上述原始程序代码的一弱化地址前后,决定第一分断点和第二分断点,并且移动上述第一分断点和上述第二分断点之间的区段程序代码至上述内存中的第一存储单元和第二存储单元之间,并且当上述区段程序代码包含至少一可执行的指令时,连接移动后的上述区段程序代码与上述原始程序代码中未移动部分的执行顺序,其中上述第一存储单元和上述第二存储单元之间不包含上述缺陷存储单元。
一种内存处理方法,适用于包含多个存储单元的一内存和待加载于上述内存的一原始程序代码,其包括下列步骤:
决定上述内存是否包含缺陷存储单元;
当上述内存不包含缺陷存储单元或上述原始程序代码不被加载于上述内存中缺陷存储单元所对应的缺陷地址时,则加载上述原始程序代码至上述内存;
当上述原始程序代码被加载上述内存内至少一缺陷存储单元所对应的缺陷地址时,则执行下列步骤:
扫描上述原始程序代码,在上述缺陷存储单元所对应于上述原始程序代码的一缺陷地址前后,决定第一分断点和第二分断点;
加载上述原始程序代码至上述内存中;
加载上述第一分断点和上述第二分断点之间的区段程序代码,至第一存储单元和第二存储单元之间,上述第一存储单元和上述第二存储单元之间不包含上述缺陷存储单元;以及
当上述区段程序代码包含至少一可执行的指令时,连接位于上述第一存储单元和第二存储单元之间的上述区段程序代码与上述原始程序代码中其它部分的执行顺序。
一种内存处理系统,用以处理一包含多个存储单元的内存,其包括:
一微处理器,耦接于上述内存,用以加载一原始程序代码,当上述原始程序代码被加载的存储单元包含至少一缺陷存储单元时,则该系统能扫描上述原始程序代码,且在上述缺陷存储单元所对应于上述原始程序代码的一缺陷地址前后,决定第一分断点和第二分断点,并且加载上述原始程序代码至上述内存中以及加载上述第一分断点和上述第二分断点之间的区段程序代码至第一存储单元和第二存储单元之间,并且当上述区段程序代码包含至少一可执行的指令时,连接位于上述第一存储单元和第二存储单元之间的上述区段程序代码与上述原始程序代码中其它部分的执行顺序,其中上述第一存储单元和上述第二存储单元之间不包含上述缺陷存储单元。
一种程序代码扫描处理方法,用以决定一原始程序代码的可分断点,上述程序代码扫描处理方法包括下列步骤:
提供一第一数据表和一第二数据表,上述第一数据表用以记录上述原始程序代码中的条件分支指令相关的待扫描地址,上述第二数据表用以记录已读取的地址范围;
依序读取上述原始程序代码;
当所读取的指令为一条件分支指令时,记录上述条件分支指令相关的待扫描地址于上述第一数据表,并且依上述条件分支指令的下一地址或分支目的地址继续扫描;
随指令的读取,更新上述第二数据表的地址范围,并且当完成读取至少一完整指令时,输出可分断点;以及
当所读取的指令为一结束指令或其地址在上述第二数据表的地址范围内时,则根据上述第一数据表的一待扫描地址继续读取,并将该待扫描地址从上述第一数据表中除去。
本发明相比现有技术具有如下优点:
根据上述的目的,本发明提出一种局部缺陷内存的处理方法,可以适用在包含多个存储单元的内存和待加载此内存的原始程序代码之间。假设在此内存中具有至少一缺陷存储单元。首先,扫描此原始程序代码,并且在缺陷存储单元于原始程序代码中所对应的缺陷地址前后,决定出第一分断点和第二分断点。接着移动第一分断点和第二分断点之间的区段程序代码到第一地址和第二地址之间,其中第一地址和第二地址之间不包含上述缺陷地址。当被移动的区段程序代码中包含至少一可执行的指令时(亦即包含指令部分),则需要连接移动后的区段程序代码与原始程序代码中未移动部分的执行顺序。而当移动后的区段程序代码与原始程序代码中未移动部分之间存在参考地址或是区段程序代码本身的内部存在参考地址,则视情况进行调整。最后,便可以将原始程序代码中未移动部分、连接指令以及移动后的区段程序代码依序加载至内存中。由于利用上述方式所加载的程序代码为可执行状态并且不会储存于已知的缺陷存储单元之中,因此即使内存中存在缺陷存储单元,此内存仍可以正常地使用。另外,上述处理过程中不涉及硬件电路的修改或变更,因此实施成本相当低。
另外,如果待加载的原始程序代码本身已经过模块化处理,则在进行程序代码扫描时便可以直接决定所需要的分断点。但是如果原始程序代码并未预先加以模块化处理,则依序读取原始程序代码,再依据原始程序代码中各指令组成,输出多个可分断点,最后便可以根据缺陷地址和待插入的连接指令长度,决定出所需要的第一分断点和第二分断点。要确定扫描到完整的原始程序代码,本发明则提供下列方法。首先,提供第一数据表和第二数据表,其中第一数据表用来记录原始程序代码中条件分支指令的分支目的地址,而第二数据表则用来记录已读取的地址范围。当所读取的指令为一条件分支指令时,便在第一数据表中记录下条件分支指令的分支目的地址;当完成一指令的读取时,则更新第二数据表的地址范围。当所读取的指令为一结束指令或是其地址在第二数据表的地址范围内时,则只要第一数据表的分支目的地址不属于第二数据表的地址范围内,便可以根据第一数据表的分支目的地址继续读取。通过上述处理分支和循环的方式,便可以确保扫描到所有的指令。
另外,要连接移动后的区段程序代码和原始程序代码中未移动部分,可以插入两个无条件分支指令来完成。第一个无条件分支指令插入在第一分断点的地址上,其目的地址为区段程序代码移动后的第一地址;第二个无条件分支指令插入在区段程序代码移动后的第二地址,其目的地址则为第二分断点。
上述处理方式在实用上亦可以略加变更。缘此,本发明另外提出了一种局部缺陷内存处理方法,其程序与上述方式有少量不同。首先,扫描原始程序代码并且在缺陷存储单元对应的缺陷地址前后,决定第一分断点和第二分断点。接着,先将原始程序代码整个加载到内存中,而另外在不包含缺陷存储单元的第一存储单元和第二存储单元之间,再次加载位于第一分断点和第二分断点之间的区段程序代码。接着则与前述方式相同:连接再加载的区段程序代码与原始程序代码中其它部分的执行顺序、修正彼此间的参考地址。通过此方式,除了可以达到前一方式的目的外,由于程序代码先被加载到内存中,还可以加快后续处理步骤的速度,例如修正参考地址的处理。
另外,本发明另提供一种局部缺陷内存的处理方法,可以适用于原始程序代码已存在于内存中的情况。首先,检查内存并且找出内存中功能弱化的至少一缺陷存储单元。接着扫描原始程序代码,以便在缺陷存储单元所对应的缺陷地址前后,决定出第一分断点和第二分断点。接着将第一分断点和第二分断点之间的区段程序代码,移动到至内存中不包含上述缺陷存储单元的第一存储单元和第二存储单元之间。接着则与前述方式相同:连接移动后的区段程序代码与原始程序代码中未移动部分的执行顺序、修正彼此间的参考地址。由于此方式可以适用于使用中的内存,因此在应用上更为方便。
综合以上所述,本发明的局部缺陷内存的处理方法和系统具有下列优点:
1.本发明中解决局部缺陷存储单元的方式,并不需要变更硬件(内存配置)上的设计或是增加硬件线路,而是通过修改程序代码的方式来避免使用到缺陷存储单元;而程序代码在执行时所增加的负担也不严重,在最佳情况下只需要加入两个无条件分支命令(即JMP)即可。因此在实现复杂度以及成本上,本发明的确具有极佳的产业利用价值。
2.本发明不仅可以适用于已知缺陷内存的情况,也可以适用于正在使用中的内存,如第三实施例所述。现有技术中的硬件修正方式通常在执行时都必须将内存抽出单独加以修改,而本发明则可以对于使用中的内存调整其中的程序代码,因此应用上更为方便。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举一较佳实施例,并配合所附图式,作详细说明如下:
附图说明
第1图表示一般单芯片计算机(single chip computer)或单芯片系统(system-on-a-chip)的系统配置图。
第2图表示一般机器程序代码在执行(execution)时的流程图。
第3图表示本发明第一实施例的局部缺陷内存处理系统的配置图。
第4图表示本发明第一实施例的局部缺陷内存处理方法的流程图。
第5图表示在本发明中程序代码扫描方法的流程图。
第6图表示根据本发明的程序代码扫描方法处理一程序代码范例的示意图。
第7图表示在本发明中连接移动后区段程序代码和原始程序代码未移动部分的示意图。
第8图表示在本发明中修正参考地址的示意图。
第9图表示本发明第二实施例的局部缺陷内存处理方法的流程图。
第10图表示本发明第三实施例的局部缺陷内存处理系统的配置图。
第11图表示本发明第三实施例的局部缺陷内存处理方法的流程图。
符号说明1~CPU;3~RAM(内存);5~ROM;7~I/O界面;9~外部储存装置;10~数据/地址总线;20~原始程序代码;30~第一数据表;40~第二数据表;C1-C7~指令段部分;D1-D3~数据/堆栈部分;21~缺陷地址;51、52~连接指令;50~移动区段程序代码后的程序代码;60~完成参考地址修正的程序代码;R1-R3、R1’-R3’~参考地址。
具体实施方式
本发明的局部缺陷内存处理方法和系统,主要是修正待加载或已存在的原始程序代码,以避开发生缺陷的存储单元,借此让具有局部缺陷存储单元的内存IC仍可以正常运作。修正原始程序代码的处理方式,主要是通过辨识机器程序代码的可分断点(break point)和移动区段程序代码的方式来达成。亦即,先辨识出原始程序代码中的可分断点,再根据实际发生缺陷的存储单元所对应到的程序位置,决定出可以移动的区段程序代码;将此区段程序代码移动到可以正常工作的内存单元后,再利用连接指令,维持移动后的区段程序代码和原始程序代码之间的执行顺序,便可以避开使用到缺陷存储单元。由于本发明并不需要变更或重新设计硬件电路,并且在软件执行上所增加的额外负担也非常有限(仅增加连接指令),因此可以达到本发明的目的。以下配合图式,详细说明本发明各实施例的技术内容。
第一实施例:
第3图表示第一实施例的局部缺陷内存处理系统的配置图。在第3图中,内存3包含至少一个缺陷存储单元,而在以下的描述中,除了特别指出外,均以单一缺陷存储单元或相邻的一组缺陷存储单元为预设条件。CPU1则是预备通过数据/地址总线10将原始程序代码20加载到内存3,而原始程序代码20原本预备加载的存储单元中就包括上述的缺陷存储单元。因此,在CPU1中所执行的加载器(loader),必须执行一些前置处理动作,才能够保证加载后的原始程序代码20不会占用到缺陷存储单元,同时原始程序代码20本身仍可以正常的执行。在本实施例中,CPU1和内存3可以共存于同一集成电路中,例如单芯片系统(system on a chip)的应用,另外,亦可以是个别独立的集成电路,此时CPU1与内存3通过特定的IC接脚相连接,用来执行后续所描述的缺陷检查、处理等等步骤。
第4图表示第一实施例的局部缺陷内存处理方法的流程图,其中详述CPU1在加载原始程序代码20前所必须执行的各种步骤。首先,CPU1必须决定在内存3中缺陷存储单元的位置(S10)。亦即,需要对于内存3进行缺陷测试,以便检查出其中是否包含有缺陷存储单元以及其实体位置。一种检查存储单元是否为缺陷的例子,是将数据”1”和”0”写入每个存储单元,再读出其数据是否正确,如果写入数据和读出数据不吻合,即表示该存储单元有缺陷。实际执行测试的装置可以是CPU1本身,亦可以由外部的测试器或计算机来执行。
根据经测试所得到的缺陷存储单元实体地址以及原始程序代码20的加载讯息(例如加载开始点地址),便可以决定出此缺陷存储单元在原始程序代码20中所对应的缺陷地址(S11),亦即此缺陷存储单元在原始程序代码20所代表的绝对参考地址。由于缺陷存储单元无法正常操作,因此CPU1所执行的加载器必须让原本预定储存于此缺陷存储单元的程序代码部分,变更加载到其它的存储单元,以避免数据的流失。然而,根据前述对于一般机器程序代码的描述可知,机器程序代码是不可以任意分断的,某一个字节可能仅是某个指令的一部分,不可以单独加以移动,以避免指令和数据的错乱。因此,CPU1必须在原始程序代码20中找出适当的分断点,才能正确地移动原本占用到缺陷存储单元的字节。
接着,对于原始程序代码20进行扫描(S12),以便找出原始程序代码20中的所有可分断点。在一般机器程序代码中,指令部分中的个别指令间均为可分断点,这是因为即使个别指令被分断,在执行时CPU1仍可以正确译码出正确的指令讯息;相对地,数据部分和堆栈部分则不可分断,这是因为数据和堆栈之间可能具有在执行时才可能检查出来的相关性,例如数组数据。另一方面,CPU1无法直接分辨出机器程序代码中的指令部分和其它部分。因此,CPU1必须对原始程序代码20中的指令部分整个进行扫描,才可以决定出所有的可分断点。
第5图表示本实施例中原始程序代码20的扫描方法流程图。此处所谓的”扫描”,是包含撷取操作码、译码、撷取操作数这些动作,但是不需要执行。为了扫描原始程序代码20的整个指令部分,必须特别处理一般机器程序代码中常见的两种特殊型态,即分支(branch)和循环(loop)。
分支型态会在原始程序代码20中产生两种不同的指令执行顺序,一般是由条件分支指令(conditional branch instruction)所造成,例如JNE、JE、JG等等。在扫描过程中,为了确定处理到所有的指令,因此两种指令执行顺序都需要加以扫描。在本实施例中,扫描过程中会建立第一数据表30(如第5图所示),当遇到任何条件分支指令时,会将该分支指令的下一地址或该分支指令的分支目的地址(branch-toaddress)储存于第一数据表30中。借此,当主要指令执行顺序完成扫描后,便可以根据第一数据表30进行其它执行顺序的扫描。另外需要说明的是,一般分支指令还包含一种无条件分支指令(unconditionalbranch instruction),例如JMP,但是由于这种指令并不会造成两条不同的指令执行顺序,因此本实施例中的扫描可依其目的地址(branch-to address)继续扫描。另一方面,循环型态则会造成扫描无法终止。而在本实施例中,则是在扫描过程中建立第二数据表40,用来记录已经被扫描过的地址范围,而每扫描一个指令,即会更新第二数据表40。当重复扫描到循环内部时,便可以根据第二数据表40判断出已扫描过此部分,因此可以防止继续扫描后续的指令。
以下详细说明第5图中各步骤的动作。首先取得程序进入点(S110)。接着取得并指定下一个指令的地址(S111),并且根据此地址,读取下一个指令中的操作码并且进行译码(S112)。如果此指令需要操作数,则再从后续地址中读取操作数(S113)。此时所读取者为一完整指令,因此可以记录为一可分断点。接着判断此指令是否为条件分支指令(S114),如果是,则可:(i)将此条件分支指令的分支目的地址加入到第一数据表30中(S115),而依该条件分支指令的下一地址继续扫描;或(ii)将该条件分支指令的下一地址加入到第一数据表中,而依该条件分支指令的分支目的地址继续扫描。接着决定出扫描的下一个地址(S116),判断此地址的指令是否为返回指令(例如RET)或程序结束指令(例如END)(S117)。如果下一个地址的指令不是返回指令或是程序结束指令,则根据第二数据表40来判断此一地址是否为已扫描地址范围(S121)。如果此下一个地址亦非已扫描地址范围,则修改第二数据表40以更新已扫描地址范围之后(S122),继续处理下一个指令。如果在步骤S117中下一个地址的指令的确是返回指令或是程序结束指令,亦或在步骤S121中下一个地址为已扫描过的地址范围,则判断第一数据表30中是否仍有待扫描地址(S118)。如果仍有,则从第一数据表30中取得一待扫描地址并且将其从第一数据表30中移去(S119),再修改第二数据表40中的已扫描地址范围(S122),继续处理此一待扫描地址的后续指令。如果第一数据表30中已经没有待扫描地址时,则表示已经扫描完成全部的指令(S120)。此时已经得到所有的可分断点,并且可以判断出原始程序代码20中的指令部分和数据/堆栈部分。在第5图中,虚线框P1表示处理分支型态的相关步骤,虚线框P2则表示处理循环型态的相关步骤。
上述扫描过程中的处理动作,可以简要描述如下:(1)当所读取的指令为一条件分支指令(例如JNE、JE、JG等等)时,将条件分支指令的分支目地址或下一地址记录于第一数据表30中;(2)当完成读取一指令时,便更新第二数据表40的地址范围并且输出可分断点;(3)如果所读取的指令为一结束指令或返回指令或者是其地址在第二数据表40的地址范围内,只要第一数据表30的某个待扫描地址不属于第二数据表40的地址范围,便从第一数据表30的这个待扫描地址继续读取。
根据第5图所述的扫描程序,以下以一实例来说明其扫描的动作。第6图表示根据第5图扫描方法来处理一程序代码范例的示意图。其中,程序进入点为Q1。当从Q1扫描至Q2,读取到一个条件分支指令JNE,此时在第一数据表30中记录此条件分支指令JNE的分支目的地址Q6。当继续扫描至Q3时,则读取到一个非条件分支指令JMP。对于非条件分支指令JMP不需要储存其分支目的地址Q10,而是直接到其分支目的地址继续进行扫描。接着从Q10扫描到Q11,则依序读取到两个条件分支指令JG和JE。同样的,在第一数据表30则记录这两个指令的分支目的地址Q4和Q8后,继续进行扫描。当扫描到Q12时,读取到程序结束指令END,因此结束主程序段的扫描。此时,已扫描的区域包括C1、C2、C6、C7,而第一数据表30中则记录Q6、Q4和Q8的待扫描地址。接着,从第一个待扫描地址Q6继续进行扫描,直到Q7读取到返回指令RET为止。接着再从第二个待扫描地址Q4继续进行扫描,直到扫描到Q5,虽然并未读取到任何结束指令或是返回指令,不过其下一个地址Q6是属于已扫描区域,因此仍结束扫描。接着再从第三个待扫描地址Q8继续进行扫描,直到扫描到Q9。同样的,虽然并未读取到任何结束指令或是返回指令,不过其下一个地址Q10是属于已扫描区域,因此仍结束扫描。至此,第一数据表30中已经没有其它的待扫描地址,因此整个扫描工作完成。在扫描过程中,可以判断出所有的可分断点(即每一完整的指令的前后皆为可分断点),而且判断出C1-C7是属于指令部分,而D1-D3则属于数据或堆栈等非指令部分,并且当扫描完成但仍未被扫描到的一连续程序代码区段,可被视为一数据或堆栈等非指令区段。
回到第4图,当完成原始程序代码20的扫描动作,便可以根据所得到的可分断点,在缺陷存储单元所对应的缺陷地址前后分别决定第一分断点和第二分断点(S13)。每一完整的指令之间或之前之后,皆为可分断点。第一分断点和第二分断点之间的指令部分(也可能包含数据/堆栈部分)称为区段程序代码,而区段程序代码需要被移动到其它的地址上,以避开缺陷地址。在本实施例中,第一分断点和第二分断点的决定方式,是选择以最接近缺陷地址但是与缺陷地址之间仍存在数个字节的分断点为准,亦即第一/第二分断点与缺陷地址之间仍存在数个良好的存储单元,可以用以储存连接指令(此点稍后详述)。在以下的描述中,均以此种情况为例进行说明。不过上述的分断点选择方式并非用以限定本发明。举例来说,第一/第二分断点也可以根据与缺陷地址间至少间隔数个可分断点的方式来选择。另外,如果后续的移动方式是采用将缺陷地址后的所有程序代码往下位移一定长度字节的方式,此时第一分断点可以根据在缺陷地址之前且与缺陷地址之间仍存在数个字节的方式来选择,而第二分断点则设在程序代码的最后,即该程序代码最后一个字节之后,而将缺陷地址附近及后方的程序代码设为需要移动的区段程序代码,而将该区段程序代码移至该缺陷地址之后,仍可以达到本发明的目的。
决定第一分断点和第二分断点之间的区段程序代码之后,接着则可以将此区段程序代码移动到第一地址和第二地址之间(S14)。必须注意的是,缺陷地址不应该位于第一地址和第二地址之间,也就是区段程序代码在加载后的存储单元中不包含有缺陷存储单元。在完成区段程序代码的重新寻址后,如果被移动的区段程序代码包含指令部分,接着必须插入连接指令,让原始程序代码仍维持其程序执行顺序。在本实施例中,主要是插入两个无条件分支指令(JMP)来达成连接的目的。第一个无条件分支指令是插入于第一分断点的地址上,其分支目的地址是指向移动后的区段程序代码;第二个无条件分支指令是插入于移动后区段程序代码的后面,而其分支目的地址则是指向第二分断点的地址,但如果第二分断点的地址是设在程序代码的最后,则不需要该第二个无条件分支指令。因此,当程序代码执行到第一分断点地址上的指令(其为区段程序代码的开始部分)时,则会通过第一个无条件分支指令,跳到移动后的区段程序代码继续执行;当完成移动后区段程序代码的指令后,则通过第二个无条件分支指令跳回到第二分断点地址上的指令。另外,如果区段程序代码只是单纯的数据/堆栈部分,则不需要加入连接指令,只需要修改与其相关的参考地址即可。
第7图表示本实施例中连接移动后区段程序代码和原始程序代码未移动部分的示意图。如图所示,原始程序代码20包含了各程序代码A-G,而缺陷地址21则位于程序代码E内,在程序代码E的前后则分别决定出第一分断点和第二分断点。当移动程序代码E至新的地址范围内,即出现移动后的程序代码E’。符号51和52分别表示插入的第一个/第二个无条件分支指令。当程序代码D执行完成后,即通过第一个无条件分支指令跳到程序代码E’;当程序代码E’执行完成后,则再通过第二个无条件分支指令跳回程序代码F。因此,原始程序代码的程序执行顺序可以维持,仅需要多执行两个无条件分支指令即可。
当完成步骤S15的连接动作后,CPU1加载的前置动作已经大致完成,只剩下一般机器程序代码中常见的参考地址(reference address)还未处理。如果在原始程序代码20中的参考地址与移动后的区段程序代码有关,则必须进行检查和修正。因此,CPU1必须修正相关的参考地址(S16)。第8图表示在本实施例中修正参考地址的示意图。如图所示,原始程序代码20中有三种参考地址会与包含缺陷地址21的程序代码E有关,分别标示为R1、R2、R3。R1表示程序代码E中指令的参考地址指向程序代码E中地址的情况;R2表示其它程序代码(例如程序代码B)中指令的参考地址指向程序代码E中地址的情况;R3表示程序代码E中指令的参考地址指向其它程序代码(如程序代码B)的情况。这些参考地址必须在程序代码E移动后为程序代码E’后,修正其参考地址(如R1’,R2’,R3’),以便产生实际可以加载到内存3的机器程序代码60。
要修正参考地址,CPU1可对于整个原始程序代码20进行再次扫描,以便找出与包含缺陷地址的区段程序代码相关的参考地址。另外,一般参考地址又可以细分为两种寻址模式(addressing mode),分别为相对地址寻址模式(relative addressing mode)和绝对地址寻址模式(absolute addressing mode)。如果与上述三种参考地址情况一并考虑,则共有六种类型。在R1的参考地址中,只有绝对地址寻址模式的参考地址才需要修正。在R3的参考地址中,只有相对地址寻址模式的参考地址才需要修正。而在R2的参考地址中则相对及绝对地址都需要修正。当修正上述绝对地址寻址模式的参考地址时(均是指向区段程序代码E),则在此参考地址中加入程序代码E和移动后程序代码E’之间的相对位移量即可。若要修正上述相对地址寻址模式的参考地址,亦可以利用程序代码E和移动后程序代码E’之间的相对位移量来达成。不过相对地址寻址模式一般在使用上有其限制,亦即相对地址通常会限定在一定范围内,因此在处理相对地址寻址模式上会较为复杂。例如,本实施例中在缺陷地址21的前后都预留相当数量的可用存储单元,则可以利用此部分插入连接的指令而间接达到相同的效果;另外,也可以选择将缺陷地址21后面的所有程序代码往后方(即较高地址的方向)位移数个字节,以便避开缺陷存储单元,如此也可以避免因一区段程序代码移动过远以致超过相对地址寻址模式范围的困扰;另一种解决方式则是调整编辑器的编码格式,例如尽量采用绝对地址而避免使用相对地址进行编码,或将因一区段程序代码移动过远而受影响的相对地址的寻址码改为绝对地址寻址码。
当完成上述的前置处理,CPU1的加载器便可以将原始程序代码、连接指令和移动后的区段程序代码加载到内存3中,完成所有的步骤(S17)。由于原本会占用缺陷存储单元的区段程序代码已经被移动,因此程序代码可以正常的执行和操作。
另外,上述说明虽然是以单一缺陷存储单元为例,但是对于熟习此技艺者而言,可以延伸应用到多个缺陷存储单元的情况,其基本处理模式仍然相同。另外,本实施例中虽然是以字节的扫描方式来决定出可分断点,但对于熟习此技艺者而言,也可以将原始程序代码加以模块化(modularized)以方便决定可分断点。此时不需要执行如本实施例中所描述的扫描动作,便可以利用较简单的扫描程序决定出缺陷地址前后的第一分断点和第二分断点。
以上所揭露的局部缺陷内存的处理方法和系统,虽是以一般计算机系统为例,不过其最佳的应用范例应是在单芯片系统(system-on-a-chip)或单芯片计算机(single chip computer)上。在这类系统中,内存模块一般是内建的(embedded),无法任意替换。在发现部分存储单元有缺陷的情况下,便可以利用本实施例中所揭露的方法,整个芯片在处理后仍然可以正常执行程序代码。另外,本实施例中所揭露的局部缺陷内存亦可以适用在烧录程序的应用上,例如快擦写存储器(flash memory)或是电子可抹式PROM(electricallyerasable programmable read-only memory)的程序烧录上,即使局部存储单元有缺陷,仍然可以使用。最重要的是,本实施例在实施上并不会增加硬件设计的成本和复杂度,而对于软件执行时的负担也比现有技术来得轻。由此可知,本发明具有极高的产业利用价值。
第二实施例:
虽然第一实施例中已揭露一定程序的处理方式,可以解决局部缺陷内存的问题,但是其间仍有部分程序可以变更。例如,本实施例则是对于第一实施例改变其原始程序代码的扫描处理方式以及加载内存的顺序而产生。
第9图表示第二实施例的局部缺陷内存处理方法的流程图。如第9图所示,一方面CPU1决定出缺陷存储单元的实体位置(S20)并且决定出缺陷存储单元在原始程序代码20中所对应的缺陷地址(S21),另一方面也对于原始程序代码20进行扫描(S22)。由步骤S20和步骤S21可以决定出缺陷存储单元的缺陷地址,而由步骤S22则可以决定出原始程序代码20中的可分断点。此同步处理可以适用于具有多任务功能的CPU或是多重CPU的系统中。接着根据缺陷地址以及可分断点的地址,便可以进一步决定出第一分断点和第二分断点(S23),也就是需要移动的区段程序代码范围。
接着的步骤顺序则与第一实施例不同。先将整个原始程序代码20加载到内存3中(S24),此时包含缺陷地址的区段程序代码亦会加载到缺陷存储单元相邻的存储单元中,不过由于其中包含缺陷存储单元,因此这部分的区段程序代码并不会实际使用。接着,再次加载此区段程序代码到内存3中的第一存储单元和第二存储单元之间(S25),而在第一存储单元和第二存储单元之间则不包含缺陷存储单元。接着则与第一实施例相同,插入连接指令以便连接区段程序代码和原始程序代码20中的其它部分(S26),并且修正其中的参考地址(S27)。与第一实施例一样,此时在内存3中的程序代码是可以正常执行的,并且实际执行的程序代码不会储存到缺陷存储单元内。
在第二实施例中,是先分别加载原始程序代码20和移动后的区段程序代码,再进行连接以及修正参考地址的处理。此样的处理方式除了可以达到第一实施例相同的效果外,还可以得到较佳的处理效率。一般原始程序代码的来源大都是外部储存媒介,例如硬盘机、软盘机等等。要执行连接动作以及修正参考地址等处理时,在处理速度上较内存3来得慢,特别是在修正参考地址时,必须再次对于整个原始程序代码3进行扫描。而在本实施例中,所有待处理的程序代码均已被加载于内存3中,因此可以更快地完成上述的处理步骤。另外,原始程序代码亦可储存于一已知无缺陷的内存中,如ROM,RAM或PROM,可加快上述程序代码扫描的速度,不过此方式需要将该原始程序代码暂时或长久存放于另外的良好内存,或一内存中已确定不含缺陷存储单元的部分。
第三实施例:
第一和第二实施例是适用于原始程序代码还未加载内存中的情况,此时CPU(微处理器)可以在原始程序代码还未加载内存前即施以前置处理,以便调整程序代码来避开缺陷存储单元。而本实施例所要处理的情况,则是当原始程序代码已经成功地加载内存中,但是部分存储单元在一段时间后却显示功能弱化的现象。这些功能弱化的存储单元目前虽然可以正常读取,但是在一定时间之后,从其读出的逻辑值就会变得越来越难以辨认。此时必须对于内存内的原始程序代码内容加以调整,以避开这些功能弱化的缺陷存储单元。
第10图表示第三实施例的局部缺陷内存处理系统的配置图。如第10图所示,此时原始程序代码20已经加载于内存3中。而在系统操作过程中,则可以通过CPU1本身或其它外部的处理器或测试器,周期性地对于内存3中的每个存储单元进行测试。如果在测试中某个存储单元所读出的数据已经越来越难以辨认时,则CPU1即设定此存储单元为缺陷存储单元,并且执行本实施以下所揭露的处理方法,以便停止使用功能弱化的缺陷存储单元。
第11图表示第三实施例的局部缺陷内存处理方法的流程图。如第11图所示,原始程序代码20已经存在于内存3中(S30)。此时,一方面CPU1可以对于原始程序代码20进行扫描(S31),得到原始程序代码20中的所有可分断点;另一方面也对于内存3进行周期性测试并且决定出其中功能弱化的缺陷存储单元(S32)。由于原始程序代码20已经加载于内存3,因此可以根据缺陷存储单元很快地判断出对应的缺陷地址。接着根据缺陷地址以及所有可分断点的地址,便可以进一步决定出第一分断点和第二分断点(S33),也就是需要移动的区段程序代码范围。
先在内存3中找出一段功能正常的内存区块(即第一存储单元和第二存储单元之间),以便容纳需要移动的区段程序代码。接着将此区段程序代码复制到第一存储单元和第二存储单元之间(S34)。接着则与第一实施例相同,插入连接指令以便连接区段程序代码和原始程序代码20中的其它部分(S35),并且修正其中的参考地址(S36)。此时在内存3中的程序代码是可以正常执行的,并且实际执行的程序代码不会储存到功能弱化的缺陷存储单元内。
另外,如上述内存中含多个并不相邻的缺陷存储单元,亦可应用本发明产生数组与这些缺陷存储单元相对应的可分断点组,而将这些可分断点组间的数个程序代码区段移至数个不同的新地址,并做相关的参考地址的更正,以产生一个在执行时可避开这些缺陷存储单元的更改过的程序代码。
本发明虽以一较佳实施例揭露如上,然其并非用以限定本发明,任何熟习此项技艺者,在不脱离本发明的精神和范围内,当可做少量的更动与润饰,因此本发明的保护范围当视权利要求并结合说明书和附图为准。

Claims (52)

1.一种将程序代码加载内存以供执行的方法,适用于包含多个存储单元的一内存和待加载于上述内存的一原始程序代码,其特征是:其包括下列步骤:
决定上述内存是否包含缺陷存储单元;
当上述内存不包含缺陷存储单元时,则加载上述原始程序代码至上述内存;
当上述内存包含至少一缺陷存储单元时,则执行下列步骤:
扫描上述原始程序代码,在上述缺陷存储单元所对应于上述原始程序代码的一缺陷地址前后,决定第一分断点和第二分断点;
移动上述第一分断点和上述第二分断点之间的区段程序代码,至第一地址和第二地址之间,上述第一地址和上述第二地址之间的地址皆不对应于上述内存的上述缺陷地址;
当上述区段程序代码包含至少一可执行的指令时,提供一连接指令,用以连接移动后的上述区段程序代码与上述原始程序代码中未移动部分的执行顺序;以及
加载上述原始程序代码中未移动部分、上述连接指令和移动后的上述区段程序代码至上述内存中。
2.如权利要求1所述的将程序代码加载内存以供执行的方法,其特征是:还包括一步骤:
修正上述区段程序代码与上述原始程序代码中未移动部分之间的参考地址。
3.如权利要求2所述的将程序代码加载内存以供执行的方法,其特征是:上述修正步骤是用以修正移动后的上述区段程序代码对于上述原始程序代码中未移动部分的相对寻址模式参考地址,以及修正上述原始程序代码中未移动部分对于移动后的上述区段程序代码的相对寻址模式参考地址以及绝对寻址模式参考地址。
4.如权利要求2所述的将程序代码加载内存以供执行的方法,其特征是:还包括一步骤:
修正移动后的上述区段程序代码内的绝对寻址模式参考地址。
5.如权利要求1所述的将程序代码加载内存以供执行的方法,其特征是:其中扫描上述原始程序代码的步骤中还包括下列步骤:
依序读取上述原始程序代码;
依据上述原始程序代码中各指令组成,输出多个可分断点;以及
根据上述缺陷地址和插入的上述连接指令,决定上述第一分断点和上述第二分断点。
6.如权利要求5所述的将程序代码加载内存以供执行的方法,其特征是:依序读取上述原始程序代码的步骤中还包括下列步骤:
提供一第一数据表和一第二数据表,上述第一数据表用以记录上述原始程序代码中条件分支指令的分支目的地址,上述第二数据表用以记录已读取的地址范围;
当所读取的指令为一条件分支指令时,记录上述条件分支指令的分支目的地址于上述第一数据表;
当完成读取一指令时,更新上述第二数据表的地址范围;以及
当所读取的指令为一结束指令或其地址在上述第二数据表的地址范围内时,并且当上述第一数据表的分支目的地址不属于上述第二数据表的地址范围时,则根据上述第一数据表的分支目的地址继续读取。
7.如权利要求1所述的将程序代码加载内存以供执行的方法,其特征是:上述连接步骤中,是插入第一无条件分支指令于上述第一分断点的地址上,上述第一无条件分支指令的目的地址为上述区段程序代码移动后的第一地址,并且插入第二无条件分支指令于上述区段程序代码移动后的第二地址,上述第二无条件分支指令的目的地址为上述第二分断点。
8.如权利要求1所述的将程序代码加载内存以供执行的方法,其特征是:上述第二分断点是在上述原始程序代码的最后一个字节之后。
9.一种内存处理系统,用以处理一包含多个存储单元的内存,其特征是:其包括:
一微处理器,耦接于上述内存,用以加载一原始程序代码,当上述原始程序代码被加载的存储单元皆为无缺陷存储单元时,则加载上述原始程序代码于上述内存,当上述原始程序代码被加载的存储单元包含至少一缺陷存储单元时,则扫描上述原始程序代码,在上述缺陷存储单元所对应于上述原始程序代码的一缺陷地址前后,决定第一分断点和第二分断点,并且移动上述第一分断点和上述第二分断点之间的区段程序代码至第一地址和第二地址之间,并且当上述区段程序代码包含至少一可执行的指令时,提供一连接指令,用以连接上述区段程序代码与上述原始程序代码中未移动部分的执行顺序,并且加载上述原始程序代码中未移动部分、上述连接指令和移动后的上述区段程序代码至上述内存中,其中上述第一地址和上述第二地址之间的程序代码所对应的内存地址不包含上述缺陷地址。
10.如权利要求9所述的内存处理系统,其特征是:上述第二分断点是在上述原始程序代码的最后一个字节之后。
11.如权利要求9所述的内存处理系统,其特征是:上述微处理器还修正移动后的上述区段程序代码与上述原始程序代码中未移动部分之间的参考地址,以及移动后的上述区段程序代码内的参考地址。
12.如权利要求9所述的内存处理系统,其特征是:上述微处理器的连接动作中,是插入第一无条件分支指令于上述第一分断点的地址上,上述第一无条件分支指令的目的地址为上述区段程序代码移动后的第一地址,并且插入第二无条件分支指令于上述区段程序代码移动后的第二地址,上述第二无条件分支指令的目的地址为上述第二分断点。
13.如权利要求9所述的内存处理系统,其特征是:上述内存和上述微处理器是置于同一芯片内。
14.如权利要求9所述的内存处理系统,其特征是:上述内存和上述微处理器是置于独立的不同芯片内。
15.一种防治局部弱化内存处理方法,适用于已载负一原始程序代码的一内存,其特征是:其包括下列步骤:
检查上述内存,用以找出上述内存中功能弱化的缺陷存储单元;
当上述内存中包含至少一功能弱化的存储单元,则执行下列步骤:
扫描上述原始程序代码,在上述缺陷存储单元对应于上述原始程序代码的一缺陷地址前后,决定第一分断点和第二分断点;
移动上述第一分断点和上述第二分断点之间的区段程序代码,至上述内存中的第一存储单元和第二存储单元之间,上述第一存储单元和上述第二存储单元之间不包含上述缺陷存储单元;以及
当上述区段程序代码包含至少一可执行的指令时,连接移动后的上述区段程序代码与上述原始程序代码中未移动部分的执行顺序。
16.如权利要求15所述的防治局部弱化内存处理方法,其特征是:上述第二分断点是在上述原始程序代码的最后一个字节之后。
17.如权利要求15所述的防治局部弱化内存处理方法,其特征是:还包括一步骤:
修正移动后的上述区段程序代码与上述原始程序代码中未移动部分之间的参考地址。
18.如权利要求17所述的防治局部弱化内存处理方法,其特征是:上述修正步骤是用以修正移动后的上述区段程序代码对于上述原始程序代码中未移动部分的相对寻址模式参考地址,以及修正上述原始程序代码中未移动部分对于移动后的上述区段程序代码的相对寻址模式参考地址以及绝对寻址模式参考地址。
19.如权利要求18所述的防治局部弱化内存处理方法,其特征是:还包括一步骤:
修正移动后的上述区段程序代码内的绝对寻址模式参考地址。
20.如权利要求15所述的防治局部弱化内存处理方法,其特征是:扫描上述原始程序代码的步骤中还包括下列步骤:
依序读取上述原始程序代码;
依据上述原始程序代码中各指令组成,输出多个可分断点;以及
根据上述缺陷地址和插入的上述连接指令,决定上述第一分断点和上述第二分断点。
21.如权利要求20所述的防治局部弱化内存处理方法,其特征是:依序读取上述原始程序代码的步骤中还包括下列步骤:
提供一第一数据表和一第二数据表,上述第一数据表用以记录上述原始程序代码中条件分支指令的分支目的地址,上述第二数据表用以记录已读取的地址范围;
当所读取的指令为一条件分支指令时,记录上述条件分支指令的分支目的地址于上述第一数据表;
当完成读取一指令时,更新上述第二数据表的地址范围;以及
当所读取的指令为一结束指令或其地址在上述第二数据表的地址范围内时,并且当上述第一数据表的分支目的地址不属于上述第二数据表的地址范围时,则根据上述第一数据表的分支目的地址继续读取。
22.如权利要求15所述的防治局部弱化内存处理方法,其特征是:上述连接步骤中,是插入第一无条件分支指令于上述第一分断点的地址上,上述第一无条件分支指令的目的地址为上述区段程序代码移动后的第一存储单元,并且插入第二无条件分支指令于上述区段程序代码移动后的第二存储单元之后,上述第二无条件分支指令的目的地址为上述第二分断点。
23.一种内存处理系统,用以处理一包含多个存储单元并且已储存一原始程序代码的内存,其特征是:其包括:
一微处理器,耦接于上述内存,用以检查上述内存的存储单元是否有功能弱化的存储单元,当上述弱化的存储单元存在并且已储存上述原始程序代码时,则扫描上述原始程序代码,在上述弱化的存储单元对应于上述原始程序代码的一弱化地址前后,决定第一分断点和第二分断点,并且移动上述第一分断点和上述第二分断点之间的区段程序代码至上述内存中的第一存储单元和第二存储单元之间,并且当上述区段程序代码包含至少一可执行的指令时,连接移动后的上述区段程序代码与上述原始程序代码中未移动部分的执行顺序,其中上述第一存储单元和上述第二存储单元之间不包含上述缺陷存储单元。
24.如权利要求23所述的内存处理系统,其特征是:上述第二分断点是在上述原始程序代码的最后一个字节之后。
25.如权利要求23所述的内存处理系统,其特征是:上述微处理器是直接耦接于上述内存。
26.如权利要求23所述的内存处理系统,其特征是:上述微处理器还修正移动后的上述区段程序代码与上述原始程序代码中未移动部分之间的参考地址,以及移动后的上述区段程序代码内的参考地址。
27.如权利要求23所述的内存处理系统,其特征是:上述微处理器的连接动作中,是插入第一无条件分支指令于上述第一分断点的地址上,上述第一无条件分支指令的目的地址为上述区段程序代码移动后的第一存储单元,并且插入第二无条件分支指令于上述区段程序代码移动后的第二存储单元,上述第二无条件分支指令的目的地址为上述第二分断点。
28.如权利要求23所述的内存处理系统,其特征是:上述内存和上述微处理器是置于是置于同一芯片内。
29.如权利要求23所述的内存处理系统,其特征是:上述内存和上述微处理器是置于是置于独立的不同芯片内。
30.一种内存处理方法,适用于包含多个存储单元的一内存和待加载于上述内存的一原始程序代码,其特征是:其包括下列步骤:
决定上述内存是否包含缺陷存储单元;
当上述内存不包含缺陷存储单元或上述原始程序代码不被加载于上述内存中缺陷存储单元所对应的缺陷地址时,则加载上述原始程序代码至上述内存;
当上述原始程序代码被加载上述内存内至少一缺陷存储单元所对应的缺陷地址时,则执行下列步骤:
扫描上述原始程序代码,在上述缺陷存储单元所对应于上述原始程序代码的一缺陷地址前后,决定第一分断点和第二分断点;
加载上述原始程序代码至上述内存中;
加载上述第一分断点和上述第二分断点之间的区段程序代码,至第一存储单元和第二存储单元之间,上述第一存储单元和上述第二存储单元之间不包含上述缺陷存储单元;以及
当上述区段程序代码包含至少一可执行的指令时,连接位于上述第一存储单元和第二存储单元之间的上述区段程序代码与上述原始程序代码中其它部分的执行顺序。
31.如权利要求30所述的内存处理方法,其特征是:还包括一步骤:
修正位于上述第一存储单元和第二存储单元之间的上述区段程序代码与上述原始程序代码中其它部分之间的参考地址。
32.如权利要求31所述的内存处理方法,其特征是:上述修正步骤是用以修正位于上述第一存储单元和第二存储单元之间的上述区段程序代码对于上述原始程序代码中其它部分的相对寻址模式参考地址,以及修正上述原始程序代码中其它部分对于位于上述第一存储单元和第二存储单元之间的上述区段程序代码的相对寻址模式参考地址以及绝对寻址模式参考地址。
33.如权利要求32所述的内存处理方法,其特征是:还包括一步骤:
修正位于上述第一存储单元和第二存储单元之间的上述区段程序代码内的绝对寻址模式参考地址。
34.如权利要求30所述的内存处理方法,其特征是:扫描上述原始程序代码的步骤中还包括下列步骤:
依序读取上述原始程序代码;
依据上述原始程序代码中各指令组成,输出多个可分断点;以及
根据上述缺陷地址和插入的上述连接指令,决定上述第一分断点和上述第二分断点。
35.如权利要求34所述的内存处理方法,其特征是:依序读取上述原始程序代码的步骤中还包括下列步骤:
提供一第一数据表和一第二数据表,上述第一数据表用以记录上述原始程序代码中条件分支指令的分支目的地址,上述第二数据表用以记录已读取的地址范围;
当所读取的指令为一条件分支指令时,记录上述条件分支指令的分支目的地址于上述第一数据表;
当完成读取一指令时,更新上述第二数据表的地址范围;以及
当所读取的指令为一结束指令或其地址在上述第二数据表的地址范围内时,并且当上述第一数据表的分支目的地址不属于上述第二数据表的地址范围时,则根据上述第一数据表的分支目的地址继续读取。
36.如权利要求30所述的内存处理方法,其特征是:上述连接步骤中,是插入第一无条件分支指令于上述第一分断点的地址上,上述第一无条件分支指令的目的地址为上述区段程序代码的第一存储单元,并且插入第二无条件分支指令于上述区段程序代码的第二存储单元,上述第二无条件分支指令的目的地址为上述第二分断点。
37.一种内存处理系统,用以处理一包含多个存储单元的内存,其特征是:其包括:
一微处理器,耦接于上述内存,用以加载一原始程序代码,当上述原始程序代码被加载的存储单元包含至少一缺陷存储单元时,则该系统能扫描上述原始程序代码,且在上述缺陷存储单元所对应于上述原始程序代码的一缺陷地址前后,决定第一分断点和第二分断点,并且加载上述原始程序代码至上述内存中以及加载上述第一分断点和上述第二分断点之间的区段程序代码至第一存储单元和第二存储单元之间,并且当上述区段程序代码包含至少一可执行的指令时,连接位于上述第一存储单元和第二存储单元之间的上述区段程序代码与上述原始程序代码中其它部分的执行顺序,其中上述第一存储单元和上述第二存储单元之间不包含上述缺陷存储单元。
38.如权利要求37所述的内存处理系统,其特征是:上述第二分断点是在上述原始程序代码的最后一个字节之后。
39.如权利要求37所述的内存处理系统,其特征是:上述微处理器还修正位于上述第一存储单元和第二存储单元之间的上述区段程序代码与上述原始程序代码中其它部分之间的参考地址,以及位于上述第一存储单元和第二存储单元之间的上述区段程序代码内的参考地址。
40.如权利要求37所述的内存处理系统,其特征是:上述微处理器的上述连接动作中,是插入第一无条件分支指令于上述第一分断点的地址上,上述第一无条件分支指令的目的地址为上述区段程序代码的第一存储单元,并且插入第二无条件分支指令于上述区段程序代码的第二存储单元,上述第二无条件分支指令的目的地址为上述第二分断点。
41.如权利要求37所述的内存处理系统,其特征是:上述内存和上述微处理器是置于是置于同一芯片内。
42.如权利要求37所述的内存处理系统,其特征是:上述内存和上述微处理器是置于是置于独立的不同芯片内。
43.一种程序代码扫描处理方法,用以决定一原始程序代码的可分断点,其特征是:上述程序代码扫描处理方法包括下列步骤:
提供一第一数据表和一第二数据表,上述第一数据表用以记录上述原始程序代码中的条件分支指令相关的待扫描地址,上述第二数据表用以记录已读取的地址范围;
依序读取上述原始程序代码;
当所读取的指令为一条件分支指令时,记录上述条件分支指令相关的待扫描地址于上述第一数据表,并且依上述条件分支指令的下一地址或分支目的地址继续扫描;
随指令的读取,更新上述第二数据表的地址范围,并且当完成读取至少一完整指令时,输出可分断点;以及
当所读取的指令为一结束指令或其地址在上述第二数据表的地址范围内时,则根据上述第一数据表的一待扫描地址继续读取,并将该待扫描地址从上述第一数据表中除去。
44.如权利要求43所述的程序代码扫描处理方法,其特征是:上述程序代码扫描处理方法是在一原始程序代码加载一内存时,决定可移动的区段程序代码。
45.如权利要求44所述的程序代码扫描处理方法,其特征是:上述内存包含至少一缺陷存储单元。
46.如权利要求43所述的程序代码扫描处理方法,其特征是:上述条件分支指令相关的待扫描地址为上述条件分支指令的分支目的地址。
47.如权利要求43所述的程序代码扫描处理方法,其特征是:上述条件分支指令相关的待扫描地址为上述条件分支指令的下一地址。
48.如权利要求43所述的程序代码扫描处理方法,其特征是:还包括一步骤:
当所读取的指令为一无条件分支指令时,则由上述无条件分支指令的分支目的地址继续扫描。
49.如权利要求43所述的程序代码扫描处理方法,其特征是:当上述所读取的指令为一结束指令或其地址在上述第二数据表的地址范围内,且上述第一数据表中无待扫描地址时,则结束扫描。
50.如权利要求43所述的程序代码扫描处理方法,其特征是:当扫描结束时,将仍未被扫描到的一连续程序代码地址判定为一数据程序代码区段。
51.如权利要求43所述的程序代码扫描处理方法,其特征是:当扫描结束时,将仍未被扫描到的一连续程序代码地址判定为一数据或堆栈程序代码区段。
52.如权利要求43所述的程序代码扫描处理方法,其特征是:当扫描结束时,将仍未被扫描到的一连续程序代码地址判定为一非指令区段。
CNB011104082A 2001-04-02 2001-04-02 局部缺陷内存的处理方法和系统 Expired - Fee Related CN1168005C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB011104082A CN1168005C (zh) 2001-04-02 2001-04-02 局部缺陷内存的处理方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB011104082A CN1168005C (zh) 2001-04-02 2001-04-02 局部缺陷内存的处理方法和系统

Publications (2)

Publication Number Publication Date
CN1378139A CN1378139A (zh) 2002-11-06
CN1168005C true CN1168005C (zh) 2004-09-22

Family

ID=4658575

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB011104082A Expired - Fee Related CN1168005C (zh) 2001-04-02 2001-04-02 局部缺陷内存的处理方法和系统

Country Status (1)

Country Link
CN (1) CN1168005C (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6901498B2 (en) * 2002-12-09 2005-05-31 Sandisk Corporation Zone boundary adjustment for defects in non-volatile memories

Also Published As

Publication number Publication date
CN1378139A (zh) 2002-11-06

Similar Documents

Publication Publication Date Title
CN1232912C (zh) 非易失性存储器的控制方法
CN1265396C (zh) 控制器大容量存储器混装型半导体集成电路器件及测试法
CN1229724C (zh) 外部存储设备和数据处理方法
CN1145972C (zh) 随机存储器的自动检测方法及其检测电路
CN1409323A (zh) 用于存储存储器测试信息的方法和装置
US9086961B2 (en) Repair method and device for abnormal-erase memory block of non-volatile flash memory
CN1596401A (zh) 非易失性存储器装置的控制方法
CN101042938A (zh) 以纠错码存储器构成的具有冗余功能的半导体存储器设备
CN101075213B (zh) 只读存储器数据修补电路和方法、及其嵌入式系统
EP3392885B1 (en) Non-volatile memory repair circuit
JP2003338197A (ja) 消去/プログラミングに不具合を生じた不揮発性メモリ装置の自己修復方法およびそれに関する不揮発性メモリ装置
US20010032327A1 (en) System and method of processing memory
CN1691202A (zh) 具有码位单元阵列的半导体存储装置
CN1435758A (zh) 存储装置、数据处理方法以及数据处理程序
CN1307534C (zh) 微计算机装置的分支控制系统以及相关方法
TWI587302B (zh) 記憶體編程方法以及記憶體裝置
CN1168005C (zh) 局部缺陷内存的处理方法和系统
CN1489766A (zh) 分析和修复存储器的方法和装置
CN1209707C (zh) 内存处理方法和处理系统
TW449685B (en) Handling method and system for partial defective memory
JP2008251154A (ja) 不揮発性半導体記憶装置
JP5815212B2 (ja) データ書き込み方法およびシステム
US6370655B1 (en) Method and system for reversed-sequence code loading into partially defective memory
US7203867B2 (en) Processor system, processor and arithmetic processing method
JP2010079686A (ja) データ処理装置、メモリ制御回路およびメモリ制御方法

Legal Events

Date Code Title Description
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C06 Publication
PB01 Publication
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20040922