一种嵌入式操作系统的多任务程序指定任务调试方法技术方案

技术编号:28469939 阅读:14 留言:0更新日期:2021-05-15 21:37
本发明专利技术公开了一种嵌入式操作系统的多任务程序指定任务调试方法,操作系统在任务创建、任务删除、任务切换时,更新其维护的任务列表信息,并且在任务切换时,保存当前执行任务的任务栈栈底指针;用户给指定任务中的待调试函数设置断点,调试器软件在操作系统停止时获取其保存的任务列表信息和当前任务栈栈底指针,将任务列表信息中处于执行状态的任务ID与用户指定任务的ID进行对比;若相同,则调试器软件根据当前任务栈栈底指针更新当前执行任务的栈信息,并根据调试指令,对指定任务进行调试;若不同,则调试器软件发送继续执行命令后,等待下一次操作系统停止,满足多任务程序指定任务的调试需求。指定任务的调试需求。指定任务的调试需求。

【技术实现步骤摘要】
一种嵌入式操作系统的多任务程序指定任务调试方法


[0001]本专利技术涉及系统调试
,尤其是一种嵌入式操作系统的多任务程序指定任务调试方法。

技术介绍

[0002]软硬件调试是嵌入式系统的开发过程中的重要环节之一。一个高效且强大的调试系统可以大大缩短系统的开发周期,增强产品的竞争力。
[0003]基于开源GDB调试软件和gdbserver调试代理程序的配合,可以实现复杂的远程交叉调试。目标机通过网络或串口接收上位机GDB调试器软件发送的不同调试命令,gdbserver运行在目标机的操作系统上,根据调试命令调用操作系统提供的内部接口,实现不同的调试操作。
[0004]目前,基于标准JTAG协议的在线调试技术仍是嵌入式系统最有效的调试方式。由于嵌入式操作系统的应用领域日益广泛,使其软件规模和复杂性也随之不断增加,嵌入式操作系统支持的多任务应用开发越来越成为主流,这就需要嵌入式软件开发环境中具有一个功能强大的面向应用开发的任务级调试工具。
[0005]针对多任务或多线程应用程序调试方面,基于gdbserver的调试可以很好地满足针对指定线程的相关调试操作。现有的基于标准JTAG协议的嵌入式操作系统多任务调试,基本上能够满足用户对多任务调试的需求,如查看变量、运行停止、单步执行等一般调试操作。然而,在多任务调试过程中,对用户指定的任务进行调试却少有涉及,特别是多个任务调用同一个函数时,无法针对指定任务对该函数进行调试,给用户调试带来了不便,降低了程序调试效率及开发效率。

技术实现思路
r/>[0006]针对现有嵌入式操作系统多任务调试中存在的不足之处,本专利技术提出一种嵌入式操作系统的多任务程序指定任务调试方法。
[0007]一种嵌入式操作系统的多任务程序指定任务调试方法,操作系统维护执行任务的相关信息,相关信息包括任务列表信息、任务个数、任务ID、任务状态;
[0008]操作系统在任务创建、任务删除、任务切换时,更新其维护的任务列表信息,并且在任务切换时,保存当前执行任务的任务栈栈底指针;
[0009]用户通过上位机调试器软件提供的接口,给指定任务中的待调试函数设置断点,调试器软件在操作系统停止时获取其保存的任务列表信息和当前任务栈栈底指针,将任务列表信息中处于执行状态的任务ID与用户指定任务的ID进行对比;
[0010]若相同,则表明当前执行任务即为用户指定任务,调试器软件根据当前任务栈栈底指针更新当前执行任务的栈信息,并根据调试指令,对指定任务进行调试;
[0011]若不同,则表明当前执行任务并非用户指定任务,调试器软件发送继续执行命令后,等待下一次操作系统停止。
[0012]进一步的,操作系统在任务创建、任务删除、任务切换时,将更新后任务列表信息存入自定义全局变量“_current_task_list”指向的内存空间,并且在任务切换时,将当前执行任务的任务栈栈底指针存入自定义全局变量“_current_stack_base”指向的内存空间;
[0013]在调试过程中,调试器软件首先读取可执行文件的符号表信息,从符号表信息中分别获取“_current_task_list”和“_current_stack_base”指向的内存地址;在操作系统停止时,调试器软件分别从“_current_task_list”和“_current_stack_base”指向的内存地址中,读取当前任务列表信息和当前任务栈栈底指针,存储到调试器软件的内部数据结构中。
[0014]本专利技术通过嵌入式操作系统提供的两个指针(即内存地址)获取操作系统中的任务列表信息和当前任务栈栈底指针,使得调试器软件能够判断操作系统停止时执行的任务是否为指定任务,从而实现指定任务的调试需求。
附图说明
[0015]图1为本专利技术多任务程序指定任务调试方法流程图;
[0016]图2为调试器软件内部流程示意图;
[0017]图3为调试器软件内部当前任务列表信息和当前任务栈栈底指针更新流程示意图;
[0018]图4为操作系统停止时执行任务确认过程示意图。
具体实施方式
[0019]下面结合附图和具体实施方式对本专利技术作进一步详细的说明。本专利技术的实施例是为了示例和描述起见而给出的,而并不是无遗漏的或者将本专利技术限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显而易见的。选择和描述实施例是为了更好说明本专利技术的原理和实际应用,并且使本领域的普通技术人员能够理解本专利技术从而设计适于特定用途的带有各种修改的各种实施例。
[0020]实施例1
[0021]一种嵌入式操作系统的多任务程序指定任务调试方法,如图1所示,操作系统维护执行任务的相关信息,相关信息包括任务列表信息、任务个数、任务ID、任务状态。
[0022]操作系统在任务创建、任务删除、任务切换时,更新其维护的任务列表信息,并且在任务切换时,保存当前执行任务的任务栈栈底指针。
[0023]上位机调试器软件负责根据上述信息,为用户提供可操作的调试功能,如图2所示。用户通过上位机调试器软件提供的接口,给指定任务中的待调试函数设置断点,调试器软件在操作系统停止时获取其保存的任务列表信息和当前任务栈栈底指针,将任务列表信息中处于执行状态的任务ID与用户指定任务的ID进行对比;
[0024]若相同,则表明当前执行任务即为用户指定任务,调试器软件根据当前任务栈栈底指针更新当前执行任务的栈信息,并根据调试指令,对指定任务进行调试;
[0025]若不同,则表明当前执行任务并非用户指定任务,调试器软件发送继续执行命令后,等待下一次操作系统停止。
[0026]通过上述判断保证了只有在指定任务调用该函数时,才根据调试指令,对指定任务进行调试。这样,即便多个任务调用同一个函数,仍然能够针对指定任务对该函数进行调试。
[0027]调试器软件在操作系统停止时获取操作系统保存的任务列表信息和当前任务栈栈底指针的方式如图3所示。操作系统在任务创建、任务删除、任务切换时,将更新后任务列表信息存入自定义全局变量“_current_task_list”指向的内存空间,并且在任务切换时,将当前执行任务的任务栈栈底指针存入自定义全局变量“_current_stack_base”指向的内存空间;调试器软件在操作系统停止时,从“_current_task_list”和“_current_stack_base”指向的内存地址,分别读取当前任务列表信息和当前任务栈栈底指针,存储到调试器软件的内部数据结构中。
[0028]任务列表信息给出当前执行的多任务,当前任务栈栈底指针给出操作系统在停止时执行的任务,如图4所示。当操作系统在停止时执行的任务与指定任务相同时,再根据调试指令,对指定任务进行调试。
[0029]显然,所描述的实施例仅仅是本专利技术的一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域及相关领域的普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种嵌入式操作系统的多任务程序指定任务调试方法,其特征在于,操作系统维护执行任务的相关信息,相关信息包括任务列表信息、任务个数、任务ID、任务状态;操作系统在任务创建、任务删除、任务切换时,更新其维护的任务列表信息,并且在任务切换时,保存当前执行任务的任务栈栈底指针;用户通过上位机调试器软件提供的接口,给指定任务中的待调试函数设置断点,调试器软件在操作系统停止时获取其保存的任务列表信息和当前任务栈栈底指针,将任务列表信息中处于执行状态的任务ID与用户指定任务的ID进行对比;若相同,则表明当前执行任务即为用户指定任务,调试器软件根据当前任务栈栈底指针更新当前执行任务的栈信息,并根据调试指令,对指定任务进行调试;若不同,则表明当前执行任务并非用户指定任务,调试器软件发送继续执行命令后,等待下一次操作系统停止。2.根据权利要...

【专利技术属性】
技术研发人员:赵纪堂林广栋耿锐陈金忠
申请(专利权)人:安徽芯纪元科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1