CN100357908C - 电子装置程序的测试方法 - Google Patents
电子装置程序的测试方法 Download PDFInfo
- Publication number
- CN100357908C CN100357908C CNB2005100055912A CN200510005591A CN100357908C CN 100357908 C CN100357908 C CN 100357908C CN B2005100055912 A CNB2005100055912 A CN B2005100055912A CN 200510005591 A CN200510005591 A CN 200510005591A CN 100357908 C CN100357908 C CN 100357908C
- Authority
- CN
- China
- Prior art keywords
- program
- order code
- electronic device
- storage
- code
- 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
Links
Images
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种电子装置程序的测试方法。首先,加载电子装置程序于计算机中一程序存储器。接着,执行电子装置程序,若发生一存储器存取错误,则该操作系统执行一错误处理例程。错误处理例程首先撷取导致存储器错误的一指令码的地址,接着,依据程序代码的地址,于程序存储器修改指令码,以防止存储器存取错误。
Description
技术领域
本发明涉及一种电子装置程序的测试方法,特别是涉及一种可动态自动修改电子装置程序代码的测试方法。
背景技术
一般目前开发电子装置可分为两部分,一部份为硬件,另一部份则属于电子装置的软件开发。目前软件开发的过程中,通常是于计算机中撰写程序,并于撰写完后于计算机中的仿真器(Simulator)仿真硬件工作,进行测试及除虫(Debug)的操作。待硬件开发完成后,便可直接将软件移植至硬件上与硬件共同运作。
在软件的程序代码中有很多对硬件的存取操作。以移动电话为例,这些存取的操作是通过某个输出入端口(I/O Port)而对其液晶屏幕、背光源或喇叭等外围装置进行控制。然而,在计算机上并没有如移动电话的硬件的输出入端口,因此在模拟过程中,存取输出入端口的程序代码会造成存储器存取错误。
一般而言,在计算机上进行仿真仅需测试与硬件的无关部分的程序代码,而跳过或忽略关于硬件程序代码。以C语言开发的软件为例,可以利用前置处理器(preprocessor),在编译(compiling)时决定产生仿真器版本或是硬件版本,在仿真器版本中,关于硬件的程序代码系被忽略而不被编译,因此在计算机上执行时就不会发生存储器错误。例如以下关于硬件的程序代码,其是以前置处理器#ifndef加以定义:
1.#ifndef FEATURE_SIMULATOR
2.*(0x50200014)=0x0F
3.#endif
其中第2行程序是对地址为0x50200014的输出入端口进行写入,在仿真器版本中,FEATURE_SIMULATOR事先被定义,因此第2行程序代码在编译阶段即会被忽略,在硬件版本中,FEATURE_SIMULATOR不被定义,因此第2行程序代码会被编译,因此可以执行正确的输出入端口的存取操作。
利用前置处理器标记的作法,在关于硬件的程序代码较少的时候尚为可行,然而目前电子装置的软件功能越来越多,许多对硬件的存取操作的程序代码也更多,也因此若利用人工将各硬件相关的程序代码加上如上述的前置处理控制相当耗时耗力。
发明内容
有鉴于此,本发明的目的是提供一种不需要人工重复修改程序代码,在仿真阶段时,程序可自动且实时修改需要做硬件存取操作的程序代码,以防止存储器错误。
根据本发明的目的,提出一种移动电话程序的测试方法,测试方法包括:首先,加载移动电话程序于一程序存储器。接着,执行移动电话程序,若发生一存储器存取错误,则该操作系统执行一错误处理例程。执行一错误处理例程包括首先撷取导致存储器错误的一指令码的地址。接着,依据程序代码的地址,于程序存储器修改指令码,以防止存储器存取错误。
为使本发明的上述目的、特征、和优点能更明显易懂,下文特举一较佳实施例,并结合附图详细说明如下。
附图说明
图1A示出了移动电话程序的仿真器版本制作方块图。
图1B示出了移动电话程序的硬件版本制作方块图。
图2A示出了移动电话程序测试方法流程图。
图2B示出了步骤118的流程图。
具体实施方式
第一实施例
图1A及图1B分别为移动电话程序的仿真器版本及硬件版本的制作方块图。请参照图1A,其示出了移动电话程序的仿真器版本制作方块图。移动电话程序A的原始码(source code)A.C及模拟副函式原始码B.C,可能利用如C语言、C++语言或JAVA程序语言等不同语言所撰写,经由编译/连结器100编译及连结后产生仿真器执行文件(A+B).exe,此文件即可在计算机中执行,以对移动电话程序A进行仿真测试。模拟副函式原始码B.C使移动电话程序A可以于计算机中执行所需的副函式,以做为移动电话程序A与计算机的操作系统的接口,移动电话程序A的原始码相关于至少一移动电话内硬件存取端口。
请参照图1B,其示出了移动电话程序的硬件版本制作方块图。移动电话程序A的原始码A.C与硬件副函式原始码B’.C经由编译器103编译及连结后产生硬件执行文件(A+B’).bin,此文件即可加载移动电话的只读存储器中执行。
由于移动电话A中具有许多与硬件相关的程序代码,若在计算机中直接执行会造成存储器错误,因此在已知技术中,是在其原始码A.C中以前置处理器将与硬件相关的程序代码标记,使得编码/连结器100忽略这些与硬件相关的程序代码,然而,已知的作法需以人工方式在原始码A.C中加入前置处理器的标记,繁琐且浪费时间。本实施例中不需更动原始码A.C,仅于副函式原始码B.C中加入错误处理例程,使得发生存储器错误时可以实时地更改程序代码,从而避免产生错误。
一般操作系统执行程序时,遇到任何无法处理的错误就会产生错误讯息,本实施例则在此错误处理例程内增加实时修改程序代码的程序,使得操作系统发现存储器错误时,即可及时修改程序。
请参照图2A,其示出了移动电话程序测试方法流程图。首先,加载移动电话程序A的仿真器版本执行文件(A+B).exe于计算机中的程序存储器,如步骤110所示。接着,于步骤112中,执行此执行文件(A+B).exe。接着,在步骤114中,若执行到与至少一硬件存取端口相关的程序代码时,若产生存储器存取错误,此时操作系统跳到步骤116以执行错误处理例程,否则在步骤112中继续执行(A+B).exe。
错误处理例程如步骤116及118所示。在步骤116中,撷取导致存储器存取错误的指令码的地址。最后,在步骤118中,依据程序代码的地址,实时于程序存储器中修改发生错误的指令码,使得错误处理例程结束后返回此指令码地址执行时,此修改后指令码并不会发生存储器存取错误,且继续程序执行。
请参照图2B,其示出了步骤118的实时修改指令码的流程图。首先,步骤118a配置一替代存储器。接着,步骤118b判别是否配置替代存储器成功。若配置替代存储器成功,则于程序存储器中修改此指令码使其改为存取此次配置的替代存储器,并返回步骤112继续执行此修改后指令码。若配置替代存储器不成功,则可于程序存储器中变更此指令码为不操作(NOP)或跳跃(JUMP)等指令。例如原先在存储器地址0×17354中的指令码为C7 0100 00 00 00的指令,其是对硬件进行存取的操作,执行此指令码时是发生存储器错误。经过错误处理例程修改后,可修改成不操作(NOP)的程序代码如90 90 90 90 90 90的指令,或是修改成跳跃的程序代码(JUMP)如EB 04 0000 00 00的跳跃指令(Jump)以跳开该行指令码。
上述作法中,不一定要配置替代存储器,也可以跳过步骤118a及118b而直接执行步骤118c以更换指令码。
在本实施例中,若仍有其它存取存储器错误的情形产生,错误处理例程均可利用上述的方式解决存取存储器错误讯息的问题。同时,更可利用下一次发生存储器错误时,还原上次的存储器错误时,于程序存储器中所修改的指令码。
本发明上述实施例所披露的电子装置程序的测试方法,在此是以移动电话为例,在不改变移动电话程序的情况下,利用错误处理例程直接动态且实时的修改发生存取存储器错误的指令码,大大的减少以往仿真器利用人工进行程序修改的时间。当仿真测试无误后,移动电话程序即可直接如图1B所示编译连结成(A+B’).bin,加载于移动电话即可执行,而不需对原始文件A.C进行任何修改,降低了整个软件研发与软硬件整合的时程。
综上所述,虽然本发明已以一较佳实施例披露如上,然其并非用以限定本发明,本领域的技术人员在不脱离本发明的精神和范围内可作各种的更动与润饰,因此本发明的保护范围以本申请的权利要求为准。
Claims (8)
1.一种程序的测试方法,适用于一计算机系统测试一电子装置程序,该计算机系统运作于一操作系统,该测试方法包括:
加载该电子装置程序于该计算机系统内的一程序存储器;
执行该电子装置程序;及
若发生一存储器存取错误,则撷取导致该存储器存取错误的一指令码的地址,并依据该指令码的地址,于该程序存储器修改该指令码,以防止该存储器存取错误。
2.如权利要求1所述的方法,其中修改该指令码步骤包括配置一替代存储器,并于该程序存储器修改该指令码,以使该指令码改为存取该替代存储器。
3.如权利要求2所述的方法,其中当配置该替代存储器错误时,是更换该指令码以防止该存储器存取错误。
4.如权利要求3所述的方法,其中更换该指令码步骤中,是将该指令码更换为不操作NOP或跳跃JUMP的指令码。
5.如权利要求1所述的方法,其中修改该指令码步骤中,是将该指令码更换为不操作NOP或跳跃JUMP的指令码。
6.一种程序的测试方法,该程序适用于一电子装置,该电子装置具有至少一个硬件存取端口,该测试方法包括:
加载该电子装置程序于一计算机系统内的一程序存储器;
执行该电子装置程序;及
若发生相对于该至少一个硬件存取端口的一存储器存取错误,则撷取导致该存储器存取错误的一指令码的地址,并依据该指令码的地址,于该程序存储器修改该指令码,以防止该存储器存取错误。
7.如权利要求6所述的方法,该方法还包括:
省略该指令码,继续程序执行。
8.如权利要求6所述的方法,其中修改该指令码步骤中,是将该指令码更换为不操作NOP或跳跃JUMP的指令码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100055912A CN100357908C (zh) | 2005-01-21 | 2005-01-21 | 电子装置程序的测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100055912A CN100357908C (zh) | 2005-01-21 | 2005-01-21 | 电子装置程序的测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1808397A CN1808397A (zh) | 2006-07-26 |
CN100357908C true CN100357908C (zh) | 2007-12-26 |
Family
ID=36840306
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100055912A Expired - Fee Related CN100357908C (zh) | 2005-01-21 | 2005-01-21 | 电子装置程序的测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100357908C (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111104267B (zh) * | 2018-10-26 | 2022-05-13 | 长鑫存储技术有限公司 | 存储器的调试处理方法及其调试处理系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE10027530A1 (de) * | 2000-06-02 | 2001-12-06 | Hitex Systementwicklung Ges Fu | Verfahren und Testsystem zum automatisierten Erkennen von Programmierfehlern |
CN1395173A (zh) * | 2001-07-06 | 2003-02-05 | 宏碁股份有限公司 | 用于信息装置的测试系统及测试方法 |
US6662314B1 (en) * | 1999-11-15 | 2003-12-09 | Mitsubishi Denki Kabushiki Kaisha | Microcomputer including program for rewriting data in an internal flash memory |
CN1477505A (zh) * | 2002-08-24 | 2004-02-25 | 深圳市中兴通讯股份有限公司 | 嵌入式操作系统中异常故障定位方法 |
CN1503131A (zh) * | 2002-11-20 | 2004-06-09 | 科统科技股份有限公司 | 具有自动修补功能的存储装置及其自动修补方法 |
CN1567270A (zh) * | 2003-06-14 | 2005-01-19 | 中兴通讯股份有限公司 | 一种使用多个启动程序存储器的处理器系统及其启动方法 |
-
2005
- 2005-01-21 CN CNB2005100055912A patent/CN100357908C/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6662314B1 (en) * | 1999-11-15 | 2003-12-09 | Mitsubishi Denki Kabushiki Kaisha | Microcomputer including program for rewriting data in an internal flash memory |
DE10027530A1 (de) * | 2000-06-02 | 2001-12-06 | Hitex Systementwicklung Ges Fu | Verfahren und Testsystem zum automatisierten Erkennen von Programmierfehlern |
CN1395173A (zh) * | 2001-07-06 | 2003-02-05 | 宏碁股份有限公司 | 用于信息装置的测试系统及测试方法 |
CN1477505A (zh) * | 2002-08-24 | 2004-02-25 | 深圳市中兴通讯股份有限公司 | 嵌入式操作系统中异常故障定位方法 |
CN1503131A (zh) * | 2002-11-20 | 2004-06-09 | 科统科技股份有限公司 | 具有自动修补功能的存储装置及其自动修补方法 |
CN1567270A (zh) * | 2003-06-14 | 2005-01-19 | 中兴通讯股份有限公司 | 一种使用多个启动程序存储器的处理器系统及其启动方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1808397A (zh) | 2006-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100555218C (zh) | 用于改善片上仿真系统中高级语言的仿真速度的装置和方法 | |
CN101799763B (zh) | 内核在线补丁的方法、装置和系统 | |
CN100485620C (zh) | 集成开发环境中的程序代码编译方法 | |
EP0926592A2 (en) | Software emulation system | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
JP2000181725A (ja) | 実行可能なコ―ドを改変し、追加機能を付与するための方法およびシステム | |
WO2019005228A1 (en) | AUTOMATED ADAPTATION OF A SOURCE CODE IN ORDER TO INJECT FUNCTIONS BETWEEN VERSIONS OF A PLATFORM | |
CN105354045A (zh) | 补丁的制作方法及装置、补丁的激活方法及装置 | |
CN104820586A (zh) | 一种航天器嵌入式软件在轨维护方法 | |
MXPA01012308A (es) | Migracion de diferentes lenguajes de fuente hacia un medio de ejecucion. | |
CN105739992B (zh) | 基于gcc编译器的软件控制内存分拆和映射的方法及系统 | |
CN112882718A (zh) | 编译处理方法、装置、设备及存储介质 | |
CN111367579B (zh) | 一种基于v-rep插件的处理器在环仿真方法 | |
CN110659088B (zh) | 一种嵌入式环境下程序扩展的方法及系统 | |
CN1499374A (zh) | 一种单元测试自动化方法 | |
CN111930398A (zh) | 应用程序更新方法、装置、系统、介质及设备 | |
CN100357908C (zh) | 电子装置程序的测试方法 | |
CN109144849B (zh) | 一种嵌入式软件调测方法 | |
JP2004139458A (ja) | プログラム開発支援装置、プログラム実行装置、コンパイル方法およびデバッグ方法 | |
JP2919302B2 (ja) | Cpuシミュレーション方法 | |
CN116594622A (zh) | 基于类型推导与数据流分析的Python程序编译方法及系统 | |
CN112559336B (zh) | 自适应调试异构计算芯片的方法、装置、系统及主板芯片 | |
US20030070117A1 (en) | Simulation apparatus and simulation method | |
CN111984329B (zh) | 一种boot引导软件标准化生成、执行方法及系统 | |
CN112241268A (zh) | 一种keil工程的编译方法、系统及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |