CN115982057B - 程序指针故障检测方法 - Google Patents
程序指针故障检测方法 Download PDFInfo
- Publication number
- CN115982057B CN115982057B CN202310217319.9A CN202310217319A CN115982057B CN 115982057 B CN115982057 B CN 115982057B CN 202310217319 A CN202310217319 A CN 202310217319A CN 115982057 B CN115982057 B CN 115982057B
- Authority
- CN
- China
- Prior art keywords
- program
- test code
- bit
- address
- program pointer
- 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.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开提供了一种程序指针故障检测方法,包括根据程序代码的大小获取测试代码的存储地址范围以及程序指针的待检测比特位,所述测试代码的存储地址范围包括起始地址和结束地址;从所述测试代码的起始地址运行所述测试代码;根据所述测试代码运行结束后的当前值与所述测试代码的预设值判断是否存在程序指针故障;当所述测试代码运行结束后的当前值与所述测试代码的预设值不同时,判断存在程序指针故障;其中,所述测试代码的起始地址和结束地址中的待检测比特位至少完成0和1的互换。本公开仅通过运行存储地址范围内的测试代码实现对程序指针的检测,而不需要运行程序存储区内存储的所有程序代码,提高检测效率。
Description
技术领域
本公开涉及单片机技术领域,具体涉及一种程序指针故障检测方法。
背景技术
程序计数器(Program Counter,PC),用于存放要执行的下一条指令所在地址。在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC中,即程序计数器的内容即是从内存提取的第一条指令的地址。当执行指令时,CPU将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。
当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的地址,以此实现转移。若转移指令为单字节指令,则PC将移动1个字节到下一个指令执行地址;若转移指令为双字节指令,PC将移动2个字节到下一个指令执行地址。
当PC指针出现故障或者失效时,例如地址中某一个bit位发生固定故障(Stuck atFault),即该bit位无法被修改,一直保持为0或者一直保持为1,此时PC指针存放的地址就可能错误,最终导致程序运行异常。
现有技术中,测试人员搭建测试环境进行系统测试,模拟各种场景,保证所有代码都被执行到,以此验证PC指针功能是否正常。当程序代码的功能越复杂,需要测试人员模拟的场景就越多,检测PC指针是否存在故障的时间也就越长导致检测效率低。
发明内容
本公开提供的一种程序指针故障检测方法,可以改善现有技术中检测PC指针是否存在故障的效率低的问题。
一方面本公开提供了一种程序指针故障检测方法,包括:根据程序代码的大小获取测试代码的存储地址范围以及程序指针的待检测比特位,所述测试代码的存储地址范围包括起始地址和结束地址;从所述测试代码的起始地址运行所述测试代码;根据所述测试代码运行结束后的当前值与所述测试代码的预设值判断是否存在程序指针故障;当所述测试代码运行结束后的当前值与所述测试代码的预设值不同时,判断存在程序指针故障;其中,所述测试代码的起始地址和结束地址中的待检测比特位至少完成0和1的互换。
优选地,程序存储区的大小为2M字节,其中,M为正整数。
优选地,当程序代码的大小小于2M-1字节时,所述程序指针的最低比特位固定为0,以及所述程序指针的待检测比特位为bit1~bit(M-2);当程序代码的大小大于2M-1字节且小于等于2M字节时,所述程序指针的最低比特位固定为0,以及所述程序指针的待检测比特位为bit1~bit(M-1)。
优选地,根据程序代码的大小获取测试代码的存储地址范围包括:根据程序代码的大小获取程序指针的待检测比特位;将所述待检测比特位中最高比特位和最低的3个比特位设置为0以及其余待检测比特位设置为1以得到起始地址偏移量;将起始地址偏移量中的待检测比特位进行0和1的互换得到结束地址偏移量;根据程序存储区的起始地址、起始地址偏移量以及结束地址偏移量获取测试代码的起始地址和结束地址。
优选地,所述测试代码的起始地址为程序存储区的起始地址和起始地址偏移量之和,所述测试代码的结束地址大于等于程序存储区的起始地址和结束地址偏移量之和。
优选地,所述测试代码包括多个指令,每个指令的字节为2n,n为正整数。
优选地,所述测试代码在正常运行过程中,程序指针每次移动2n个字节以到下一指令的地址。
优选地,所述程序指针故障检测方法还包括:将测试代码重新写入所述存储地址范围内。
优选地,所述测试代码采用位于所述存储地址范围内的程序代码。
优选地,当所述测试代码运行结束后的当前值与所述测试代码的预设值相同时,所述程序指针正常运行。
本发明的有益效果是:本公开提供的程序指针故障检测方法,根据程序代码的大小获取测试代码的存储地址范围以及待检测比特位,测试代码的存储地址范围包括起始地址和结束地址,所述测试代码的起始地址和结束地址中的待检测比特位至少完成0和1的互换,仅通过运行存储地址范围内的测试代码实现对程序指针的检测,而不需要运行程序存储区内存储的所有程序代码,提高检测效率,可以及时发现程序指针的异常,降低单片机硬件故障引发的不可控风险。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚。
图1示出本公开实施例提供的程序指针故障检测方法的流程示意图;
图2示出本公开实施例提供的步骤S110的流程示意图。
具体实施方式
为了便于理解本公开,下面将参照相关附图对本公开进行更全面的描述。附图中给出了本公开的较佳实施例。但是,本公开可以通过不同的形式来实现,并不限于本文所描述的实施例。相反的,提供这些实施例的目的是使对本公开内容的理解更加透彻全面。
除非另有定义,本文所使用的所有的技术和科学术语与属于本公开的技术领域的技术人员通常理解的含义相同。在本公开的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本公开。
下面,参照附图对本公开进行详细说明。
图1示出本公开实施例提供的程序指针故障检测方法的流程示意图。如图1所示,所述程序指针故障检测方法包括以下步骤。
在步骤S110中,根据程序代码的大小获取测试代码的存储地址范围以及程序指针(PC指针)的待检测比特位,所述测试代码的存储地址范围包括起始地址和结束地址。
在本实施例中,所述测试代码的起始地址和结束地址中的待检测比特位至少完成0和1的互换。程序存储区的大小为2M字节,其中,M为正整数。当程序代码的大小小于2M-1字节时,所述程序指针(PC指针)的最低比特位固定为0,即bit0=0,以及所述程序指针的待检测比特位为bit1~bit(M-2)。当程序代码的大小大于2M-1字节且小于等于2M字节时,所述程序指针的最低比特位固定为0,以及所述程序指针的待检测比特位为bit1~bit(M-1)。
本实施例中以PC指针的位宽为32bit,程序存储区的大小为1MB(即M=20)为例进行说明,但并不局限于此。程序存储区的起始地址0x08000000,程序结束地址为0x080FFFFF。
例如,当程序代码的大小小于512KB=219byte时,即程序代码的大小小于219字节时,程序存储区的起始地址0x08000000,则程序代码的结束地址小于或等于0x0807FFFF,程序代码的存储地址中高13比特位(即bit19~bit31)为固定值不变,无需检测。由于指令必须对齐到半字或字地址,程序指针中的低19比特位(即bit0~bit18)中的最低比特位固定为0,因此,待检测比特位bit1~bit18由实际运行的程序代码的存储地址决定。
同样地,当程序代码的大小大于512KB且小于等于1MB时,程序存储区的起始地址0x08000000,则程序代码的结束地址小于或等于0x080FFFFF,程序代码的存储地址中高12比特位(即bit20~bit31)为固定值不变,无需检测。程序指针中的低20比特位(即bit0~bit19)中的最低比特位固定为0,因此,待检测比特位bit1~bit19由实际运行的程序代码的存储地址决定。
具体地,如图2所示,步骤S110包括步骤S111-步骤S114。
在步骤S111中,根据程序代码的大小获取程序指针的待检测比特位。
程序存储区的大小为2M字节,其中,M为正整数。当程序代码的大小小于2M-1字节时,所述程序指针(PC指针)的最低比特位固定为0,即bit0=0,以及所述程序指针的待检测比特位为bit1~bit(M-2)。当程序代码的大小大于2M-1字节且小于等于2M字节时,所述程序指针的最低比特位固定为0,以及所述程序指针的待检测比特位为bit1~bit(M-1)。
本实施例中以PC指针的位宽为32bit,程序存储区的大小为1MB(即M=20)为例进行说明,但并不局限于此。程序存储区的起始地址0x08000000,程序结束地址为0x080FFFFF。
例如,当程序代码的大小小于512KB=219byte时,即程序代码的大小小于219字节时,程序存储区的起始地址0x08000000,则程序代码的结束地址小于或等于0x0807FFFF,程序代码的存储地址中高13比特位(即bit19~bit31)为固定值不变,无需检测。由于指令必须对齐到半字或字地址,程序指针中的低19比特位(即bit0~bit18)中的最低比特位固定为0,因此,待检测比特位bit1~bit18由实际运行的程序代码的存储地址决定。
同样地,当程序代码的大小大于512KB且小于等于1MB时,程序存储区的起始地址0x08000000,则程序代码的结束地址小于或等于0x080FFFFF,程序代码的存储地址中高12比特位(即bit20~bit31)为固定值不变,无需检测。程序指针中的低20比特位(即bit0~bit19)中的最低比特位固定为0,因此,待检测比特位bit1~bit19由实际运行的程序代码的存储地址决定。
在步骤S112中,将所述待检测比特位中最高比特位和最低的3个比特位设置为0以及其余待检测比特位设置为1以得到起始地址偏移量。
在本实施例中,若待检测比特位为bit1~bit18,则其中的最高比特位bit18和最低的3个比特位(bit1-bit3)设置为0,其余的待检测比特位(bit4~bit17)设置为1得到起始地址偏移量0x3FFF0。
若待检测比特位为bit1~bit19,则其中的最高比特位bit19和最低的3个比特位(bit1-bit3)设置为0,其余的待检测比特位(bit4~bit18)设置为1得到起始地址偏移量0x7FFF0。
在步骤S113中,将起始地址偏移量中的待检测比特位进行0和1的互换得到结束地址偏移量。
在本实施例中,若待检测比特位为bit1~bit18,则其中的最高比特位bit18和最低的3个比特位(bit1-bit3)设置为1,其余的待检测比特位(bit4~bit17)设置为0得到结束地址偏移量0x4000E。
在步骤S114中,根据程序存储区的起始地址、起始地址偏移量以及结束地址偏移量获取测试代码的起始地址和结束地址。
在本实施例中,所述测试代码的起始地址为程序存储区的起始地址和起始地址偏移量之和;所述测试代码结束地址大于等于程序存储区的起始地址和结束地址偏移量之和。
在步骤S120中,从所述测试代码的起始地址运行所述测试代码。
在本实施例中,所述测试代码包括多个指令,每个指令的字节为2n,n为正整数。所述测试代码在正常运行过程中,程序指针每次移动2n个字节以到下一指令的地址。
在步骤S130中,根据所述测试代码运行结束后的当前值与所述测试代码的预设值判断是否存在程序指针故障。
在本实施例中,测试代码对一操作数依次进行多次操作后得到当前值,将所述测试代码运行结束后的当前值与预设值进行比较以判断程序指针是否存在故障。
在步骤S140中,当所述测试代码运行结束后的当前值与所述测试代码的预设值不同时,判断存在程序指针故障。
在本实施例中,若当前值和预设值不相同,则说明存在程序指针故障。
当所述测试代码运行结束后的当前值与所述测试代码的预设值相同时,则说明不存在程序指针故障,程序计数器正常运行。
在一个优选地实施例中,在步骤S110和步骤S120之间还包括步骤S115。
在步骤S115中,将测试代码重新写入所述存储地址范围内。
在本实施例中,将测试代码写入该存储地址范围内。例如,当程序代码的大小小于512KB时,测试代码从其起始地址写至结束地址。
在一个优选地实施例中,在步骤S115中,将程序代码直接写入程序存储区,并直接运行位于所述存储地址范围内的程序代码。
在本实施例中,直接将程序代码写入程序存储区,位于所述存储地址范围内的程序代码作出测试代码,直接运行位于所述存储地址范围内的程序代码即可。
本公开提供的程序指针故障检测方法,根据程序代码的大小获取测试代码的存储地址范围以及待检测比特位,测试代码的存储地址范围包括起始地址和结束地址,所述测试代码的起始地址和结束地址中的待检测比特位至少完成0和1的互换,仅通过运行存储地址范围内的测试代码实现对程序指针的检测,而不需要运行程序存储区内存储的所有程序代码,提高检测效率,可以及时发现程序指针的异常,降低单片机硬件故障引发的不可控风险。
应当说明的是,在本公开的描述中,需要理解的是,术语“上”、“下”、“内”等指示方位或位置关系,仅是为了便于描述本公开和简化描述,而不是指示或暗示所指的组件或元件必须具有特定的方位,以特定的方位构造和操作,因此不能理解为对本公开的限制。
此外,在本文中,所含术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
最后应说明的是:显然,上述实施例仅仅是为清楚地说明本公开所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引申出的显而易见的变化或变动仍处于本公开的保护范围之中。
Claims (8)
1.一种程序指针故障检测方法,其特征在于,包括:
根据程序代码的大小获取程序指针的待检测比特位,程序存储区的大小为2M字节,其中,M为正整数,当程序代码的大小小于2M-1字节时,所述程序指针的待检测比特位为bit1~bit(M-2),当程序代码的大小大于2M-1字节且小于等于2M字节时,所述程序指针的待检测比特位为bit1~bit(M-1);
将所述待检测比特位中最高比特位和最低的3个比特位设置为0以及其余待检测比特位设置为1以得到起始地址偏移量;
将起始地址偏移量中的待检测比特位进行0和1的互换得到结束地址偏移量;
根据程序存储区的起始地址、起始地址偏移量以及结束地址偏移量获取测试代码的起始地址和结束地址;
从所述测试代码的起始地址运行所述测试代码;
根据所述测试代码运行结束后的当前值与所述测试代码的预设值判断是否存在程序指针故障;
当所述测试代码运行结束后的当前值与所述测试代码的预设值不同时,判断存在程序指针故障。
2.根据权利要求1所述的程序指针故障检测方法,其特征在于,所述程序指针的最低比特位固定为0。
3.根据权利要求1所述的程序指针故障检测方法,其特征在于,所述测试代码的起始地址为程序存储区的起始地址和起始地址偏移量之和,所述测试代码的结束地址大于等于程序存储区的起始地址和结束地址偏移量之和。
4.根据权利要求1所述的程序指针故障检测方法,其特征在于,所述测试代码包括多个指令,每个指令的字节为2n,n为正整数。
5.根据权利要求4所述的程序指针故障检测方法,其特征在于,所述测试代码在正常运行过程中,程序指针每次移动2n个字节以到下一指令的地址。
6.根据权利要求1所述的程序指针故障检测方法,其特征在于,还包括:
将测试代码重新写入存储地址范围内。
7.根据权利要求1所述的程序指针故障检测方法,其特征在于,所述测试代码采用位于存储地址范围内的程序代码。
8.根据权利要求1所述的程序指针故障检测方法,其特征在于,当所述测试代码运行结束后的当前值与所述测试代码的预设值相同时,所述程序指针正常运行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310217319.9A CN115982057B (zh) | 2023-03-02 | 2023-03-02 | 程序指针故障检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310217319.9A CN115982057B (zh) | 2023-03-02 | 2023-03-02 | 程序指针故障检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115982057A CN115982057A (zh) | 2023-04-18 |
CN115982057B true CN115982057B (zh) | 2023-06-09 |
Family
ID=85976440
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310217319.9A Active CN115982057B (zh) | 2023-03-02 | 2023-03-02 | 程序指针故障检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115982057B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0863375A (ja) * | 1994-08-23 | 1996-03-08 | Hitachi Ltd | 障害診断装置 |
JP2001109635A (ja) * | 1999-10-07 | 2001-04-20 | Mitsubishi Electric Corp | 障害対処方法及びコンピュータシステム読み取り可能な記録媒体 |
CN101261603A (zh) * | 2008-04-09 | 2008-09-10 | 中兴通讯股份有限公司 | 故障定位的方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0359849A1 (en) * | 1988-09-21 | 1990-03-28 | Robert Bosch Gmbh | Method of detecting program counter malfunction |
JP3631557B2 (ja) * | 1996-05-29 | 2005-03-23 | 株式会社アドバンテスト | 半導体メモリ試験装置 |
CN106149284B (zh) * | 2015-04-28 | 2019-04-26 | 青岛海尔洗衣机有限公司 | 一种洗衣机故障检测处理方法 |
CN108984383A (zh) * | 2017-05-31 | 2018-12-11 | 芜湖美的厨卫电器制造有限公司 | 程序跑飞的检测方法、装置及家用电器 |
-
2023
- 2023-03-02 CN CN202310217319.9A patent/CN115982057B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0863375A (ja) * | 1994-08-23 | 1996-03-08 | Hitachi Ltd | 障害診断装置 |
JP2001109635A (ja) * | 1999-10-07 | 2001-04-20 | Mitsubishi Electric Corp | 障害対処方法及びコンピュータシステム読み取り可能な記録媒体 |
CN101261603A (zh) * | 2008-04-09 | 2008-09-10 | 中兴通讯股份有限公司 | 故障定位的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN115982057A (zh) | 2023-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US4710866A (en) | Method and apparatus for validating prefetched instruction | |
US7962832B2 (en) | Method for detecting memory error | |
US4694420A (en) | Inverse assembly method and apparatus | |
CN111580495A (zh) | 一种用于医疗器械的远程故障处理方法、装置和系统 | |
CN115982057B (zh) | 程序指针故障检测方法 | |
US20020073359A1 (en) | System and method for high priority machine check analysis | |
US20020129336A1 (en) | Automatic symbol table selection in a multi-cell environment | |
CN108628699B (zh) | 一种基于ecc的flash数据异常处理方法及装置 | |
US20050125649A1 (en) | Method for updating firmware | |
CN116643801B (zh) | 一种芯片安全启动地址空间修复的方法及芯片 | |
US20090105971A1 (en) | System And Method For Time Domain Reflectometry Testing | |
CN116913364B (zh) | 闪存读干扰测试方法和系统、电子设备、存储介质 | |
US6026344A (en) | Diagnosis method for vehicle systems | |
US20030056065A1 (en) | Method and device for memory monitoring, in particular for RAM monitoring | |
JPH04127340A (ja) | 電子機器 | |
JPS6227421B2 (zh) | ||
CN104778050A (zh) | 基本输入输出系统除错方法 | |
JPH0313617B2 (zh) | ||
GB2126761A (en) | Inverse assembler | |
CN104298624A (zh) | 一种安全下载方法、装置及系统 | |
JPH01155438A (ja) | コンパイラ試験方式 | |
JPH03256137A (ja) | 未設定変数検査、認識処理方法および装置 | |
CN115729163A (zh) | 一种制丝设备开机检测方法及计算机存储介质 | |
CN111367816A (zh) | 移动测试方法、装置、计算机设备及存储介质 | |
GB2262368A (en) | Generating databases. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |