CN112667514A - 一种微程序的调试方法及其调试装置 - Google Patents

一种微程序的调试方法及其调试装置 Download PDF

Info

Publication number
CN112667514A
CN112667514A CN202011644223.3A CN202011644223A CN112667514A CN 112667514 A CN112667514 A CN 112667514A CN 202011644223 A CN202011644223 A CN 202011644223A CN 112667514 A CN112667514 A CN 112667514A
Authority
CN
China
Prior art keywords
program
debugged
detection point
micro
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
Application number
CN202011644223.3A
Other languages
English (en)
Other versions
CN112667514B (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.)
Haiguang Information Technology Co Ltd
Original Assignee
Haiguang Information Technology Co Ltd
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 Haiguang Information Technology Co Ltd filed Critical Haiguang Information Technology Co Ltd
Priority to CN202011644223.3A priority Critical patent/CN112667514B/zh
Publication of CN112667514A publication Critical patent/CN112667514A/zh
Application granted granted Critical
Publication of CN112667514B publication Critical patent/CN112667514B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种微程序的调试方法及其调试装置,该微程序的调试方法通过确定处于闲置状态的存储空间,作为存储程序检测点信息的载体;之后能够通过直接读取存储空间内的程序检测点信息,获取程序检测点的运行情况信息,了解处理器的待调试子模块中的待调试微程序的运行情况。与现有技术中通过JTAG或串口读取微程序的运行情况信息的方式相比,本申请的方案,不仅能够对那些能够通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况进行读取,还能够对那些不能通过JTAG或串口进行访问的待调试子模块内待调试微程序的运行情况进行读取,获取那些不能通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况信息。

Description

一种微程序的调试方法及其调试装置
技术领域
本发明涉及计算机领域,尤其涉及一种微程序的调试方法及其调试装置。
背景技术
常规的嵌入式程序开发与调试,芯片硬件一般会提供JTAG(Joint Test ActionGroup,联合测试工作组,一种国际标准测试协议,主要用于芯片内部测试)接口或其他接口,配合IDE(Integrated Development Environment,集成开发环境,用于提供程序开发环境的应用程序),便于程序下载到芯片执行时,通过IDE实时控制和仿真程序运行。或者通过串口,在程序中嵌入串口打印信息,以跟踪和反应程序运行情况。
大型复杂芯片外部硬件接口上有JTAG或串口,但一般设计是作为整体芯片生产测试使用。微程序是大型复杂芯片的某些子模块的管理代码,这些子模块处于复杂芯片的内部深处,作为复杂芯片的某些部分,没有独立的外接调试接口。因此子模块的微程序,没有办法将开发调试过程中的运行情况信息,通过这种接口反应到外部显示器上,即无法采用这种常规的调试机制。同时,JTAG或串口作为复杂芯片的公共接口,可以控制到相应的子模块。但即便开发出针对某个子模块的微程序调试手段,由于复杂芯片存在若干子模块的微程序调试需求,会涉及到共享该调试接口的情况。在共享调试接口时,会产生资源强占的问题,对各子模块的微程序开发并不方便友好。
发明内容
本发明提供了一种微程序的调试方法及其调试装置,以便于对处理器待调试子模块中的微程序的运行情况进行读取。
本发明提供了一种微程序的调试方法,该微程序的调试方法包括:确定存储模块中处于闲置状态的存储空间;初始化处于闲置状态的存储空间;在待调试微程序中确定程序检测点;在待调试微程序的程序检测点处植入检测程序;依据植入检测程序后的待调试微程序,运行处理器的待调试子模块,将程序检测点信息存储到存储空间内;读取存储空间内的程序检测点信息。
在上述的方案中,通过确定一处于闲置状态的存储空间,作为存储程序检测点信息的载体;之后能够通过直接读取存储空间内所存储的程序检测点信息,获取程序检测点的运行情况信息,以了解处理器的待调试子模块中的待调试微程序的运行情况。与现有技术中通过JTAG或串口读取微程序的运行情况信息的方式相比,本申请的方案,不仅能够对那些能够通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况进行读取,还能够对那些不能通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况进行读取,获取那些不能通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况信息。
在一个具体的实施方式中,该调试方法还包括:依据所读取的程序检测点信息,获取程序检测点的运行情况信息;根据所获取的运行情况信息,对微程序及待调试子模块进行分析。根据所获得的运行情况信息,对待调试微程序及待调试子模块进行分析,以分析完善待调试微程序。
在一个具体的实施方式中,处理器为中央处理器或图形处理器,以便于对中央处理器或图形处理器的待调试子模块中的待调试微程序的运行情况进行读取及分析。
在一个具体的实施方式中,存储模块为中央处理器能够访问的寄存器,以提高获取程序检测点的运行情况信息的速度,提高调试效率。
在一个具体的实施方式中,每个程序检测点为事件检测点或程序位置检测点,以便于了解和掌握事件检测点及程序位置检测点的运行情况。
在一个具体的实施方式中,在待调试微程序中确定程序检测点包括:在待调试微程序中确定N个程序检测点。获取程序检测点的运行情况信息包括:获取N个程序检测点中的每个程序检测点是否发生或被运行的信息。将程序检测点信息存储到存储空间内包括:将N个程序检测点是否发生或被运行的信息与寄存器中的N个比特位建立映射关系;将所获取的N个程序检测点中的每个程序检测点是否发生或被运行的信息存储在寄存器中对应的比特位中。现有技术中采用一个寄存器直接赋值记录某个程序检测点的状态的方式,未能充分利用寄存器的资源,且还需要多次修改程序记录多个程序检测点,从而影响调试跟踪效率。本申请的方案与现有技术相比,采用寄存器分位记录的方式,能够充分利用寄存器的资源,且通过一个寄存器能够记录多个程序检测点的运行情况,从而减少修改程序记录的次数,提高调试跟踪效率。
在一个具体的实施方式中,程序检测点的个数N不大于待调试子模块中所有处于闲置状态的寄存器的总比特位数,以便于使用待调试子模块中的寄存器作为存储模块,以提高调试速度。
在一个具体的实施方式中,将获取的每个程序检测点是否发生或被运行的信息存储在寄存器中对应的比特位中包括:将寄存器中的N个比特位初始化为“0”;判断每个程序检测点是否发生或被运行的信息为未发生或未被运行,则保持该程序检测点对应的比特位继续为“0”;判断每个程序检测点是否发生或被运行的信息为已发生或已被运行,则在寄存器内该程序检测点对应的比特位写入“1”。以便于记录事件检测点是否发生,或程序位置检测点是否被运行到。
在一个具体的实施方式中,读取存储空间内的程序检测点信息包括:读取寄存器内的N个比特位的数据。根据所获取的运行情况信息,对待调试微程序及待调试子模块进行分析包括:根据N个比特位的数据,分析应该执行的待调试微程序是否被执行,不应该被执行的待调试微程序是否被执行;根据分析结果,判断待调试微程序执行情况是否符合微程序设计思想,修改待调试微程序。以便于根据寄存器记录的多个程序检测点的运行情况信息,对待调试微程序进行分析和完善。
在一个具体的实施方式中,在待调试微程序中确定程序检测点包括:在待调试微程序中确定M个程序检测点。获取程序检测点的运行情况信息包括:获取M个程序检测点中的每个程序检测点发生或被运行的频次信息。将程序检测点信息存储到存储空间内包括:将寄存器中的H个比特位划分为M个比特位段,每个比特位段包含至少两个相邻的比特位;将M个程序检测点发生或被运行的频次信息与M个比特位段建立映射关系;将所获取的M个程序检测点中的每个程序检测点发生后被运行的频次信息存储在寄存器中对应的比特位段中。现有技术中采用一个寄存器记录一个程序检测点发生或被运行的频次,未能充分利用寄存器的资源,造成硬件资源浪费;且还需要多次修改程序多次运行,才能抓取到比较全面的数据,从而影响调试跟踪效率。本申请的方案采用一个寄存器分多个比特位段,从而记录多个程序检测点的频次的方式,能够充分利用寄存器的资源,提高对硬件资源的利用效率。且一次运行能够检测出多个程序检测点的运行情况,从而能够提高调试跟踪效率。
在一个具体的实施方式中,程序检测点的个数M不大于待调试子模块中所有处于闲置状态的寄存器的总比特位数的二分之一,且H≥2M。以便于使用待调试子模块中的寄存器作为存储模块,以提高调试速度。
在一个具体的实施方式中,读取存储空间内的程序检测点信息包括:读取寄存器内的M个比特位段的数据。根据所获取的运行情况信息,对待调试微程序及待调试子模块进行分析包括:根据M个比特位段的数据,分析应该执行的待调试微程序的频次是否正确;根据分析结果,判断待调试微程序运行情况是否符合微程序设计思想,修改待调试微程序。以便于根据寄存器记录的多个程序检测点的运行情况信息,对待调试微程序进行分析和完善。
在一个具体的实施方式中,在待调试微程序中确定程序检测点包括:在待调试微程序中确定P个程序检测点。获取程序检测点的运行情况信息包括:获取P个程序检测点的逻辑相关性信息。将程序检测点信息存储到存储空间内包括:将所获取的P个程序检测点的逻辑相关性信息与P个寄存器建立映射关系;判断P个程序检测点中的每个程序检测点发生或被运行时,P个程序检测点中其他的各个程序检测点是否已发生或已被运行;根据判断结果,生成一判断值;将判断值存储到该程序检测点中对应的寄存器中。读取存储空间内的程序检测点信息包括:读取P个寄存器内的数据。根据所获取的运行情况信息,对待调试微程序及待调试子模块进行分析包括:根据P个寄存器内的数据,确定P个程序检测点之间的逻辑相关性信息;根据所确定的P个程序检测点之间的逻辑相关性信息,判断待调试微程序运行情况是否符合微程序设计思想,修改待调试微程序。以便于判断多个程序检测点之间的逻辑相关性信息,从而能够根据所获取的逻辑相关性信息,对待调试微程序进行分析和完善。
在一个具体的实施方式中,程序检测点的个数P不大于待调试子模块中所有处于闲置状态的寄存器的总个数,以便于使用待调试子模块中的寄存器作为存储模块,以提高调试速度。
在一个具体的实施方式中,在待调试微程序中确定程序检测点包括:在待调试微程序中确定Q个程序检测点。获取程序检测点的运行情况信息包括:获取Q个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息。将程序检测点信息存储到存储空间内包括:将所获取的Q个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到寄存器中。以便于获取每个程序点发生或被运行时,该程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息。
在一个具体的实施方式中,程序检测点的个数Q不大于待调试子模块中所有处于闲置状态的寄存器的总个数,以便于使用待调试子模块中的寄存器作为存储模块,以提高调试速度。
在一个具体的实施方式中,将所获取的Q个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到寄存器中包括:将所获取的Q个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息与Q个寄存器建立映射关系;在Q个程序检测点中的每个程序检测点发生或被运行时,将该程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到对应的寄存器中。以便于记录存储不同的程序检测点发生或被运行时,该程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息。
在一个具体的实施方式中,读取存储空间内的程序检测点信息包括:读取Q个寄存器内的数据。根据所获取的运行情况信息,对待调试微程序及待调试子模块进行分析包括:根据Q个寄存器内的数据,判断待调试微程序运行情况是否符合微程序设计思想,对待调试微程序进行修改。以便于根据所获取的多个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息,对待调试微程序进行分析和完善。
在一个具体的实施方式中,存储模块为中央处理器能够访问的内存,从而能够跟踪记录大量的程序检测点的运行情况信息,存储大量的过程数据。
第二方面,本发明还提供了一种微程序的调试装置,该调试装置包括存储模块、微程序存储装置、检测程序植入模块、微程序运行模块、程序检测点信息检测模块、程序检测点信息读取模块、以及显示装置。其中,存储模块用于提供处于闲置状态的存储空间的存储模块。微程序存储装置用于存储待调试微程序。检测程序植入模块用于在待调试微程序中确定程序检测点,并在待调试微程序的程序检测点处植入检测程序。微程序运行模块用于依据植入检测程序后的待调试微程序,运行处理器的待调试子模块。程序检测点信息检测模块用于在微程序运行模块运行处理器的待调试子模块时,将程序检测点信息存储到存储空间内。程序检测点信息读取模块用于读取存储空间内的程序检测点信息。
在上述的方案中,通过确定一处于闲置状态的存储空间,作为存储程序检测点信息的载体;之后能够通过直接读取存储空间内所存储的程序检测点信息,获取程序检测点的运行情况信息,以了解处理器的待调试子模块中的待调试微程序的运行情况。与现有技术中通过JTAG或串口读取微程序的运行情况信息的方式相比,本申请的方案,不仅能够对那些能够通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况进行读取,还能够对那些不能通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况进行读取,获取那些不能通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况信息。
在一个具体的实施方式中,该调试装置还包括分析处理模块,分析处理模块用于依据所读取的程序检测点信息,获取所述程序检测点的运行情况信息;还用于根据所获取的运行情况信息,对所述待调试微程序及所述待调试子模块进行分析。以根据所获得的运行情况信息,对待调试微程序及待调试子模块进行分析,以分析完善待调试微程序。
在一个具体的实施方式中,处理器为中央处理器或图形处理器,以便于对中央处理器或图形处理器的待调试子模块中的待调试微程序的运行情况进行读取及分析。
在一个具体的实施方式中,存储模块为中央处理器能够访问的寄存器,以提高获取程序检测点的运行情况信息的速度,提高调试效率。
在一个具体的实施方式中,检测程序植入模块在待调试微程序中确定N个程序检测点。程序检测点信息检测模块还用于将N个程序检测点是否发生或被运行的信息与寄存器中的N个比特位建立映射关系;还用于将所获取的N个程序检测点中的每个程序检测点是否发生或被运行的信息存储在寄存器中对应的比特位中。分析处理模块用于根据所述N个比特位的数据,分析应该执行的待调试微程序是否被执行,不应该被执行的待调试微程序是否被执行;还用于根据分析结果,判断待调试微程序执行情况是否符合微程序设计思想,修改所述待调试微程序。采用寄存器分位记录的方式,能够充分利用寄存器的资源,且通过一个寄存器能够记录多个程序检测点的运行情况,从而减少修改程序记录的次数,提高调试跟踪效率。
在一个具体的实施方式中,检测程序植入模块在待调试微程序中确定M个程序检测点。程序检测点信息检测模块还用于将寄存器中的H个比特位划分为M个比特位段,每个比特位段包含至少两个相邻的比特位;还用于将M个程序检测点发生或被运行的频次信息与所述M个比特位段建立映射关系;还用于将所获取的M个程序检测点中的每个程序检测点发生或被运行的频次信息存储在寄存器中对应的比特位段中。分析处理模块用于根据所述M个比特位段的数据,分析应该执行的待调试微程序的频次是否正确;还用于根据分析结果,判断待调试微程序运行情况是否符合微程序设计思想,修改所述待调试微程序。采用一个寄存器分多个比特位段,从而记录多个程序检测点的频次的方式,能够充分利用寄存器的资源,提高对硬件资源的利用效率。且一次运行能够检测出多个程序检测点的运行情况,从而能够提高调试跟踪效率。
在一个具体的实施方式中,检测程序植入模块在待调试微程序中确定P个程序检测点。程序检测点信息检测模块还用于将所获取的P个程序检测点的逻辑相关性信息与P个寄存器建立映射关系;还用于判断P个程序检测点中的每个程序检测点发生或被运行时,P个程序检测点中的其他的各个程序检测点是否已发生或已被运行;还用于根据判断结果,生成一判断值,并将判断值存储到该程序检测点对应的寄存器中。分析处理模块用于根据所述P个寄存器内的数据,确定所述P个程序检测点之间的逻辑相关性信息;还用于根据所确定的所述P个程序检测点之间的逻辑相关性信息,判断待调试微程序运行情况是否符合微程序设计思想,修改所述待调试微程序。以便于判断多个程序检测点之间的逻辑相关性信息,从而能够根据所获取的逻辑相关性信息,对待调试微程序进行分析和完善。
在一个具体的实施方式中,检测程序植入模块在待调试微程序中确定Q个程序检测点。程序检测点信息检测模块还用于将所获取的Q个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息与Q个寄存器建立映射关系;还用于在Q个程序检测点中的每个程序检测点发生或被运行时,将该程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到对应的寄存器中。分析处理模块用于根据所述Q个寄存器内的数据,判断待调试微程序运行逻辑情况是否符合微程序设计思想,对所述待调试微程序进行修正。以便于获取每个程序点发生或被运行时,该程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息。
在一个具体的实施方式中,存储模块为中央处理器能够访问的内存,从而能够跟踪记录大量的程序检测点的运行情况信息,存储大量的过程数据。
在一个具体的实施方式中,调试装置还包括显示装置,显示装置用于将程序检测点信息读取模块所读取的程序检测点信息进行显示,以便于调试人员观察所存储的程序检测点信息。
附图说明
图1a为本发明实施例提供的一种微程序的调试方法的流程图;
图1b为本发明实施例提供的另一种微程序的调试方法的流程图;
图2为本发明实施例提供的一种寄存器记录N个程序检测点的状态的示意图;
图3为本发明实施例提供的一种寄存器记录M个程序检测点的频次的示意图;
图4为本发明实施例提供的一种记录3个程序检测点的逻辑相关性信息的流程图;
图5为本发明实施例提供的一种记录Q个程序检测点的硬件寄存器或微程序软件运行变量信息的流程图;
图6为本发明实施例提供的一种存储模块为RAM时的微程序的调试方法的流程图;
图7为本发明实施例提供的一种调试装置的示意框图;
图8为本发明实施例提供的另一种调试装置的示意框图;
图9为本发明实施例提供的另一种调试装置的示意框图;
图10为本发明实施例提供的另一种调试装置的示意框图;
图11为本发明实施例提供的另一种调试装置的示意框图;
图12为本发明实施例提供的另一种调试装置的示意框图;
图13为本发明实施例提供的另一种调试装置的示意框图。
附图标记:
10-中央处理器 20-图形处理器 30-待调试子模块
41-存储模块 42-微程序存储装置 43-检测程序植入模块
44-微程序运行模块 45-程序检测点信息检测模块
46-程序检测点信息读取模块 47-分析处理模块 50-显示装置
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了方便理解本发明实施例提供的微程序的调试方法,下面首先说明一下本发明实施例提供的微程序的调试方法的应用场景,该微程序的调试方法应用于调试处理器的待调试子模块过程中,其中该待调试子模块中具有待调试微程序。下面结合附图对该微程序的调试方法进行详细的叙述。
参考图1a,本发明实施例提供的微程序的调试方法包括:
Step10:确定存储模块中处于闲置状态的存储空间;
Step20:初始化处于闲置状态的存储空间;
Step30:在待调试微程序中确定程序检测点;
Step40:在待调试微程序的程序检测点处植入检测程序;
Step50:依据植入检测程序后的待调试微程序,运行处理器的待调试子模块,将程序检测点信息存储到存储空间内;
Step60:读取存储空间内的程序检测点信息。
在上述的方案中,通过确定一处于闲置状态的存储空间,作为存储程序检测点信息的载体;之后能够通过直接读取存储空间内所存储的程序检测点信息,获取程序检测点的运行情况信息,以了解处理器的待调试子模块中的待调试微程序的运行情况。与现有技术中通过JTAG或串口读取微程序的运行情况信息的方式相比,本申请的方案,不仅能够对那些能够通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况进行读取,还能够对那些不能通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况进行读取,获取那些不能通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况信息。
参考图1b,在读取存储空间内的程序检测点信息之后,该调试方法还可以包括:
Step70:依据所读取的程序检测点信息,获取程序检测点的运行情况信息;
Step80:根据所获取的运行情况信息,对微程序及待调试子模块进行分析。根据所获得的运行情况信息,对待调试微程序及待调试子模块进行分析,以分析完善待调试微程序。
其中,上述的处理器可以为中央处理器或图形处理器,以便于对中央处理器或图形处理器的待调试子模块中的待调试微程序的运行情况进行读取及分析。
在确定上述的存储模块时,存储模块可以为中央处理器能够访问的寄存器,通过采用寄存器作为存储模块,提高中央处理器与寄存器之间进行数据传输的效率,以提高获取程序检测点的运行情况信息的速度,提高调试效率。在确定寄存器时,该寄存器可以为闲置寄存器(DUMMY),便于程序开发者作为调试使用;该寄存器也可以为当前功能程序中尚未使用的可读可写的寄存器,以增加寄存器调试法的覆盖率。
在确定程序检测点时,程序检测点的个数可以为1个,也可以为2个、3个、4个、5个、10个、20个、50个等多个。对应的,在植入检测程序时,需要在待调试微程序中的每个程序检测点处均植入检测程序,以便于获取每个程序检测点的运行情况信息。每个程序检测点可以为事件检测点,以便于了解和掌握某一事件是否发生、以及发生的频次、逻辑相关性、发生或被运行时的硬件寄存器或微程序软件运行变量信息等运行情况。每个程序检测点还可以为程序位置检测点,以便于了解和掌握程序位置检测点是否被运行到、被运行到的频次、被运行到时的状态及逻辑相关性、等运行情况。即可以检测每个程序检测点是否发生或被运行到、发生或被运行到的频次、发生或被运行到的逻辑相关性、发生或被运行时的硬件寄存器或微程序软件运行变量信息等运行情况。通过了解和掌握这几种运行情况,可以分析微程序运行的流程,定位微程序出错的位置。下面依据所检测的运行情况的类型分别进行介绍。
实施例1
该实施例主要针对程序检测点是否发生或被运行到的情况进行跟踪检测。此时,具体在待调试微程序中确定程序检测点时,可以在待调试微程序中确定N个程序检测点。其中,N的数值可以为1、2、3、5、9、16、32、64等正整数中的任意数。如图2所示,程序检测点的个数N=32。在具体确定程序检测点的个数N时,程序检测点的个数N可以不大于待调试子模块中所有处于闲置状态的寄存器的总比特位数,以便于使用待调试子模块中的寄存器作为存储模块,以提高调试速度。在获取程序检测点的运行情况信息时,所获取N个程序检测点中的每个程序检测点的运行情况为:是否发生或被运行的信息。
在将程序检测点信息存储到存储空间内时,参考图2,首先将N个程序检测点是否发生或被运行的信息与寄存器中的N个比特位建立映射关系。之后,将所获取的N个程序检测点中的每个程序检测点是否发生或被运行的信息存储在寄存器中对应的比特位中。具体将获取的每个程序检测点是否发生或被运行的信息存储在寄存器中对应的比特位中时,可以先将寄存器中的N个比特位初始化为“0”。之后,判断每个程序检测点是否发生或被运行。如果判断每个程序检测点是否发生或被运行的信息为未发生或未被运行,则保持该程序检测点对应的比特位继续为“0”。如果判断每个程序检测点是否发生或被运行的信息为已发生或已被运行,则在寄存器内该程序检测点对应的比特位写入“1”。以便于记录事件检测点是否发生,或程序位置检测点是否被运行到。
在具体读取存储空间内的程序检测点信息时,所读取的时寄存器内的N个比特位的数据。在具体根据所读取的运行情况信息,对待调试微程序及待调试子模块进行分析时,根据N个比特位的数据,分析应该执行的待调试微程序是否被执行,不应该被执行的待调试微程序是否被执行;根据分析结果,判断待调试微程序执行情况是否符合微程序设计思想,修改待调试微程序。以便于根据寄存器记录的多个程序检测点的运行情况信息,对待调试微程序进行分析和完善。
具体的,以图2为例进行说明。通过一个32位(bit)寄存器,即可以定位32个程序检测点。寄存器的每一比特位(bit),与一个程序检测点之间一一对应。具体步骤为:首先,在程序初始化中,先把寄存器初始化清0。在需要关注的程序位置,标记为程序检测点,植入检测程序,并将该程序检测点与寄存器中的一个比特位建立映射关系。采用植入检测程序后的待调试微程序,运行处理器中的待调试子模块。运行结束后,读取记录寄存器。之后,分析判断寄存器。所有被置为1的比特位所对应的程序检测点,都表示该检测位置曾经被执行到,该检测事件发生。反之,保持为0的比特位所对应的程序检测点,表示该程序位置没有被执行到,该检测事件没有发生。如图2所示,程序检测点1、10、32等对应比特位已变为1的事件,表示当前已经发生;反之保持为0的比特位为所对应的程序检测点中的事件未发生,或程序位置未被执行到。通过此方法可以快速定位应该执行的程序是否执行到,以及不应该执行的程序是否被错误执行了。
应当理解的是,寄存器的个数并不限于上述示出的1个。寄存器的个数还可以为2个、3个、4个等不少于2个的任意值。如果采用2个同样的寄存器,则可以一次性定位64个程序检测点,足以覆盖当前所需要关注的问题点。
现有技术中采用一个寄存器直接赋值记录某个程序检测点的状态的方式,未能充分利用寄存器的资源,且还需要多次修改程序记录多个程序检测点,从而影响调试跟踪效率。本实施例的方案与现有技术相比,采用寄存器分位记录的方式,能够充分利用寄存器的资源,且通过一个寄存器能够记录多个程序检测点的运行情况,从而减少修改程序记录的次数,提高调试跟踪效率。
实施例2
该实施例主要针对程序检测点发生或被运行到的频次情况进行跟踪检测。即当某段待调试微程序执行时,需要关注这段微程序在当前运行中各个程序检测点被运行到或发生的频次,比如只处理过一次,或处理过多次。此时,具体在待调试微程序中确定程序检测点时,在待调试微程序中确定的是M个程序检测点。其中,M的数值可以为1、2、3、4、5、9、16、32、64等正整数中的任意数。如图3所示,程序检测点的个数M=4。在具体确定程序检测点个数M时,可以使程序检测点的个数M不大于待调试子模块中所有处于闲置状态的寄存器的总比特位数的二分之一,且H≥2M,以便于使用待调试子模块中的寄存器作为存储模块,以提高调试速度。此时,在获取程序检测点的运行情况信息时,获取的是M个程序检测点中的每个程序检测点发生或被运行的频次信息。
在具体将程序检测点信息存储到存储空间内时,首先,将寄存器中的H个比特位划分为M个比特位段,每个比特位段包含至少两个相邻的比特位。之后,将M个程序检测点发生或被运行的频次信息与M个比特位段建立映射关系。之后,将所获取的M个程序检测点中的每个程序检测点发生后被运行的频次信息存储在寄存器中对应的比特位段中。
在具体读取存储空间内的程序检测点信息时,读取的是寄存器内的M个比特位段的数据。在具体根据所获取的运行情况信息,对待调试微程序及待调试子模块进行分析时:首先,根据M个比特位段的数据,分析应该执行的待调试微程序的频次是否正确。之后,根据分析结果,判断待调试微程序运行情况是否符合微程序设计思想,修改待调试微程序。以便于根据寄存器记录的多个程序检测点的运行情况信息,对待调试微程序进行分析和完善。
下面以图3为例进行说明。此时需要使用寄存器作为计数寄存器,来记录不同程序检测点发生或被运行到的频次信息。对于一个32位寄存器来说,可以记录非常大的数,而往往某个程序检测点执行或发生的次数是有限,用一个32位寄存器只记录一个程序检测点的频次信息,浪费硬件资源。
在本实施例的技术方案中,首先预估所需计数的程序检测点发生或被运行到的频次,之后根据所需计数的程序检测点所预估的频次,设计采用相应的比特位段来表示该程序检测点的频次。比如,如果采用4个相邻的比特位来计数某个程序检测点,即可以计数16次。则一个32位寄存器,可以同时记录8个程序检测点的频次。参考图3,如果使用8个相邻的比特位段来计数,可以计数256次。则一个32位计数寄存器,可以同时记录4个程序检测点的频次。具体使用多少个相邻的比特位,根据所需检测的程序检测点所预估的执行频次来选择。如果某个程序检测点实际运行次数超过预估数,则该程序检测点对应的比特位段将计数保持在最大的位置,比如由相邻的8个比特位组成的比特位段将保持在FF(一种十六进制的数值)的频次,表示该频次可能超过预估值,则在下次单独调整增大预估的计数位数,增加该程序检测点所对应的比特位段中所包括的比特位个数,以获取该程序位置实际的频次。
具体的步骤为:首先程序初始化,在程序初始化中,先把记录频次的寄存器的每个比特位初始化为“0”。之后,在需要关注的程序位置,标记为程序检测点,植入检测程序,并将该程序检测点与寄存器中的一个比特位段建立映射关系。如图3所示,一个32位的寄存器划分为4个比特位段,每个比特位段包含有8个相邻的比特位。即分别用8个比特位表示1个程序检测点发生或被运行到的频次。采用植入检测程序后的待调试微程序,运行处理器中的待调试子模块。参考图3,每个程序检测点的频次用16进制表示,共计记录4个程序检测点。程序检测点1所对应的比特位段位于寄存器的低位段,程序检测点1每发生或被运行到1次,该比特位段每次增加0x01(其中的01采用16进制表示)。程序检测点2所对应的比特位段比前一比特位段高,程序检测点2每发生或被运行到1次,该比特位段每次增加0x100(其中的100采用16进制表示)。程序检测点3所对应的比特位段比前一比特位段高,程序检测点3每发生或被运行到1次,该比特位段每次增加0x10000(其中的10000采用16进制表示)。程序检测点4所对应的比特位段比前一比特位段高,程序检测点4每发生或被运行到1次,该比特位段每次增加0x1000000(其中的1000000采用16进制表示)。4个比特位段分别记录各程序检测点的频次。
运行结束后,读取记录寄存器的各个比特位段的数值。之后,分析判断寄存器的各个比特位段的数值。如图3所示,根据记录情况,程序检测点1发生或被运行到15次,程序检测点2发生或被运行到3次,程序检测点3和程序检测点4依此类推。
现有技术中采用一个寄存器记录一个程序检测点发生或被运行的频次,未能充分利用寄存器的资源,造成硬件资源浪费;且还需要多次修改程序多次运行,才能抓取到比较全面的数据,从而影响调试跟踪效率。本实施例的方案采用一个寄存器分多个比特位段,从而记录多个程序检测点的频次的方式,能够充分利用寄存器的资源,提高对硬件资源的利用效率。且一次运行能够检测出多个程序检测点的运行情况,从而能够提高调试跟踪效率。
实施例3
该实施例主要针对程序检测点发生或被运行到的逻辑相关性情况进行跟踪检测。此时,在确定微程序的程序检测点时,确定的是P个程序检测点。其中,P的数值可以为2、3、4、5、9、10等正整数中的任意数。由于P的数值是基于处理器的待调试子模块提供的可以供程序开发者使用的闲置寄存器数量、以及当前功能程序中尚未使用的可读可写的寄存器数量确定的。此类闲置寄存器数量和当前功能程序中尚未使用的可读可写的寄存器数量往往比较少,需节约和充分使用。该实施例的目的是充分利用这些闲置寄存器用于程序调试,所以在P的数值较少时,可以采用此实施例进行调试。在具体确定程序检测点的个数P时,可以使程序检测点的个数P不大于待调试子模块中所有处于闲置状态的寄存器的总个数,以便于使用待调试子模块中的寄存器作为存储模块,以提高调试速度。在具体获取程序检测点的运行情况信息时,所获取的是P个程序检测点的逻辑相关性信息。
在将程序检测点信息存储到存储空间内时,首先,将所获取的P个程序检测点的逻辑相关性信息与P个寄存器建立映射关系。之后,判断P个程序检测点中的每个程序检测点发生或被运行时,P个程序检测点中其他的各个程序检测点是否已发生或已被运行。之后,根据判断结果,生成一判断值。之后,将判断值存储到该程序检测点中对应的寄存器中。
在具体读取存储空间内的程序检测点信息时,读取的是P个寄存器内的数据。在具体根据所获取的运行情况信息,对待调试微程序及待调试子模块进行分析时,首先,根据P个寄存器内的数据,确定P个程序检测点之间的逻辑相关性信息。之后,根据所确定的P个程序检测点之间的逻辑相关性信息,判断待调试微程序运行情况是否符合微程序设计思想,修改待调试微程序。以便于判断多个程序检测点之间的逻辑相关性信息,从而能够根据所获取的逻辑相关性信息,对待调试微程序进行分析和完善。
例如,在P=2时,该两个程序检测点分别为程序检测点1和程序检测点2,要判断程序检测点1和程序检测点2的逻辑相关性。使用两个寄存器A和寄存器B来分别记录程序检测点1和程序检测点2的逻辑相关性。具体的,在程序检测点1发生或被运行到时,需要先判断程序检测点2是否已经发生或已经被运行到。如果在程序检测点1发生或被运行到时,程序检测点2尚未发生或尚未被运行到,则生成某一个判断值,否则记录另一个判断值,通过判断值的不同表征不同的逻辑相关性。之后,将所生成的判断值存储到程序检测点1对应的寄存器A中。同样的,在程序检测点2发生或被运行时,需要先判断程序检测点1是否已发生或被运行到。如果在程序检测点2发生或被运行到时,程序检测点1尚未发生或尚未被运行到,则生成某一个判断值,否则记录另一个判断值,通过判断值的不同表征不同的逻辑相关性。之后,将所生成的判断值存储到程序检测点2对应的寄存器B中。即在程序检测点1发生或被运行时,判断程序检测点2是否已经发生或被运行到,并根据判断结果生成一判断值,将该判断值存储到寄存器A中。同理,在程序检测点2发生或被运行时,判断程序检测点1是否已经发生或被运行到,并根据判断结果生成一判断值,将该判断值存储到寄存器B中。之后,根据寄存器A及寄存器B中所记录的判断值,判断程序检测点1及2之间的逻辑相关性。
进一步,如果要第次判断程序检测点A和程序检测点B的逻辑相关性时,则第次判断程序检测点A和程序检测点B的寄存器中存储的判断值是否为第一轮判断的值。如果是,则记录为第二轮的初始状态值。直到记录到程序员关注的相关性轮次。记录寄存器的数值根据判断的轮次递进。根据程序检测点A和程序检测点B的寄存器的判断值,来判断两个程序检测点的逻辑相关性。
更进一步,如果P=3时,参考图4,该3个程序检测点分别为程序检测点1、程序检测点2、程序检测点3。需要关注程序检测点3与程序检测点1/2的逻辑相关性,可以再引入一个寄存器C来记录程序检测点3。同理,在程序检测点1发生或被运行时,需要同时判断程序检测点2和程序检测点3是否发生或被运行的状态,生成一判断值,以记录程序检测点1当前的状态。同理,在程序检测点2和程序检测点3也依此判断。之后,根据存储在寄存器A、寄存器B、寄存器C中的判断值,判断3个程序检测点之间的逻辑相关性。
一般的,判断一个轮次即可初步判断各程序位置的相关性。如果某些程序检测点多次发生,也可以结合上述示出的第次判断的方式,配合频次记录的方法,来判断不同程序检测点的逻辑相关性。
具体步骤如下:首先,在程序初始化中,把P个寄存器中的所有比特位初始化为“0”.之后,在相应的程序检测点,判断与本功能相关的其他功能的执行情况,分别记录当前功能的状态,存放到该程序检测点对应的寄存器中。运行结束后,读取P个寄存器。之后,分析P个寄存器。如图4所示,如果寄存器A中值为A1,则说明此时功能B/C在功能A之后发生;如果寄存器A中值为A2,则说明此时功能B/C在功能A之前已经发生。依次类推,判断不同功能之间的相互关系。
实施例4
该实施例主要针对程序检测点发生或被运行到时的硬件寄存器或微程序软件运行变量信息进行跟踪检测。将需要关注的硬件寄存器或微程序软件运行变量信息,存放在寄存器中。硬件寄存器或微程序软件运行变量信息可能在待调试微程序运行中不断变化,需要关注某个程序检测点发生或被运行时的硬件寄存器或微程序软件运行变量信息。此时,具体在待调试微程序中确定程序检测点时,在待调试微程序中所确定的是Q个程序检测点。其中,Q的数值可以为1、2、3、4、5、9、10等正整数中的任意数。由于Q的数值是基于处理器的待调试子模块提供的可以供程序开发者使用的闲置寄存器数量、以及当前功能程序中尚未使用的可读可写的寄存器数量确定的。此类闲置寄存器数量和当前功能程序中尚未使用的可读可写的寄存器数量往往比较少,需节约和充分使用。该实施例的目的均是充分利用这些闲置寄存器用于程序调试。所以在Q的数值较少时,可以采用此实施例进行调试。在获取程序检测点的运行情况信息时,获取的是Q个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息。在具体确定程序检测点的个数Q时,可以使程序检测点的个数Q不大于待调试子模块中所有处于闲置状态的寄存器的总个数,以便于使用待调试子模块中的寄存器作为存储模块,以提高调试速度。
在具体将程序检测点信息存储到存储空间内时,将所获取的Q个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到寄存器中。以便于获取每个程序点发生或被运行时,该程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息。
在具体将所获取的Q个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到寄存器中时,可以将所获取的Q个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息与Q个寄存器建立映射关系。之后,在Q个程序检测点中的每个程序检测点发生或被运行时,将该程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到对应的寄存器中。以便于记录存储不同的程序检测点发生或被运行时,该程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息。
在读取存储空间内的程序检测信息时,读取的是Q个寄存器内的数据。在根据所获取的运行情况信息,对待调试微程序及待调试子模块进行分析时,是根据Q个寄存器内的数据,判断微程序运行情况是否符合微程序设计思想,对待调试微程序进行修改。以便于根据所获取的多个程序检测点的待调试子模块内部的硬件寄存器或微程序软件运行变量信息,对待调试微程序进行分析和完善。
下面以图5为例进行说明。在将某个程序检测点发生或被运行时,当前的硬件寄存器或微程序软件运行变量信息存放在寄存器中时,可以存储在一个寄存器中,也可以存储在多个寄存器中。在使用多个寄存器时,可以使每个寄存器对应一个程序检测点,以记录对应的程序检测点发生或被运行时,当前的硬件寄存器或微程序软件运行变量信息,以确定硬件寄存器或微程序软件运行变量信息的变化规律和微程序运行的合理性。
具体步骤如下:首先,在程序初始化中,把Q个状态寄存器中的所有比特位初始化为“0”。之后,确定程序检测点,植入检测程序,并将该程序检测点与Q个寄存器中的一个寄存器建立映射关系。之后,在相应的程序检测点,将需要关注程序检测点发生或被运行时,硬件寄存器或微程序软件运行变量信息,保存在对应的寄存中。之后,运行植入检测程序后的待调试微程序。运行结束后,读取Q个寄存器。之后,分析所读取的Q个寄存器中的数据。如图5所示,分析寄存器A所保存的状态A,如果是硬件寄存器,则分析硬件寄存器各位的值,是否符合在当前位置的值,根据值,增加、减少或修改相关的微程序。同理,对于记录的软件变量,也根据变量的含义,分析是否符合当前位置的要求,进行微程序修正。
需要说明的是,上述各种方法,均根据程序调试的需要,灵活使用,不拘泥于某种方法。在相应程序检测点单独使用某一种方法,或多种方法配合使用,目的是厘清程序状态和相互关系,准确快速确认程序开发思路和发现程序运行问题。在对待调试程序修改之后,可以按照上述方法进行重新调试。
另外,上述存储模块并不限于上述示出的寄存器的方式,除此之外,存储模块还可以为中央处理器能够访问的内存,从而能够跟踪记录大量的程序检测点的运行情况信息,存储大量的过程数据。此时,上述4个实施例中的每个程序检测点是否发生或被运行到、发生或被运行到的频次、发生或被运行到的逻辑相关性、发生或被运行时的硬件寄存器或微程序软件运行变量信息等运行情况存储在中央处理器能够访问的内存中。该参考图6,该内存可以为RAM(Random Access Memory,随机存取存储器)。在根据不同的程序功能,需要调试观察的数据不局限于一般的状态或数据,而是需要观察大量的过程数据时,内存可以作为存储运行情况信息的存储介质,便于存放大量的过程数据。采用内存作为存储模块的方式,不如前述实施例1~4中采用寄存器作为存储模块的方式实时和方便快速。但由于内存作为存储模块,优势在于能通过内存存放大量数据,在必要时可以作为补充调试手段。
参考图6,具体步骤为:首先,对内存中处于闲置状态的存储空间进行初始化,在初始化中,把所需存储RAM区域初始化为0。一般的,根据所需记录的过程数据的大小,合理规划和分配RAM的使用空间。之后,在相应的程序检测点,将所需保存的过程数据存放在相应的RAM中。不同的程序检测点所存储的信息通过存储RAM地址进行识别。之后,运行结束后,导出各个程序检测点的RAM的数据。之后,分析RAM的数据,判断是否符合相应程序检测点的微程序运行预期。
通过确定一处于闲置状态的存储空间,作为存储程序检测点信息的载体;之后能够直接通过读取存储空间内所存储的程序检测点信息,获取程序检测点的运行情况信息,以了解处理器的待调试子模块中的待调试微程序的运行情况。与现有技术中通过JTAG或串口读取微程序的运行情况信息的方式相比,本申请的方案,不仅能够对那些能够通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况进行读取,还能够对那些不能通过JTAG或串口进行访问的待调试子模块内的待调试微程序的运行情况进行读取,获取那些不能通过JTAG或串口进行访问的待调试子模块内的微程序的运行情况信息。
另外,本发明还提供了一种微程序的调试装置,参考图7,该调试装置包括存储模块41、微程序存储装置42、检测程序植入模块43、微程序运行模块44、程序检测点信息检测模块45、程序检测点信息读取模块46、以及显示装置50。其中,存储模块41用于提供处于闲置状态的存储空间的存储模块41。微程序存储装置42用于存储待调试微程序。检测程序植入模块43用于在待调试微程序中确定程序检测点,并在待调试微程序的程序检测点处植入检测程序。微程序运行模块44用于依据植入检测程序后的待调试微程序,运行处理器的待调试子模块30。程序检测点信息检测模块45用于在微程序运行模块44运行处理器的待调试子模块30时,将程序检测点信息存储到存储空间内。程序检测点信息读取模块46用于读取存储空间内的程序检测点信息。
在上述的方案中,通过确定一处于闲置状态的存储空间,作为存储程序检测点信息的载体;之后能够通过直接读取存储空间内所存储的程序检测点信息,获取程序检测点的运行情况信息,以了解处理器的待调试子模块30中的待调试微程序的运行情况。与现有技术中通过JTAG或串口读取微程序的运行情况信息的方式相比,本申请的方案,不仅能够对那些能够通过JTAG或串口进行访问的待调试子模块30内的待调试微程序的运行情况进行读取,还能够对那些不能通过JTAG或串口进行访问的待调试子模块30内的待调试微程序的运行情况进行读取,获取那些不能通过JTAG或串口进行访问的待调试子模块30内的待调试微程序的运行情况信息。下面结合附图对上述各个模块、装置进行详细的介绍。
参考图7,该调试装置还可以包括分析处理模块47,分析处理模块47用于依据所读取的程序检测点信息,获取所述程序检测点的运行情况信息;还用于根据所获取的运行情况信息,对所述待调试微程序及所述待调试子模块进行分析。以使调试装置能够根据所获得的运行情况信息,自动对待调试微程序及待调试子模块进行分析,以分析完善待调试微程序。
参考图7,该调试装置还可以包括显示装置50,显示装置50用于将程序检测点信息读取模块46所读取的程序检测点信息进行显示。显示装置50可以为显示器,以将程序检测点信息进行显示,便于调试人员观察所存储的程序检测点信息。
参考图7~图13,上述处理器可以为中央处理器10或图形处理器20,待调试子模块30为中央处理器10或图形处理器20中的子模块,以便于对中央处理器10或图形处理器20的待调试子模块30中的待调试微程序的运行情况进行读取及分析。
存储模块41可以为中央处理器10能够访问的寄存器,以提高获取程序检测点的运行情况信息的速度,提高调试效率。当然,存储模块41还可以为中央处理器10能够访问的内存,从而能够跟踪记录大量的程序检测点的运行情况信息,存储大量的过程数据。
具体的,在处理器为中央处理器10时,根据存储模块41的不同,可以组成不同的实施方式,下面列出较为常见的几种实施方式。参考图7,存储模块41可以为待调试子模块30中内处于闲置状态的寄存器,以提高数据传输效率。此时,微程序存储装置42、检测程序植入模块43及程序检测点信息检测模块45均处于待调试子模块30内,且检测程序植入模块43用于将程序检测点信息检测模块45植入到微程序存储装置42中。微程序运行模块44、程序检测点信息读取模块46及分析处理模块47位于中央处理器10外内,且位于待调试子模块30外。显示装置50与中央处理器10连接,以将程序检测点信息读取模块46所读取的程序检测点信息进行显示。
参考图8,存储模块41还可以为中央处理器10内,但位于待调试子模块30外且处于闲置状态的寄存器。此时,微程序存储装置42、检测程序植入模块43及程序检测点信息检测模块45均处于待调试子模块30内,且检测程序植入模块43用于将程序检测点信息检测模块45植入到微程序存储装置42中。微程序运行模块44、程序检测点信息读取模块46及分析处理模块47位于中央处理器10外内,且位于待调试子模块30外。显示装置50与中央处理器10连接,以将程序检测点信息读取模块46所读取的程序检测点信息进行显示。
参考图9,存储模块41还可以为位于中央处理器10外的内存。此时,微程序存储装置42、检测程序植入模块43及程序检测点信息检测模块45均处于待调试子模块30内,且检测程序植入模块43用于将程序检测点信息检测模块45植入到微程序存储装置42中。微程序运行模块44、程序检测点信息读取模块46及分析处理模块47位于中央处理器10外内,且位于待调试子模块30外。显示装置50与中央处理器10连接,以将程序检测点信息读取模块46所读取的程序检测点信息进行显示。
在处理器为图形处理器20时,同样根据存储模块41的不同,可以组成不同的实施方式,下面列出较为常见的几种实施方式。参考图10,存储模块41可以为待调试子模块30中内处于闲置状态的寄存器,以提高数据传输效率。此时,微程序存储装置42、检测程序植入模块43及程序检测点信息检测模块45均处于待调试子模块30内,且检测程序植入模块43用于将程序检测点信息检测模块45植入到微程序存储装置42中。微程序运行模块44位于图形处理器20外内,且位于待调试子模块30外。程序检测点信息读取模块46及分析处理模块47位于中央处理器10内。显示装置50与中央处理器10连接,以将程序检测点信息读取模块46所读取的程序检测点信息进行显示。
参考图11,存储模块41还可以为图形处理器20内,但位于待调试子模块30外且处于闲置状态的寄存器。此时,微程序存储装置42、检测程序植入模块43及程序检测点信息检测模块45均处于待调试子模块30内,且检测程序植入模块43用于将程序检测点信息检测模块45植入到微程序存储装置42中。微程序运行模块44位于图形处理器20外内,且位于待调试子模块30外。程序检测点信息读取模块46及分析处理模块47位于中央处理器10内。显示装置50与中央处理器10连接,以将程序检测点信息读取模块46所读取的程序检测点信息进行显示。
参考图12,存储模块41还可以为中央处理器10内且处于闲置状态的寄存器。此时,微程序存储装置42、检测程序植入模块43及程序检测点信息检测模块45均处于待调试子模块30内,且检测程序植入模块43用于将程序检测点信息检测模块45植入到微程序存储装置42中。微程序运行模块44位于图形处理器20外内,且位于待调试子模块30外。程序检测点信息读取模块46及分析处理模块47位于中央处理器10内。显示装置50与中央处理器10连接,以将程序检测点信息读取模块46所读取的程序检测点信息进行显示。
参考图13,存储模块41还可以为位于图形处理器20及中央处理器10外的内存。此时,微程序存储装置42、检测程序植入模块43及程序检测点信息检测模块45均处于待调试子模块30内,且检测程序植入模块43用于将程序检测点信息检测模块45植入到微程序存储装置42中。微程序运行模块44位于图形处理器20外内,且位于待调试子模块30外。程序检测点信息读取模块46及分析处理模块47位于中央处理器10内。显示装置50与中央处理器10连接,以将程序检测点信息读取模块46所读取的程序检测点信息进行显示。
在具体设置检测程序植入模块43及程序检测点信息检测模块45的功能模块时,检测程序植入模块43可以在待调试微程序中确定N个程序检测点。此时,程序检测点信息可以为前述方法部分中获取N个程序检测点中的每个程序检测点是否发生或被运行的信息。此时,程序检测点信息检测模块45还用于将N个程序检测点是否发生或被运行的信息与寄存器中的N个比特位建立映射关系。程序检测点信息检测模块45还用于将所获取的N个程序检测点中的每个程序检测点是否发生或被运行的信息存储在寄存器中对应的比特位中。分析处理模块47用于根据所述N个比特位的数据,分析应该执行的待调试微程序是否被执行,不应该被执行的待调试微程序是否被执行;还用于根据分析结果,判断待调试微程序执行情况是否符合微程序设计思想,修改所述待调试微程序。上述采用寄存器分位记录的方式,能够充分利用寄存器的资源,且通过一个寄存器能够记录多个程序检测点的运行情况,从而减少修改程序记录的次数,提高调试跟踪效率。
检测程序植入模块43还可以在待调试微程序中确定M个程序检测点。程序检测点的运行情况信息包括:获取M个程序检测点中的每个程序检测点发生或被运行的频次信息。此时,程序检测点信息检测模块45还用于将寄存器中的H个比特位划分为M个比特位段,每个比特位段包含至少两个相邻的比特位。程序检测点信息检测模块45还用于将M个程序检测点发生或被运行的频次信息与所述M个比特位段建立映射关系。程序检测点信息检测模块45还用于将所获取的M个程序检测点中的每个程序检测点发生或被运行的频次信息存储在寄存器中对应的比特位段中。分析处理模块47用于根据所述M个比特位段的数据,分析应该执行的待调试微程序的频次是否正确;还用于根据分析结果,判断待调试微程序运行情况是否符合微程序设计思想,修改所述待调试微程序。上述通过采用一个寄存器分多个比特位段,从而记录多个程序检测点的频次的方式,能够充分利用寄存器的资源,提高对硬件资源的利用效率。且一次运行能够检测出多个程序检测点的运行情况,从而能够提高调试跟踪效率。
检测程序植入模块43还可以在待调试微程序中确定P个程序检测点。获取程序检测点的运行情况信息可以包括:获取P个程序检测点的逻辑相关性信息。此时,程序检测点信息检测模块45还用于将所获取的P个程序检测点的逻辑相关性信息与P个寄存器建立映射关系。程序检测点信息检测模块45还用于判断P个程序检测点中的每个程序检测点发生或被运行时,P个程序检测点中的其他的各个程序检测点是否已发生或已被运行。程序检测点信息检测模块45还用于根据判断结果,生成一判断值,并将判断值存储到该程序检测点对应的寄存器中。分析处理模块47用于根据所述P个寄存器内的数据,确定所述P个程序检测点之间的逻辑相关性信息;还用于根据所确定的所述P个程序检测点之间的逻辑相关性信息,判断待调试微程序运行情况是否符合微程序设计思想,修改所述待调试微程序。以便于判断多个程序检测点之间的逻辑相关性信息,从而能够根据所获取的逻辑相关性信息,对待调试微程序进行分析和完善。
另外,检测程序植入模块43还可以在待调试微程序中确定Q个程序检测点。此时,获取程序检测点的运行情况信息可以包括:获取Q个程序检测点的待调试子模块30内部的硬件寄存器或微程序软件运行变量信息。程序检测点信息检测模块45还用于将所获取的Q个程序检测点的待调试子模块30内部的硬件寄存器或微程序软件运行变量信息与Q个寄存器建立映射关系。程序检测点信息检测模块45还用于在Q个程序检测点中的每个程序检测点发生或被运行时,将该程序检测点的待调试子模块30内部的硬件寄存器或微程序软件运行变量信息存储到对应的寄存器中。分析处理模块47用于根据所述Q个寄存器内的数据,判断待调试微程序运行逻辑情况是否符合微程序设计思想,对所述待调试微程序进行修正。以便于获取每个程序点发生或被运行时,该程序检测点的待调试子模块30内部的硬件寄存器或微程序软件运行变量信息。
需要解释的是,在分析处理模块47对待调试程序修改之后,可以按照上述方法进行重新调试。
通过确定一处于闲置状态的存储空间,作为存储程序检测点信息的载体;之后能够通过直接读取存储空间内所存储的程序检测点信息,获取程序检测点的运行情况信息,以了解处理器的待调试子模块30中的待调试微程序的运行情况。与现有技术中通过JTAG或串口读取微程序的运行情况信息的方式相比,本申请的方案,不仅能够对那些能够通过JTAG或串口进行访问的待调试子模块30内的待调试微程序的运行情况进行读取,还能够对那些不能通过JTAG或串口进行访问的待调试子模块30内的待调试微程序的运行情况进行读取,获取那些不能通过JTAG或串口进行访问的待调试子模块30内的待调试微程序的运行情况信息。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (29)

1.一种微程序的调试方法,其特征在于,包括:
确定存储模块中处于闲置状态的存储空间;
初始化所述处于闲置状态的存储空间;
在待调试微程序中确定程序检测点;
在所述待调试微程序的程序检测点处植入检测程序;
依据植入所述检测程序后的待调试微程序,运行处理器的待调试子模块,将程序检测点信息存储到所述存储空间内;
读取所述存储空间内的程序检测点信息。
2.如权利要求1所述的调试方法,其特征在于,还包括:
依据所读取的程序检测点信息,获取所述程序检测点的运行情况信息;
根据所获取的运行情况信息,对所述待调试微程序及所述待调试子模块进行分析。
3.如权利要求2所述的调试方法,其特征在于,所述处理器为中央处理器或图形处理器。
4.如权利要求3所述的调试方法,其特征在于,所述存储模块为所述中央处理器能够访问的寄存器。
5.如权利要求4所述的调试方法,其特征在于,每个程序检测点为事件检测点或程序位置检测点。
6.如权利要求5所述的调试方法,其特征在于,所述在待调试微程序中确定程序检测点包括:在所述待调试微程序中确定N个程序检测点;
所述获取程序检测点的运行情况信息包括:获取所述N个程序检测点中的每个程序检测点是否发生或被运行的信息;
所述将程序检测点信息存储到所述存储空间内包括:
将所述N个程序检测点是否发生或被运行的信息与所述寄存器中的N个比特位建立映射关系;
将所获取的所述N个程序检测点中的每个程序检测点是否发生或被运行的信息存储在所述寄存器中对应的比特位中。
7.如权利要求6所述的调试方法,其特征在于,所述程序检测点的个数N不大于所述待调试子模块中所有处于闲置状态的寄存器的总比特位数。
8.如权利要求6所述的调试方法,其特征在于,所述将所获取的每个程序检测点是否发生或被运行的信息存储在所述寄存器中对应的比特位中包括:
将所述寄存器中的N个比特位初始化为“0”;
判断每个程序检测点是否发生或被运行的信息为未发生或未被运行,则保持该程序检测点对应的比特位继续为“0”;
判断每个程序检测点是否发生或被运行的信息为已发生或已被运行,则在所述寄存器内该程序检测点对应的比特位写入“1”。
9.如权利要求8所述的调试方法,其特征在于,所述读取所述存储空间内的程序检测点信息包括:读取所述寄存器内的N个比特位的数据;
所述根据所获取的运行情况信息,对所述待调试微程序及所述待调试子模块进行分析包括:
根据所述N个比特位的数据,分析应该执行的待调试微程序是否被执行,不应该被执行的待调试微程序是否被执行;
根据分析结果,判断待调试微程序执行情况是否符合微程序设计思想,修改所述待调试微程序。
10.如权利要求5所述的调试方法,其特征在于,所述在待调试微程序中确定程序检测点包括:在所述待调试微程序中确定M个程序检测点;
所述获取程序检测点的运行情况信息包括:获取所述M个程序检测点中的每个程序检测点发生或被运行的频次信息;
所述将程序检测点信息存储到所述存储空间内包括:
将所述寄存器中的H个比特位划分为M个比特位段,每个比特位段包含至少两个相邻的比特位;
将所述M个程序检测点发生或被运行的频次信息与所述M个比特位段建立映射关系;
将所获取的M个程序检测点中的每个程序检测点发生或被运行的频次信息存储在所述寄存器中对应的比特位段中。
11.如权利要求10所述的调试方法,其特征在于,所述程序检测点的个数M不大于所述待调试子模块中所有处于闲置状态的寄存器的总比特位数的二分之一,且H≥2M。
12.如权利要求10所述的调试方法,其特征在于,所述读取所述存储空间内的程序检测点信息包括:读取所述寄存器内的M个比特位段的数据;
所述根据所获取的运行情况信息,对所述待调试微程序及所述待调试子模块进行分析包括:
根据所述M个比特位段的数据,分析应该执行的待调试微程序的频次是否正确;
根据分析结果,判断待调试微程序运行情况是否符合微程序设计思想,修改所述待调试微程序。
13.如权利要求5所述的调试方法,其特征在于,所述在待调试微程序中确定程序检测点包括:在所述待调试微程序中确定P个程序检测点;
所述获取程序检测点的运行情况信息包括:获取所述P个程序检测点的逻辑相关性信息;
所述将程序检测点信息存储到所述存储空间内包括:
将所获取的P个程序检测点的逻辑相关性信息与P个寄存器建立映射关系;
判断所述P个程序检测点中的每个程序检测点发生或被运行时,所述P个程序检测点中的其他的各个程序检测点是否已发生或已被运行;
根据判断结果,生成一判断值;
将所述判断值存储到该程序检测点对应的寄存器中;
所述读取所述存储空间内的运行情况信息包括:读取所述P个寄存器内的数据;
所述根据所获取的运行情况信息,对所述待调试微程序及所述待调试子模块进行分析包括:
根据所述P个寄存器内的数据,确定所述P个程序检测点之间的逻辑相关性信息;
根据所确定的所述P个程序检测点之间的逻辑相关性信息,判断待调试微程序运行情况是否符合微程序设计思想,修改所述待调试微程序。
14.如权利要求13所述的调试方法,其特征在于,所述程序检测点的个数P不大于所述待调试子模块中所有处于闲置状态的寄存器的总个数。
15.如权利要求5所述的调试方法,其特征在于,所述在待调试微程序中确定程序检测点包括:在所述待调试微程序中确定Q个程序检测点;
所述获取程序检测点的运行情况信息包括:获取所述Q个程序检测点的所述待调试子模块内部的硬件寄存器或微程序软件运行变量信息;
所述将程序检测点信息存储到所述存储空间内包括:
将所获取的所述Q个程序检测点的所述待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到所述寄存器中。
16.如权利要求15所述的调试方法,其特征在于,所述程序检测点的个数Q不大于所述待调试子模块中所有处于闲置状态的寄存器的总个数。
17.如权利要求15所述的调试方法,其特征在于,将所获取的所述Q个程序检测点的所述待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到所述寄存器中包括:
将所获取的Q个程序检测点的所述待调试子模块内部的硬件寄存器或微程序软件运行变量信息与Q个寄存器建立映射关系;
在所述Q个程序检测点中的每个程序检测点发生或被运行时,将该程序检测点的所述待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到对应的寄存器中。
18.如权利要求17所述的调试方法,其特征在于,所述读取所述存储空间内的程序检测点信息包括:读取所述Q个寄存器内的数据;
所述根据所获取的运行情况信息,对所述待调试微程序及所述待调试子模块进行分析包括:
根据所述Q个寄存器内的数据,判断待调试微程序运行逻辑情况是否符合微程序设计思想,对所述待调试微程序进行修正。
19.如权利要求3所述的调试方法,其特征在于,所述存储模块为所述中央处理器能够访问的内存。
20.一种微程序的调试装置,其特征在于,包括:
存储模块,用于提供处于闲置状态的存储空间;
微程序存储装置,用于存储待调试微程序;
检测程序植入模块,用于在所述待调试微程序中确定程序检测点,并在所述待调试微程序的程序检测点处植入检测程序;
微程序运行模块,用于依据植入所述检测程序后的待调试微程序,运行处理器的待调试子模块;
程序检测点信息检测模块,用于在所述微程序运行模块运行所述处理器的待调试子模块时,将程序检测点信息存储到所述存储空间内;
程序检测点信息读取模块,用于读取所述存储空间内的程序检测点信息。
21.如权利要求20所述的调试装置,其特征在于,还包括:
分析处理模块,用于依据所读取的程序检测点信息,获取所述程序检测点的运行情况信息;还用于根据所获取的运行情况信息,对所述待调试微程序及所述待调试子模块进行分析。
22.如权利要求21所述的微程序的调试装置,其特征在于,所述处理器为中央处理器或图形处理器。
23.如权利要求22所述的调试装置,其特征在于,所述存储模块为所述中央处理器能够访问的寄存器。
24.如权利要求23所述的调试装置,其特征在于,所述检测程序植入模块在所述待调试微程序中确定N个程序检测点;
所述程序检测点信息检测模块还用于将所述N个程序检测点是否发生或被运行的信息与所述寄存器中的N个比特位建立映射关系;还用于将所获取的所述N个程序检测点中的每个程序检测点是否发生或被运行的信息存储在所述寄存器中对应的比特位中;
所述分析处理模块用于根据所述N个比特位的数据,分析应该执行的待调试微程序是否被执行,不应该被执行的待调试微程序是否被执行;还用于根据分析结果,判断待调试微程序执行情况是否符合微程序设计思想,修改所述待调试微程序。
25.如权利要求23所述的调试装置,其特征在于,所述检测程序植入模块在所述待调试微程序中确定M个程序检测点;
所述程序检测点信息检测模块还用于将所述寄存器中的H个比特位划分为M个比特位段,每个比特位段包含至少两个相邻的比特位;还用于将所述M个程序检测点发生或被运行的频次信息与所述M个比特位段建立映射关系;还用于将所获取的M个程序检测点中的每个程序检测点发生或被运行的频次信息存储在所述寄存器中对应的比特位段中;
所述分析处理模块用于根据所述M个比特位段的数据,分析应该执行的待调试微程序的频次是否正确;还用于根据分析结果,判断待调试微程序运行情况是否符合微程序设计思想,修改所述待调试微程序。
26.如权利要求23所述的调试装置,其特征在于,所述检测程序植入模块在所述待调试微程序中确定P个程序检测点;
所述程序检测点信息检测模块还用于将所获取的P个程序检测点的逻辑相关性信息与P个寄存器建立映射关系;还用于判断所述P个程序检测点中的每个程序检测点发生或被运行时,所述P个程序检测点中的其他的各个程序检测点是否已发生或已被运行;还用于根据判断结果,生成一判断值;还用于将所述判断值存储到该程序检测点对应的寄存器中;
所述分析处理模块用于根据所述P个寄存器内的数据,确定所述P个程序检测点之间的逻辑相关性信息;还用于根据所确定的所述P个程序检测点之间的逻辑相关性信息,判断待调试微程序运行情况是否符合微程序设计思想,修改所述待调试微程序。
27.如权利要求23所述的调试装置,其特征在于,所述检测程序植入模块在所述待调试微程序中确定Q个程序检测点;
所述程序检测点信息检测模块还用于将所获取的Q个程序检测点的所述待调试子模块内部的硬件寄存器或微程序软件运行变量信息与Q个寄存器建立映射关系;还用于在所述Q个程序检测点中的每个程序检测点发生或被运行时,将该程序检测点的所述待调试子模块内部的硬件寄存器或微程序软件运行变量信息存储到对应的寄存器中;
所述分析处理模块用于根据所述Q个寄存器内的数据,判断待调试微程序运行逻辑情况是否符合微程序设计思想,对所述待调试微程序进行修正。
28.如权利要求22所述的微程序的调试装置,其特征在于,所述存储模块为所述中央处理器能够访问的内存。
29.如权利要求20所述的调试装置,其特征在于,还包括:
显示装置,用于将所述程序检测点信息读取模块所读取的程序检测点信息进行显示。
CN202011644223.3A 2020-12-31 2020-12-31 一种微程序的调试方法及其调试装置 Active CN112667514B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011644223.3A CN112667514B (zh) 2020-12-31 2020-12-31 一种微程序的调试方法及其调试装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011644223.3A CN112667514B (zh) 2020-12-31 2020-12-31 一种微程序的调试方法及其调试装置

Publications (2)

Publication Number Publication Date
CN112667514A true CN112667514A (zh) 2021-04-16
CN112667514B CN112667514B (zh) 2024-08-20

Family

ID=75412505

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011644223.3A Active CN112667514B (zh) 2020-12-31 2020-12-31 一种微程序的调试方法及其调试装置

Country Status (1)

Country Link
CN (1) CN112667514B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6901581B1 (en) * 2002-10-02 2005-05-31 Eridon Corporation Method for software debugging via simulated re-execution of a computer program
CN1936862A (zh) * 2005-09-23 2007-03-28 中兴通讯股份有限公司 一种面向方面的嵌入式系统测试方法及其系统
CN101261601A (zh) * 2008-04-25 2008-09-10 浙江大学 一种微处理器调试方法及所用的微处理器调试模块
CN101493847A (zh) * 2008-01-22 2009-07-29 中兴通讯股份有限公司 一种通讯片上系统芯片追踪调试的方法及装置
CN102467446A (zh) * 2010-11-11 2012-05-23 上海华虹集成电路有限责任公司 可设置程序指针值的处理器芯片仿真器
CN103034581A (zh) * 2011-09-30 2013-04-10 重庆重邮信科通信技术有限公司 一种嵌入式系统跟踪调试方法及装置
CN107911264A (zh) * 2017-12-07 2018-04-13 清华大学 可编程路由交换设备在线调试装置及方法
CN108628734A (zh) * 2017-03-21 2018-10-09 中兴通讯股份有限公司 一种功能程序调试方法和终端
CN110419031A (zh) * 2017-05-02 2019-11-05 微芯片技术股份有限公司 用于微控制器程序的代码覆盖范围跟踪
CN111966602A (zh) * 2020-09-04 2020-11-20 苏州浪潮智能科技有限公司 一种定点代码调试方法、系统、终端及存储介质

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6901581B1 (en) * 2002-10-02 2005-05-31 Eridon Corporation Method for software debugging via simulated re-execution of a computer program
CN1936862A (zh) * 2005-09-23 2007-03-28 中兴通讯股份有限公司 一种面向方面的嵌入式系统测试方法及其系统
CN101493847A (zh) * 2008-01-22 2009-07-29 中兴通讯股份有限公司 一种通讯片上系统芯片追踪调试的方法及装置
CN101261601A (zh) * 2008-04-25 2008-09-10 浙江大学 一种微处理器调试方法及所用的微处理器调试模块
CN102467446A (zh) * 2010-11-11 2012-05-23 上海华虹集成电路有限责任公司 可设置程序指针值的处理器芯片仿真器
CN103034581A (zh) * 2011-09-30 2013-04-10 重庆重邮信科通信技术有限公司 一种嵌入式系统跟踪调试方法及装置
CN108628734A (zh) * 2017-03-21 2018-10-09 中兴通讯股份有限公司 一种功能程序调试方法和终端
CN110419031A (zh) * 2017-05-02 2019-11-05 微芯片技术股份有限公司 用于微控制器程序的代码覆盖范围跟踪
CN107911264A (zh) * 2017-12-07 2018-04-13 清华大学 可编程路由交换设备在线调试装置及方法
CN111966602A (zh) * 2020-09-04 2020-11-20 苏州浪潮智能科技有限公司 一种定点代码调试方法、系统、终端及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
CHENG XINGMEI: "Debugfunction implementation for embedded MPSoC", 《JOURNAL OFCOMPUTER-AIDED DESIGN&COMPUTER GRAPHICS》, 31 December 2008 (2008-12-31) *
WOSWOD: "动态二进制插桩的原理和基本实现过程(Pin/DynamoRIO/Frida)", 《CSDN》, 26 April 2019 (2019-04-26) *
申敏;彭涛;周勃;: "LTE系统中软件跟踪调试技术的研究与实现", 电视技术, no. 19, 2 October 2012 (2012-10-02) *

Also Published As

Publication number Publication date
CN112667514B (zh) 2024-08-20

Similar Documents

Publication Publication Date Title
CN100449477C (zh) 用于嵌入式系统的实时调试器接口
CN112631893B (zh) 面向异构平台的多层次存储结构内存检测方法
US20060150160A1 (en) Software analyzer
CN100440163C (zh) 对计算机程序进行运行时分析的方法和系统
US6247146B1 (en) Method for verifying branch trace history buffer information
US20120131559A1 (en) Automatic Program Partition For Targeted Replay
US9575758B2 (en) Method for setting breakpoints, and an integrated circuit and debug tool therefor
US5715435A (en) Trace control circuit in emulation system
US7765434B2 (en) Resource efficient software tracing for problem diagnosis
CN114245892A (zh) 基于在时间旅行调试期间更改函数内部加载的数据竞争分析
CN113127314A (zh) 一种检测程序性能瓶颈的方法、装置及计算机设备
WO2009111108A1 (en) Method and apparatus for sharing debug resources
CN117555523A (zh) 一种基于辅助程序执行反馈的控制流构建方法及系统
CN112667514B (zh) 一种微程序的调试方法及其调试装置
CN109189671B (zh) 逐层夹逼式变量定位方法、系统及终端设备
CN116795576A (zh) 基于日志打印的设备驱动调试方法、装置和电子设备
CN115858172A (zh) 一种处理器指令执行统计方法及装置、处理器系统
US10140476B2 (en) Tracing processing activity
CN113704040A (zh) 一种微处理器内存可靠性测试方法
US8695000B1 (en) Data transfer protection in a multi-tasking modeling environment having a protection mechanism selected by user via user interface
JP2007058450A (ja) 半導体集積回路
CN1165844C (zh) 确定数字设备中的软件模块测试信息的方法和设备
JP2022124240A (ja) 診断パターン生成方法及び計算機
CN111782271A (zh) 一种软硬件交互方法及装置、存储介质
US7222202B2 (en) Method for monitoring a set of semaphore registers using a limited-width test bus

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