CN109800166B - 一种嵌入式实时操作系统的调试方法及装置 - Google Patents
一种嵌入式实时操作系统的调试方法及装置 Download PDFInfo
- Publication number
- CN109800166B CN109800166B CN201910038736.0A CN201910038736A CN109800166B CN 109800166 B CN109800166 B CN 109800166B CN 201910038736 A CN201910038736 A CN 201910038736A CN 109800166 B CN109800166 B CN 109800166B
- Authority
- CN
- China
- Prior art keywords
- task
- debugging
- target kernel
- core
- list
- 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
- 238000000034 method Methods 0.000 title claims abstract description 60
- 230000008569 process Effects 0.000 claims description 7
- 230000000977 initiatory effect Effects 0.000 claims description 6
- 230000006870 function Effects 0.000 description 39
- 230000006399 behavior Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种嵌入式实时操作系统的调试方法和装置,应用于多核处理器,该方法包括:控制所述多核处理器中的目标内核进入调试模式;通过访问预设的调试结构体的成员,得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态,并将所述任务列表以及所述每一个任务的运行状态展示于调试界面上。利用上述方法,能够实现操作系统原语级的调试,可以在调试状态下查看操作系统中所有任务的状态。
Description
技术领域
本发明属于调试领域,具体涉及一种嵌入式实时操作系统的调试方法及装置。
背景技术
嵌入式操作系统指的是运行在各种嵌入式处理器之上,可为各种嵌入式应用程序提供基本的操作系统功能,具有统一的系统调用接口的操作系统,如果嵌入式操作系统能使计算机及时响应外部事件的请求,并能即使控制所有实时设备与实时任务的协调运行,那么这种嵌入式的操作系统就成为嵌入式实时操作系统。
嵌入式开发的过程中,单片机上常常会采用一些适用于单片机的嵌入式实时操作系统,在上位机对其进行真机开发的时候,通常只能进行纯粹的程序语言级调试,没有办法可以实施操作系统的操作原语级的调试,如获取各核心上的任务列表和状态,手动操作对任务的调度等操作。如何提供更高层的调试方法,使得嵌入式软件开发人员可以通过操作系统的原语进行调试,是现有技术中亟待解决的问题.
发明内容
针对上述现有技术中难以实施操作系统的操作原语级的调试这一问题,提出了一种嵌入式实时操作系统的调试方法及装置,利用这种方法和装置,能够提供更高层的调试方法,使得嵌入式软件开发人员可以通过操作系统的原语进行调试。
本发明提供了以下方案。
一种嵌入式实时操作系统的调试方法,应用于多核处理器,其特征在于,所述方法包括:
控制所述多核处理器中的目标内核进入调试模式;
通过访问预设的调试结构体的成员,得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态,并将所述任务列表以及所述每一个任务的运行状态展示于调试界面上。
可选地,其中,所述预设的调试结构体包含多个结构体成员,所述多个结构体成员包括:指向所述多核处理器中每一个内核的任务池的指针、指向所述每一个内核的当前任务控制块的指针。
可选地,其中,所述控制所述多核处理器中的目标内核进入调试模式包括:
通过JTAG接口向所述目标内核发起中断指令;
控制所述目标内核保存现场寄存器的值;
将所述目标内核的所述当前任务控制块的状态变更为调试状态。
可选地,其中,若在得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态之后退出所述调试模式,所述方法还包括:
将所述目标内核的所述当前任务控制块的状态恢复为运行状态;
控制所述目标内核恢复所述现场寄存器的值;
控制所述目标内核继续运行所述当前任务。
可选地,其中,所述通过访问预设的调试结构体的成员,获得所述目标内核的任务列表与所述任务列表中每一个任务的运行状态包括:
通过读取所述调试结构体的第一成员与第二成员,获取所述目标内核的任务池的地址,以及获取所述目标内核的当前任务控制块的地址;
通过访问所述目标内核的任务池,获取所述目标内核的任务列表;
通过访问所述目标内核的当前任务控制块的地址,获取所述目标内核正在运行的第一任务,并根据所述第一任务获取所述任务列表中每一个任务的运行状态;
其中,所述第一成员为指向所述目标内核的任务池的指针、所述第二成员为指向所述目标内核的当前任务控制块的指针。
可选地,其中,所述通过访问预设的调试结构体的成员,获得所述目标内核的任务列表与所述任务列表中每一个任务的运行状态之后,所述方法还包括:
接收任务切换指令,根据所述任务切换指令从所述任务列表中选取第二任务;
根据所述第二任务的函数地址为所述调试结构体的第三成员赋值,
根据所述第三成员的值为上述目标内核的程序计数器PC赋值,从而执行任务切换;
其中,所述第三成员用于保存待切换任务的函数地址。
可选地,其中,若所述任务切换指令指示在所述执行任务切换后继续执行所述第一任务,所述方法还包括:
在获取所述任务列表之后,将所述当前任务控制块对应的第一任务的函数地址赋值给第四成员;
其中,所述第四成员用于保存被切换任务的函数地址。
可选地,其中,所述方法还包括:
在完成所述任务切换后退出所述调试模式,并控制所述目标内核执行所述第二任务;以及
在所述第二任务执行完毕后,判断所述第四成员的内容是否为空;其中,
若所述第四成员的内容为空,则控制所述目标内核执行所述嵌入式实时操作系统的预设调度流程;
若所述第四成员的内容非空,则控制所述目标内核恢复现场寄存器中的值,并继续执行所述第一任务;
其中,所述现场寄存器中的值是所述目标内核进入所述调试模式时所保存的浮点寄存器与通用寄存器中的值。
可选地,其中,在进入所述调试模式时,按照预设的第一核心序列控制所述多核处理器中的每一个内核依次暂停运行;以及,
在退出所述调试模式时,按照预设的第二核心序列依次重启所述多核处理器中的每一个内核;
其中,所述第一核心序列与所述第二核心序列互为倒序。
一种嵌入式实时操作系统的调试装置,应用于多核处理器,其特征在于,所述装置包括:
调试启动模块,用于控制所述多核处理器中的目标内核进入调试模式;
任务获取模块,用于通过访问预设的调试结构体的成员,得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态,并将所述任务列表以及所述每一个任务的运行状态展示于调试界面上。
可选地,其中,所述预设的调试结构体包含多个结构体成员,所述多个结构体成员包括:指向所述多核处理器中每一个内核的任务池的指针、指向所述每一个内核的当前任务控制块的指针。
可选地,其中,所述调试启动模块用于:
通过JTAG接口向所述目标内核发起中断指令;
控制所述目标内核保存现场寄存器的值;
将所述目标内核的所述当前任务控制块的状态变更为调试状态。
可选地,其中,若在得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态之后退出所述调试模式,所述装置还包括调试关闭模块,用于:
将所述目标内核的所述当前任务控制块的状态恢复为运行状态;
控制所述目标内核恢复所述现场寄存器的值;
控制所述目标内核继续运行所述当前任务。
可选地,其中,所述任务获取模块,用于:
通过读取所述调试结构体的第一成员与第二成员,获取所述目标内核的任务池的地址,以及获取所述目标内核的当前任务控制块的地址;
通过访问所述目标内核的任务池,获取所述目标内核的任务列表;
通过访问所述目标内核的当前任务控制块的地址,获取所述目标内核正在运行的第一任务,并根据所述第一任务获取所述任务列表中每一个任务的运行状态;
其中,所述第一成员为指向所述目标内核的任务池的指针、所述第二成员为指向所述目标内核的当前任务控制块的指针。
可选地,其中,所述装置还包括任务切换模块,在所述通过访问预设的调试结构体的成员,获得所述目标内核的任务列表与所述任务列表中每一个任务的运行状态之后,用于:
接收任务切换指令,根据所述任务切换指令从所述任务列表中选取第二任务;
根据所述第二任务的函数地址为所述调试结构体的第三成员赋值,
根据所述第三成员的值为上述目标内核的程序计数器PC赋值,从而执行任务切换;
其中,所述第三成员用于保存待切换任务的函数地址。
可选地,其中,若所述任务切换指令指示在所述执行任务切换后继续执行所述第一任务,所述任务切换模块进一步用于:
在获取所述任务列表之后,将所述当前任务控制块对应的第一任务的函数地址赋值给第四成员;
其中,所述第四成员用于保存被切换任务的函数地址。
可选地,其中,所述任务切换模块进一步用于:
在完成所述任务切换后退出所述调试模式,并控制所述目标内核执行所述第二任务;以及
在所述第二任务执行完毕后,判断所述第四成员的内容是否为空;其中,
若所述第四成员的内容为空,则控制所述目标内核执行所述嵌入式实时操作系统的预设调度流程;
若所述第四成员的内容非空,则控制所述目标内核恢复现场寄存器中的值,并继续执行所述第一任务;
其中,所述现场寄存器中的值是所述目标内核进入所述调试模式时所保存的浮点寄存器与通用寄存器中的值。
可选地,其中,所述装置还用于:
在进入所述调试模式时,按照预设的第一核心序列控制所述多核处理器中的每一个内核依次暂停运行;以及,
在退出所述调试模式时,按照预设的第二核心序列依次重启所述多核处理器中的每一个内核;
其中,所述第一核心序列与所述第二核心序列互为倒序。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:利用上述技术方案,相较于普通调试中纯粹的程序语言级调试,本实施例提供更高一层的抽象的调试方法,实现了操作系统原语级的调试,可以在调试状态下查看操作系统中所有任务的状态,
应当理解,上述说明仅是本发明技术方案的概述,以便能够更清楚地了解本发明的技术手段,从而可依照说明书的内容予以实施。为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举说明本发明的具体实施方式。
附图说明
通过阅读下文的示例性实施例的详细描述,本领域普通技术人员将明白本文所述的有点和益处以及其他优点和益处。附图仅用于示出示例性实施例的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的标号表示相同的部件。在附图中:
图1为根据本发明一实施例的嵌入式实时操作系统的调试方法的流程示意图;
图2为根据本发明另一实施例的嵌入式实时操作系统的调试方法的流程示意图;
图3为根据本发明又一实施例的嵌入式实时操作系统的调试方法的流程示意图;
图4为根据本发明又一实施例的嵌入式实时操作系统的调试方法的流程示意图;
图5为根据本发明又一实施例的嵌入式实时操作系统的调试方法的流程示意图;
图6为根据本发明一实施例的嵌入式实时操作系统的调试装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
在本发明中,应理解,诸如“包括”或“具有”等术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不旨在排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在的可能性。
另外还需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
图1示出了一种嵌入式实时操作系统的调试方法的流程示意图,该嵌入式实时操作系统可以应用在多核处理器中,如图1所示,嵌入式实时操作系统的调试方法包括以下步骤:
S101:控制所述多核处理器中的目标内核进入调试模式;
S102:通过访问预设的调试结构体的成员,得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态,并将所述任务列表以及所述每一个任务的运行状态展示于调试界面上。
具体地,在上述S101中,上述控制所述多核处理器中的目标内核进入调试模式指的是将多核处理器中的目标内核的运行控制权交给上位机(也即调试主机)。在调试模式下,该上位机对该目标内核具有完全的控制权,其可以根据调试的需要执行调试程序,并且接收调试程序的执行反馈,因此可以在调试状态下观察到目标内核的运行状态、寄存器、存储器等,从而满足调试的可观察性。可选地,上位机与该多核处理器之间的通信接口可以采用JTAG接口、USB接口以及FIFO总线接口等多种类型的接口。
具体地,在上述S102中,预设的调试结构体指的是在进入该调试状态之前预先定义好、并分配好内存空间的结构体,该调试结构体是本实施例中调试系统的基础,所有的调试行为均围绕该调试结构体展开。具体地,该调试结构体包括用于保存目标内核的任务列表的引用指令、以及目标内核的任务列表中每一个任务的运行状态的结构体成员。通过对该调试结构体进行解析,可以获得目标内核的任务列表以及每一个任务的状态信息,上述对该调试结构体进行解析具体是对该结构体成员进行解析。
可选地,该结构体成员可以是指向另一预先定义的结构体的指针成员,且该另一预先定义的结构体可以用于保存上述目标内核的任务列表以及每一个任务的运行状态。
例如,定义一个名为debug_struct的调试结构体,并为其分配内存,表1示出了对应于该调试结构体的内存结构,从表1中可以看出,在正常运行模式下,目标内核运行到0×80000000(起始位置)处会自动执行一次跳转到0×8000XXXX,因此从0×80000000(起始位置)到0×8000XXXX之间的内存空间在正常运行模式下是无法访问的,只有在调试模式下才可以被访问。
该调试结构体是本实施例中调试系统的基础,所有的调试行为均围绕该调试结构体展开,core0与core1为多核处理器的两个内核,该调试结构体debug_struct包括下述成员:
core0_list_tasks,用于保存core0内核的任务列表以及每一个任务的状态的引用指令任务列表的引用指令。
core1_list_tasks,用于保存core1内核的任务列表以及每一个任务的状态的引用指令任务列表的引用指令。
当core0进入调试模式时,可以通过读取对应于core0_list_tasks的内存空间,并对获取的core0的任务列表以及每一个任务的状态的引用指令进行解析,获取对应于core0的任务列表以及每一个任务的状态信息,并将其展示在调试界面上。
表1:
本发明实施例的基本思路在于,预先定义调试结构体并为其分配内存,将对应于每一个内核的任务列表的引用信息保存在该调试结构体内,上位机在进入调试模式时读取上述调试结构体的内存并作解析,就可以得到每个核心上所有的任务的信息并展示在调试窗口上。
利用上述技术方案,相较于普通调试中纯粹的程序语言级调试,本实施例提供更高一层的抽象的调试方法,实现了操作系统原语级的调试,可以在调试状态下查看操作系统中所有任务的状态,直观清楚地了解哪些任务正在执行(running)、哪些任务被挂起(pending)。
基于图1的嵌入式实时操作系统的调试方法,本申请的一些实施例还提供了该调试方法的一些具体实施方案,以及扩展方案,下面进行说明。
在一实施例中,进一步对上述预设的调试结构体进行示例性说明,具体包括:
上述预设的调试结构体包含多个结构体成员,上述多个结构体成员包括:指向上述多核处理器中每一个内核的任务池的指针、指向上述每一个内核的当前任务控制块的指针。
具体地,本领域技术人员可以理解的是,上述任务池被创建用于保存任务列表,也即用于保存当前目标内核中正在执行的任务以及等待执行的任务。上述任务控制块是一个基于链表的数据结构,任务控制块主要用于记录任务的堆栈栈顶指针、指向下一个任务控制块的指针、任务等待的延迟时间、任务的当前状态标志与任务的优先级别等一些与任务管理有关的属性。当新创建一个任务时需要一个对应的任务控制块,用于记录任务状态,而上述当前任务控制块指的就是对应于当前正在执行的任务的任务控制块。
基于此,本实施例在进入调试模式时,可以根据成员名称找到对应内核的任务池以及当前任务控制块,通过解析上述任务池可以获得目标内核的任务列表,又由于内核同时只能执行一个任务,因此通过解析上述当前任务控制块,可以获知处于“运行中”状态的当前任务,该任务列表中除上述当前任务之外的其他任务的任务状态也即“非运行中”。
例如,定义一个名为debug_struct的结构体,并为其分配内存,表2示出了本实施例中对应于该调试结构体的内存结构,从表2中可以看出,在正常运行模式下,目标内核运行到0×80000000(起始位置)处会自动执行一次跳转到0×8000XXXX,因此从0×80000000(起始位置)到0×8000XXXX之间的内存空间在正常运行模式下是无法访问的,只有在调试模式下才可以被访问。
该调试结构体是本实施例中调试系统的基础,所有的调试行为均围绕该调试结构体展开,core0与core1为多核处理器的两个内核,该调试结构体debug_struct包括下述成员:
core0_task_pool,用于指向core0的任务池;
core1_task_pool,用于指向core1的任务池;
core0_task_ctb,用于指向core0的当前任务控制块;
core1_task_ctb,用于指向core1的当前任务控制块。
当core0进入调试模式时,可以根据成员名读取对应于core0_task_pool的内存空间,获取core0的任务列表,读取对应于core0_task_ctb的内存空间,获取每一个任务的状态,并将其展示在调试界面上。
表2:
在一实施例中,进一步对如何控制上述多核处理器中的目标内核进入调试模式进行示例性说明,具体地,上述控制上述多核处理器中的目标内核进入调试模式具体包括执行以下操作:
(1)通过JTAG接口向上述目标内核发起中断指令。
(2)控制上述目标内核保存现场寄存器的值。
(3)将目标内核的当前任务控制块的状态变更为调试状态。
在上述操作(2)中,也可以采用上述预设的调试结构体保存现场寄存器的值。
在一实施例中,进一步对如何控制上述多核处理器中的目标内核退出调试模式进行示例性说明,具体地,在获取上述目标内核的任务列表与上述任务列表中每一个任务的运行状态之后,上述控制上述多核处理器中的目标内核退出调试模式具体包括执行以下操作:
(4)将上述目标内核的上述当前任务控制块的状态恢复为运行状态。
(5)控制上述目标内核恢复上述现场寄存器的值。
(6)控制上述目标内核继续运行上述当前任务控制块对应的任务。
具体地,在上述操作(5)中,若上述操作(2)中采用的是通过预设的调试结构体保存现场寄存器的值,此时对应地也需要从该调试结构对应的内存结构中恢复。
具体地,在上述操作(6)中,由于任务控制块是一个数据结构,当任务的CPU使用权被剥夺时,用该任务控制块来保存该任务的状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行,因此,基于上述任务控制块,在退出调试模式时,可以继续运行上述当前任务控制块对应的任务。
图2示出了本发明提供的另一个嵌入式实时操作系统的调试方法的流程示意图,结合图1与表1,本实施例进一步对如何通过访问预设的调试结构体的成员,获得上述目标内核的任务列表与上述任务列表中每一个任务的运行状态进行示例性说明,如图2所示,包括如下步骤:
S201:通过读取上述调试结构体的第一成员与第二成员,获取上述目标内核的任务池的地址,以及获取上述目标内核的当前任务控制块的地址;
S202:通过访问上述目标内核的任务池,获取上述目标内核的任务列表;
S203:通过访问上述目标内核的当前任务控制块的地址,获取上述目标内核正在运行的第一任务,并根据上述第一任务获取上述任务列表中每一个任务的运行状态。
具体地,上述S202与S203之间的执行顺序在此不作限制,可以先执行S202后执行S203,也可以先执行S203后执行S202,也可以S202与S203同时执行。
其中,上述第一成员为指向上述目标内核的任务池的指针、上述第二成员为指向上述目标内核的当前任务控制块的指针。通过解析上述第一成员和第二成员,可以获得上述目标内核的任务池的地址以及上述目标内核的当前任务控制块的地址。
具体地,任务池用于保存任务列表,也即用于保存当前目标内核中正在执行的任务以及等待执行的任务。任务控制块是一个基于链表的数据结构,任务控制块主要用于记录任务的堆栈栈顶指针、指向下一个任务控制块的指针、任务等待的延迟时间、任务的当前状态标志与任务的优先级别等一些与任务管理有关的属性。当新创建一个任务时需要一个对应的任务控制块,用于记录任务状态。上述当前任务控制块指的就是对应于当前正在执行的任务的任务控制块。
基于此,本实施例在进入调试模式时,可以根据成员名称找到对应内核的任务池以及当前任务控制块,通过解析上述任务池可以获得目标内核的任务列表,又由于内核同时只能执行一个任务,因此通过解析上述当前任务控制块,可以获知处于“运行中”状态的当前任务,该任务列表中除上述当前任务之外的其他任务的任务状态也即“非运行中”。
利用以上技术方案,本实施例利用保存在结构体中的地址,即可实现任务列表及任务状态的引用。
图3示出了本发明提供的又一个嵌入式实时操作系统的调试方法的流程示意图,结合图1,本实施例进一步对上述通过访问预设的调试结构体的成员,获得上述目标内核的任务列表与上述任务列表中每一个任务的运行状态之后的控制步骤进行示例性说明,如图3所示,包括如下步骤:
S301:接收任务切换指令,根据上述任务切换指令从上述任务列表中选取第二任务;
S302:根据上述第二任务的函数地址为上述调试结构体的第三成员赋值,
S303:根据所述第三成员的值为上述目标内核的程序计数器PC赋值,从而执行任务切换;
其中,上述第三成员用于保存待切换任务的函数地址的地址。
具体地,在实际情况下,调试过程中可能需要对操作系统的调度流进行修改。
例如,当进入调试状态时,core0中的任务队列包括:task1、task2、task3(按优先级从高到低进行排序);其中,task1为上述第一任务,也即进入调试状态时正在运行中的任务,而task3由于优先级较低,多次被后创建的任务挤到任务队列的后端,始终无法被运行,此时本实施例可以借助调试模式将上述task3主动切换到最前端,使其在退出调试模式后被core0提早运行。
具体地,在上述S302中,可以预先定义一个调试结构体的第三成员,用于存放待切换任务的函数地址,并添加至上述调试结构体中。
具体地,在上述S303中,程序计数器PC(program counter)是用于存放下一条指令所在单元的地址,因此,本实施例通过根据第三成员的值为上述程序计数器PC赋值,也即将上述第二任务的函数地址存放到上述程序计数器PC中;进一步在退出调试后,目标内核要执行一条指令时,首先要从程序计数器PC中存放的指令地址处开始执行。
例如,定义一个名为debug_struct的结构体,并为其分配内存,表3示出了本实施例中对应于该调试结构体的内存结构,从表3中可以看出,在正常运行模式下,目标内核运行到0×80000000(起始位置)处会自动执行一次跳转到0×8000XXXX,因此从0×80000000(起始位置)到0×8000XXXX之间的内存空间在正常运行模式下是无法访问的,只有在调试模式下才可以被访问。
该调试结构体是本实施例中调试系统的基础,所有的调试行为均围绕该调试结构体展开,core0与core1为多核处理器的两个内核,上述第三成员的成员名为_debug_task,该调试结构体debug_struct包括下述成员:
core0_task_pool,用于指向core0的任务池;
core1_task_pool,用于指向core1的任务池;
core0_task_ctb,用于指向core0的当前任务控制块;
core1_task_ctb,用于指向core1的当前任务控制块;
_debug_task,用于存放待切换任务的函数地址。
当core0进入调试模式时,可以根据成员名读取对应于core0_task_pool的内存空间,获取core0的任务列表,其中,该任务列表包括:task1、task2、task3;读取对应于core0_task_ctb的内存空间,获取每一个任务的状态,其中,task1的状态为“运行中”、task2与task3的状态为“非运行中”;接收到调试人员发来的切换指令,指示切换task3并执行;从该任务列表中获取task3的函数地址,并将其赋值给_debug_task,也即将task3的函数地址保存到_debug_task的内存空间中;进一步地,将_debug_task的内存空间中函数地址送入程序计数器PC;进而,在退出调试模式后,第一条执行的指令即task3。
表3:
相较于现有技术以及前述实施例。本实施例利用以上技术方案可以实现在退出调试模式时切换至指定的任务上,提供了高层原语级的调试交互方法,便于调试人员的操作。
图4示出了本发明提供的又一个嵌入式实时操作系统的调试方法的流程示意图,结合图4,本实施例进一步针对特殊任务切换指令下的调试方法进行示例性说明,具体地,特殊任务切换指令具体为任务切换指令指示在上述执行任务切换后继续执行上述第一任务,上述方法还包括:
S401:接收任务切换指令,根据上述任务切换指令从上述任务列表中选取第二任务;
S402:在获取上述任务列表之后,将上述当前任务控制块对应的第一任务的函数地址赋值给第四成员;
S403:根据上述第二任务的函数地址为上述调试结构体的第三成员赋值;
S404:根据所述第三成员的值为上述目标内核的程序计数器PC赋值,从而执行任务切换;
其中,上述第三成员为用于存放待切换任务的函数地址,上述第四成员用于存放被切换任务的函数地址。
上述S401、S403以及S404与上述实施例中的S301、S302、S303中所描述的技术特征相同或相似,在此不再赘述。
具体地,在上述S402中,可以预先定义一个调试结构体的成员,用于存放被切换的函数地址,并添加至上述调试结构体中。
例如,定义一个名为debug_struct的结构体,并为其分配内存,表4示出了本实施例中对应于该调试结构体的内存结构,从表4中可以看出,在正常运行模式下,目标内核运行到0×80000000(起始位置)处会自动执行一次跳转到0×8000XXXX,因此从0×80000000(起始位置)到0×8000XXXX之间的内存空间在正常运行模式下是无法访问的,只有在调试模式下才可以被访问。
该调试结构体是本实施例中调试系统的基础,所有的调试行为均围绕该调试结构体展开,core0与core1为多核处理器的两个内核,上述第四成员的成员名为_debug_previous_task,该调试结构体debug_struct包括下述成员:
core0_task_pool,用于指向core0的任务池;
core1_task_pool,用于指向core1的任务池;
core0_task_ctb,用于指向core0的当前任务控制块;
core1_task_ctb,用于指向core1的当前任务控制块;
_debug_task,用于存放待切换任务的函数地址;
_debug_previous_task,用于存放被切换任务的函数地址。
表4:
当core0进入调试模式时,可以根据成员名读取对应于core0_task_pool的内存空间,获取core0的任务列表,其中,该任务列表包括:task1、task2、task3;读取对应于core0_task_ctb的内存空间,获取每一个任务的状态,其中,task1的状态为“运行中”、task2与task3的状态为“非运行中”;接收到调试人员发来的切换指令,指示切换task3并执行,并保留状态为“运行中”的task1;从该任务列表中获取task3的函数地址,并将其赋值给_debug_task,也即将task3的函数地址保存到_debug_task的内存空间中;从该任务列表中获取task1的函数地址,并将其赋值给_debug_previous_task,也即将task1的函数地址保存到_debug_previous_task的内存空间中;进一步地,将_debug_task的内存空间中函数地址送入程序计数器PC,进而,在切换任务的同时,可以保留原执行任务。
相较于现有技术以及前述实施例。本实施例利用以上技术方案在退出调试模式时进行切换任务的情况下,仍然不丢失原执行任务。
图5示出了本发明提供的又一个嵌入式实时操作系统的调试方法的流程示意图,结合图4,进一步对进行示例性说明,如图5所示,包括如下步骤:
S501:在完成上述任务切换后退出上述调试模式,并控制上述目标内核执行上述第二任务;以及
S502:在上述第二任务执行完毕后,判断上述第四成员的内容是否为空;其中,
S503:若上述第四成员的内容为空,则控制上述目标内核执行上述嵌入式实时操作系统的预设调度流程;
S504:若上述第四成员的内容非空,则控制上述目标内核恢复寄存器中的值,并继续执行上述第一任务。
其中,所述现场寄存器中的值是所述目标内核进入所述调试模式时所保存的浮点寄存器与通用寄存器中的值。
具体地,若按照上述图3中的流程执行任务切换,则在上述S502中可以判断出第四成员的内容为空,也即可以判断出接收到的切换指令不指示在进行任务切换之后继续执行原任务,进一步地,目标内核可以按照操作系统原本的调度流程继续执行其他任务;若按照上述图4中的流程执行任务切换,则在上述S502中可以判断出第四成员的内容非空,也即可以判断出接收到的切换指令指示在进行任务切换之后继续执行原任务,进一步地,目标内核可以恢复在进入调试模式时保存的寄存器的值,进而继续执行原任务。
例如,若任务切换请求中包含有“任务切换之后继续执行原任务”的指示,可以在收到任务切换请求后设置内存中的调试结构体的成员_debug_previous_task,将其值设置为第一任务的函数地址;相应地,若收到的任务切换请求中不包含“任务切换之后继续执行原任务”的指示,则无需对_debug_previous_task进行任何操作。在切换的任务执行完毕之后,再检查内存中的调试结构体的成员变量_debug_previous_task是否为空,如果是,则控制目标内核按照预设的调度流程继续运行即可,如果_debug_previous_task非空,则可以将进入调试阶段时保存的寄存器的值进行恢复,进而继续执行原任务。
相较于现有技术以及前述实施例,本实施例利用以上技术方案可以在要求切换的任务执行完毕之后,继续执行原任务。
基于图1的嵌入式实时操作系统的调试方法,本申请的一些实施例还提供了该调试方法的一些具体实施方案,以及扩展方案,下面进行说明。
在一实施例中,本申请还可以包括如下步骤:
在进入上述调试模式时,按照预设的第一核心序列控制上述多核处理器中的每一个内核依次暂停运行;以及,
在退出上述调试模式时,按照预设的第二核心序列依次重启上述多核处理器中的每一个内核。
具体地,可以由上位机依次控制多核处理器中的每一个内核依次暂停运行,也可以由目标内核通过核间通信控制上述多个处理器中的其他内核依次暂停运行。进一步地,可以由上位机依次控制多核处理器中的每一个内核依次重启,也可以由目标内核通过核间通信控制上述多个处理器中的其他内核依次重启。
进一步地,第一核心序列与上述第二核心序列互为倒序,例如:多核处理器包括多个内核(core1、core2、core3),其中,第一核心序列可以是:core1、core2、core3;第二核心序号可以是:core3、core2、core1。
对于超过一个核心的处理器来说,难以保证在调试的时候整个系统状态的正确性,而通过上述进入调试时与退出调试时的暂停与恢复运行的顺序,优先运行操作过的核心,可保证调试时系统状态的稳定性。
图6示出了一种嵌入式实时操作系统的调试装置60的结构示意图,该嵌入式实时操作系统可以应用在多核处理器中,如图6所示,调试装置60包括:
调试启动模块601,用于控制所述多核处理器中的目标内核进入调试模式;
任务获取模块602,用于通过访问预设的调试结构体的成员,得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态,并将所述任务列表以及所述每一个任务的运行状态展示于调试界面上。
具体地,对上述调试启动模块601的描述中,上述控制所述多核处理器中的目标内核进入调试模式指的是将多核处理器中的目标内核的运行控制权交给上位机(也即调试主机)。在调试模式下,该上位机对该目标内核具有完全的控制权,其可以根据调试的需要执行调试程序,并且接收调试程序的执行反馈,因此可以在调试状态下观察到目标内核的运行状态、寄存器、存储器等,从而满足调试的可观察性。可选地,上位机与该多核处理器之间的通信接口可以采用JTAG接口、USB接口以及FIFO总线接口等多种类型的接口。
具体地,对上述任务获取模块602的描述中,预设的调试结构体指的是在进入该调试状态之前预先定义好、并分配好内存空间的结构体,该调试结构体是本实施例中调试系统的基础,所有的调试行为均围绕该调试结构体展开。具体地,该调试结构体包括用于保存目标内核的任务列表的引用指令、以及目标内核的任务列表中每一个任务的运行状态的结构体成员。通过对该调试结构体进行解析,可以获得目标内核的任务列表以及每一个任务的状态信息,上述对该调试结构体进行解析具体是对该结构体成员进行解析。
可选地,该结构体成员可以是指向另一预先定义的结构体的指针成员,且该另一预先定义的结构体可以用于保存上述目标内核的任务列表以及每一个任务的运行状态。
例如,定义一个名为debug_struct的调试结构体,并为其分配内存,表1示出了对应于该调试结构体的内存结构,从表1中可以看出,在正常运行模式下,目标内核运行到0×80000000(起始位置)处会自动执行一次跳转到0×8000XXXX,因此从0×80000000(起始位置)到0×8000XXXX之间的内存空间在正常运行模式下是无法访问的,只有在调试模式下才可以被访问。
该调试结构体是本实施例中调试系统的基础,所有的调试行为均围绕该调试结构体展开,core0与core1为多核处理器的两个内核,该调试结构体debug_struct包括下述成员:
core0_list_tasks,用于保存core0内核的任务列表以及每一个任务的状态的引用指令任务列表的引用指令。
core1_list_tasks,用于保存core1内核的任务列表以及每一个任务的状态的引用指令任务列表的引用指令。
当core0进入调试模式时,可以通过读取对应于core0_list_tasks的内存空间,并对获取的core0的任务列表以及每一个任务的状态的引用指令进行解析,获取对应于core0的任务列表以及每一个任务的状态信息,并将其展示在调试界面上。
表1:
本发明实施例的基本思路在于,预先定义调试结构体并为其分配内存,将对应于每一个内核的任务列表的引用信息保存在该调试结构体内,上位机在进入调试模式时读取上述调试结构体的内存并作解析,就可以得到每个核心上所有的任务的信息并展示在调试窗口上。
利用上述技术方案,相较于普通调试中纯粹的程序语言级调试,本实施例提供更高一层的抽象的调试方法,实现了操作系统原语级的调试,可以在调试状态下查看操作系统中所有任务的状态,直观清楚地了解哪些任务正在执行(running)、哪些任务被挂起(pending)。
可选地,其中,所述预设的调试结构体包含多个结构体成员,所述多个结构体成员包括:指向所述多核处理器中每一个内核的任务池的指针、指向所述每一个内核的当前任务控制块的指针。
可选地,其中,所述调试启动模块用于:
通过JTAG接口向所述目标内核发起中断指令;
控制所述目标内核保存现场寄存器的值;
将所述目标内核的所述当前任务控制块的状态变更为调试状态。
可选地,其中,若在得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态之后退出所述调试模式,所述装置还包括调试关闭模块,用于:
将所述目标内核的所述当前任务控制块的状态恢复为运行状态;
控制所述目标内核恢复所述现场寄存器的值;
控制所述目标内核继续运行所述当前任务。
可选地,其中,所述任务获取模块,用于:
通过读取所述调试结构体的第一成员与第二成员,获取所述目标内核的任务池的地址,以及获取所述目标内核的当前任务控制块的地址;
通过访问所述目标内核的任务池,获取所述目标内核的任务列表;
通过访问所述目标内核的当前任务控制块的地址,获取所述目标内核正在运行的第一任务,并根据所述第一任务获取所述任务列表中每一个任务的运行状态;
其中,所述第一成员为指向所述目标内核的任务池的指针、所述第二成员为指向所述目标内核的当前任务控制块的指针。
可选地,其中,所述装置还包括任务切换模块,在所述通过访问预设的调试结构体的成员,获得所述目标内核的任务列表与所述任务列表中每一个任务的运行状态之后,用于:
接收任务切换指令,根据所述任务切换指令从所述任务列表中选取第二任务;
根据所述第二任务的函数地址为所述调试结构体的第三成员赋值,
根据所述第三成员的值为上述目标内核的程序计数器PC赋值,从而执行任务切换;
其中,所述第三成员用于保存待切换任务的函数地址。
可选地,其中,若所述任务切换指令指示在所述执行任务切换后继续执行所述第一任务,所述任务切换模块进一步用于:
在获取所述任务列表之后,将所述当前任务控制块对应的第一任务的函数地址赋值给第四成员;
其中,所述第四成员用于保存被切换任务的函数地址。
可选地,其中,所述任务切换模块进一步用于:
在完成所述任务切换后退出所述调试模式,并控制所述目标内核执行所述第二任务;以及
在所述第二任务执行完毕后,判断所述第四成员的内容是否为空;其中,
若所述第四成员的内容为空,则控制所述目标内核执行所述嵌入式实时操作系统的预设调度流程;
若所述第四成员的内容非空,则控制所述目标内核恢复现场寄存器中的值,并继续执行所述第一任务;
其中,所述现场寄存器中的值是所述目标内核进入所述调试模式时所保存的浮点寄存器与通用寄存器中的值。
可选地,其中,所述装置还用于:
在进入所述调试模式时,按照预设的第一核心序列控制所述多核处理器中的每一个内核依次暂停运行;以及,
在退出所述调试模式时,按照预设的第二核心序列依次重启所述多核处理器中的每一个内核;
其中,所述第一核心序列与所述第二核心序列互为倒序。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (18)
1.一种嵌入式实时操作系统的调试方法,应用于多核处理器,其特征在于,所述方法包括:
控制所述多核处理器中的目标内核进入调试模式;
通过访问预设的调试结构体的成员,得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态,并将所述任务列表以及所述每一个任务的运行状态展示于调试界面上;其中,所述调试结构体包括用于保存所述目标内核的任务列表以及所述每一个任务的运行状态的引用指令。
2.根据权利要求1所述的调试方法,其特征在于,所述预设的调试结构体包含多个结构体成员,所述多个结构体成员包括:指向所述多核处理器中每一个内核的任务池的指针、指向所述每一个内核的当前任务控制块的指针。
3.根据权利要求2所述的调试方法,其特征在于,
所述控制所述多核处理器中的目标内核进入调试模式包括:
通过JTAG接口向所述目标内核发起中断指令;
控制所述目标内核保存现场寄存器的值;
将所述目标内核的所述当前任务控制块的状态变更为调试状态。
4.根据权利要求3所述的调试方法,其特征在于,若在得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态之后退出所述调试模式,所述方法还包括:
将所述目标内核的所述当前任务控制块的状态恢复为运行状态;
控制所述目标内核恢复所述现场寄存器的值;
控制所述目标内核继续运行所述当前任务。
5.根据权利要求2所述的调试方法,其特征在于,
所述通过访问预设的调试结构体的成员,获得所述目标内核的任务列表与所述任务列表中每一个任务的运行状态包括:
通过读取所述调试结构体的第一成员与第二成员,获取所述目标内核的任务池的地址,以及获取所述目标内核的当前任务控制块的地址;
通过访问所述目标内核的任务池,获取所述目标内核的任务列表;
通过访问所述目标内核的当前任务控制块的地址,获取所述目标内核正在运行的第一任务,并根据所述第一任务获取所述任务列表中每一个任务的运行状态;
其中,所述第一成员为指向所述目标内核的任务池的指针、所述第二成员为指向所述目标内核的当前任务控制块的指针。
6.根据权利要求5所述的调试方法,其特征在于,所述通过访问预设的调试结构体的成员,获得所述目标内核的任务列表与所述任务列表中每一个任务的运行状态之后,所述方法还包括:
接收任务切换指令,根据所述任务切换指令从所述任务列表中选取第二任务;
根据所述第二任务的函数地址为所述调试结构体的第三成员赋值,
根据所述第三成员的值为上述目标内核的程序计数器PC赋值,从而执行任务切换;
其中,所述第三成员用于保存待切换任务的函数地址。
7.根据权利要求6所述的调试方法,其特征在于,若所述任务切换指令指示在所述执行任务切换后继续执行所述第一任务,所述方法还包括:
在获取所述任务列表之后,将所述当前任务控制块对应的第一任务的函数地址赋值给第四成员;
其中,所述第四成员用于保存被切换任务的函数地址。
8.根据权利要求7所述的调试方法,其特征在于,所述方法还包括:
在完成所述任务切换后退出所述调试模式,并控制所述目标内核执行所述第二任务;以及
在所述第二任务执行完毕后,判断所述第四成员的内容是否为空;其中,
若所述第四成员的内容为空,则控制所述目标内核执行所述嵌入式实时操作系统的预设调度流程;
若所述第四成员的内容非空,则控制所述目标内核恢复现场寄存器中的值,并继续执行所述第一任务;
其中,所述现场寄存器中的值是所述目标内核进入所述调试模式时所保存的浮点寄存器与通用寄存器中的值。
9.根据权利要求1所述的调试方法,其特征在于,还包括:
在进入所述调试模式时,按照预设的第一核心序列控制所述多核处理器中的每一个内核依次暂停运行;以及,
在退出所述调试模式时,按照预设的第二核心序列依次重启所述多核处理器中的每一个内核;
其中,所述第一核心序列与所述第二核心序列互为倒序。
10.一种嵌入式实时操作系统的调试装置,应用于多核处理器,其特征在于,所述装置包括:
调试启动模块,用于控制所述多核处理器中的目标内核进入调试模式;
任务获取模块,用于通过访问预设的调试结构体的成员,得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态,并将所述任务列表以及所述每一个任务的运行状态展示于调试界面上;其中,所述调试结构体包括用于保存所述目标内核的任务列表以及所述每一个任务的运行状态的引用指令。
11.根据权利要求10所述的调试装置,其特征在于,所述预设的调试结构体包含多个结构体成员,所述多个结构体成员包括:指向所述多核处理器中每一个内核的任务池的指针、指向所述每一个内核的当前任务控制块的指针。
12.根据权利要求11所述的调试装置,其特征在于,
所述调试启动模块用于:
通过JTAG接口向所述目标内核发起中断指令;
控制所述目标内核保存现场寄存器的值;
将所述目标内核的所述当前任务控制块的状态变更为调试状态。
13.根据权利要求12所述的调试装置,其特征在于,若在得到所述目标内核的任务列表与所述任务列表中每一个任务的运行状态之后退出所述调试模式,所述装置还包括调试关闭模块,用于:
将所述目标内核的所述当前任务控制块的状态恢复为运行状态;
控制所述目标内核恢复所述现场寄存器的值;
控制所述目标内核继续运行所述当前任务。
14.根据权利要求11所述的调试装置,其特征在于,
所述任务获取模块,用于:
通过读取所述调试结构体的第一成员与第二成员,获取所述目标内核的任务池的地址,以及获取所述目标内核的当前任务控制块的地址;
通过访问所述目标内核的任务池,获取所述目标内核的任务列表;
通过访问所述目标内核的当前任务控制块的地址,获取所述目标内核正在运行的第一任务,并根据所述第一任务获取所述任务列表中每一个任务的运行状态;
其中,所述第一成员为指向所述目标内核的任务池的指针、所述第二成员为指向所述目标内核的当前任务控制块的指针。
15.根据权利要求14所述的调试装置,其特征在于,所述装置还包括任务切换模块,在所述通过访问预设的调试结构体的成员,获得所述目标内核的任务列表与所述任务列表中每一个任务的运行状态之后,用于:
接收任务切换指令,根据所述任务切换指令从所述任务列表中选取第二任务;
根据所述第二任务的函数地址为所述调试结构体的第三成员赋值,
根据所述第三成员的值为上述目标内核的程序计数器PC赋值,从而执行任务切换;
其中,所述第三成员用于保存待切换任务的函数地址。
16.根据权利要求15所述的调试装置,其特征在于,若所述任务切换指令指示在所述执行任务切换后继续执行所述第一任务,所述任务切换模块进一步用于:
在获取所述任务列表之后,将所述当前任务控制块对应的第一任务的函数地址赋值给第四成员;
其中,所述第四成员用于保存被切换任务的函数地址。
17.根据权利要求16所述的调试装置,其特征在于,所述任务切换模块进一步用于:
在完成所述任务切换后退出所述调试模式,并控制所述目标内核执行所述第二任务;以及
在所述第二任务执行完毕后,判断所述第四成员的内容是否为空;其中,
若所述第四成员的内容为空,则控制所述目标内核执行所述嵌入式实时操作系统的预设调度流程;
若所述第四成员的内容非空,则控制所述目标内核恢复现场寄存器中的值,并继续执行所述第一任务;
其中,所述现场寄存器中的值是所述目标内核进入所述调试模式时所保存的浮点寄存器与通用寄存器中的值。
18.根据权利要求10所述的调试装置,其特征在于,所述装置还用于:
在进入所述调试模式时,按照预设的第一核心序列控制所述多核处理器中的每一个内核依次暂停运行;以及,
在退出所述调试模式时,按照预设的第二核心序列依次重启所述多核处理器中的每一个内核;
其中,所述第一核心序列与所述第二核心序列互为倒序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910038736.0A CN109800166B (zh) | 2019-01-16 | 2019-01-16 | 一种嵌入式实时操作系统的调试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910038736.0A CN109800166B (zh) | 2019-01-16 | 2019-01-16 | 一种嵌入式实时操作系统的调试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109800166A CN109800166A (zh) | 2019-05-24 |
CN109800166B true CN109800166B (zh) | 2022-06-14 |
Family
ID=66559394
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910038736.0A Active CN109800166B (zh) | 2019-01-16 | 2019-01-16 | 一种嵌入式实时操作系统的调试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109800166B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124792A (zh) * | 2019-12-20 | 2020-05-08 | 北京东土科技股份有限公司 | 一种多核调试方法、装置及存储介质 |
CN116383091B (zh) * | 2023-05-29 | 2023-08-29 | 珠海妙存科技有限公司 | eMMC验证平台的启动方法、启动装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154183A (zh) * | 2006-09-29 | 2008-04-02 | 上海海尔集成电路有限公司 | 一种微控制器嵌入式在线仿真调试系统 |
CN101482848A (zh) * | 2009-02-03 | 2009-07-15 | 中兴通讯股份有限公司 | 一种在嵌入式软件运行状态下的动态调试方法及系统 |
CN102426548A (zh) * | 2011-11-03 | 2012-04-25 | 华为技术有限公司 | 嵌入式系统的调试方法、调试器和调试系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9038070B2 (en) * | 2004-09-14 | 2015-05-19 | Synopsys, Inc. | Debug in a multicore architecture |
-
2019
- 2019-01-16 CN CN201910038736.0A patent/CN109800166B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154183A (zh) * | 2006-09-29 | 2008-04-02 | 上海海尔集成电路有限公司 | 一种微控制器嵌入式在线仿真调试系统 |
CN101482848A (zh) * | 2009-02-03 | 2009-07-15 | 中兴通讯股份有限公司 | 一种在嵌入式软件运行状态下的动态调试方法及系统 |
CN102426548A (zh) * | 2011-11-03 | 2012-04-25 | 华为技术有限公司 | 嵌入式系统的调试方法、调试器和调试系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109800166A (zh) | 2019-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3866007B1 (en) | Intelligent gpu scheduling in a virtualization environment | |
Huang et al. | ShuffleDog: characterizing and adapting user-perceived latency of android apps | |
EP3039540B1 (en) | Virtual machine monitor configured to support latency sensitive virtual machines | |
US8136097B2 (en) | Thread debugging device, thread debugging method and information storage medium | |
CN109726135B (zh) | 一种多核调试方法、装置及计算机可读存储介质 | |
US10970129B2 (en) | Intelligent GPU scheduling in a virtualization environment | |
US8612937B2 (en) | Synchronously debugging a software program using a plurality of virtual machines | |
US20110072309A1 (en) | Debugger for Multicore System | |
EP1766518B1 (en) | Adaptive algorithm for selecting a virtualization algorithm in virtual machine environments | |
US11157302B2 (en) | Idle processor management in virtualized systems via paravirtualization | |
US9632842B2 (en) | Exclusive access control method prohibiting attempt to access a shared resource based on average number of attempts and predetermined threshold | |
CN102567090B (zh) | 在计算机处理器中创建执行线程的方法和系统 | |
WO2022227410A1 (zh) | 一种嵌入式终端远程软件调试方法 | |
JP2010015534A (ja) | マルチコアマイコンシステムのシミュレーション方法及びシミュレーション装置 | |
CN109800166B (zh) | 一种嵌入式实时操作系统的调试方法及装置 | |
US20040098722A1 (en) | System, method, and computer program product for operating-system task management | |
CN114637536A (zh) | 任务处理方法、计算协处理器、芯片及计算机设备 | |
EP2672388B1 (en) | Multi-processor parallel simulation method, system and scheduler | |
CN114968567A (zh) | 用于分配计算节点的计算资源的方法、装置和介质 | |
CN115048145B (zh) | 一种信息采集方法、装置及相关设备 | |
CN113032154B (zh) | 一种虚拟cpu的调度方法、装置、电子设备及存储介质 | |
CN115390992A (zh) | 一种虚拟机创建方法、装置、设备和存储介质 | |
JP2012123726A (ja) | シミュレーション装置及びシミュレーションプログラム | |
CN112579460B (zh) | 一种基于多核嵌入式系统的多级调试方法 | |
Gangqiang | The debug environment of TI-RTOS based on beaglebone black |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20201203 Address after: Room 206, 2 / F, building C, phase I, Zhongguancun Software Park, No. 8, Dongbei Wangxi Road, Haidian District, Beijing 100094 Applicant after: Canaan Bright Sight Co.,Ltd. Address before: 310000, room 12, building 4, building nine, No. nine, 1203 Ring Road, Hangzhou, Zhejiang, Jianggan District Applicant before: Hangzhou Canaan Creative Information Technology Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |