CN112799816B - 一种嵌入式操作系统的多任务程序指定任务调试方法 - Google Patents
一种嵌入式操作系统的多任务程序指定任务调试方法 Download PDFInfo
- Publication number
- CN112799816B CN112799816B CN202110134816.3A CN202110134816A CN112799816B CN 112799816 B CN112799816 B CN 112799816B CN 202110134816 A CN202110134816 A CN 202110134816A CN 112799816 B CN112799816 B CN 112799816B
- Authority
- CN
- China
- Prior art keywords
- task
- current
- operating system
- stack
- debugger software
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种嵌入式操作系统的多任务程序指定任务调试方法,操作系统在任务创建、任务删除、任务切换时,更新其维护的任务列表信息,并且在任务切换时,保存当前执行任务的任务栈栈底指针;用户给指定任务中的待调试函数设置断点,调试器软件在操作系统停止时获取其保存的任务列表信息和当前任务栈栈底指针,将任务列表信息中处于执行状态的任务ID与用户指定任务的ID进行对比;若相同,则调试器软件根据当前任务栈栈底指针更新当前执行任务的栈信息,并根据调试指令,对指定任务进行调试;若不同,则调试器软件发送继续执行命令后,等待下一次操作系统停止,满足多任务程序指定任务的调试需求。
Description
技术领域
本发明涉及系统调试技术领域,尤其是一种嵌入式操作系统的多任务程序指定任务调试方法。
背景技术
软硬件调试是嵌入式系统的开发过程中的重要环节之一。一个高效且强大的调试系统可以大大缩短系统的开发周期,增强产品的竞争力。
基于开源GDB调试软件和gdbserver调试代理程序的配合,可以实现复杂的远程交叉调试。目标机通过网络或串口接收上位机GDB调试器软件发送的不同调试命令,gdbserver运行在目标机的操作系统上,根据调试命令调用操作系统提供的内部接口,实现不同的调试操作。
目前,基于标准JTAG协议的在线调试技术仍是嵌入式系统最有效的调试方式。由于嵌入式操作系统的应用领域日益广泛,使其软件规模和复杂性也随之不断增加,嵌入式操作系统支持的多任务应用开发越来越成为主流,这就需要嵌入式软件开发环境中具有一个功能强大的面向应用开发的任务级调试工具。
针对多任务或多线程应用程序调试方面,基于gdbserver的调试可以很好地满足针对指定线程的相关调试操作。现有的基于标准JTAG协议的嵌入式操作系统多任务调试,基本上能够满足用户对多任务调试的需求,如查看变量、运行停止、单步执行等一般调试操作。然而,在多任务调试过程中,对用户指定的任务进行调试却少有涉及,特别是多个任务调用同一个函数时,无法针对指定任务对该函数进行调试,给用户调试带来了不便,降低了程序调试效率及开发效率。
发明内容
针对现有嵌入式操作系统多任务调试中存在的不足之处,本发明提出一种嵌入式操作系统的多任务程序指定任务调试方法。
一种嵌入式操作系统的多任务程序指定任务调试方法,操作系统维护执行任务的相关信息,相关信息包括任务列表信息、任务个数、任务ID、任务状态;
操作系统在任务创建、任务删除、任务切换时,更新其维护的任务列表信息,并且在任务切换时,保存当前执行任务的任务栈栈底指针;
用户通过上位机调试器软件提供的接口,给指定任务中的待调试函数设置断点,调试器软件在操作系统停止时获取其保存的任务列表信息和当前任务栈栈底指针,将任务列表信息中处于执行状态的任务ID与用户指定任务的ID进行对比;
若相同,则表明当前执行任务即为用户指定任务,调试器软件根据当前任务栈栈底指针更新当前执行任务的栈信息,并根据调试指令,对指定任务进行调试;
若不同,则表明当前执行任务并非用户指定任务,调试器软件发送继续执行命令后,等待下一次操作系统停止。
进一步的,操作系统在任务创建、任务删除、任务切换时,将更新后任务列表信息存入自定义全局变量“_current_task_list”指向的内存空间,并且在任务切换时,将当前执行任务的任务栈栈底指针存入自定义全局变量“_current_stack_base”指向的内存空间;
在调试过程中,调试器软件首先读取可执行文件的符号表信息,从符号表信息中分别获取“_current_task_list”和“_current_stack_base”指向的内存地址;在操作系统停止时,调试器软件分别从“_current_task_list”和“_current_stack_base”指向的内存地址中,读取当前任务列表信息和当前任务栈栈底指针,存储到调试器软件的内部数据结构中。
本发明通过嵌入式操作系统提供的两个指针(即内存地址)获取操作系统中的任务列表信息和当前任务栈栈底指针,使得调试器软件能够判断操作系统停止时执行的任务是否为指定任务,从而实现指定任务的调试需求。
附图说明
图1为本发明多任务程序指定任务调试方法流程图;
图2为调试器软件内部流程示意图;
图3为调试器软件内部当前任务列表信息和当前任务栈栈底指针更新流程示意图;
图4为操作系统停止时执行任务确认过程示意图。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细的说明。本发明的实施例是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显而易见的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。
实施例1
一种嵌入式操作系统的多任务程序指定任务调试方法,如图1所示,操作系统维护执行任务的相关信息,相关信息包括任务列表信息、任务个数、任务ID、任务状态。
操作系统在任务创建、任务删除、任务切换时,更新其维护的任务列表信息,并且在任务切换时,保存当前执行任务的任务栈栈底指针。
上位机调试器软件负责根据上述信息,为用户提供可操作的调试功能,如图2所示。用户通过上位机调试器软件提供的接口,给指定任务中的待调试函数设置断点,调试器软件在操作系统停止时获取其保存的任务列表信息和当前任务栈栈底指针,将任务列表信息中处于执行状态的任务ID与用户指定任务的ID进行对比;
若相同,则表明当前执行任务即为用户指定任务,调试器软件根据当前任务栈栈底指针更新当前执行任务的栈信息,并根据调试指令,对指定任务进行调试;
若不同,则表明当前执行任务并非用户指定任务,调试器软件发送继续执行命令后,等待下一次操作系统停止。
通过上述判断保证了只有在指定任务调用该函数时,才根据调试指令,对指定任务进行调试。这样,即便多个任务调用同一个函数,仍然能够针对指定任务对该函数进行调试。
调试器软件在操作系统停止时获取操作系统保存的任务列表信息和当前任务栈栈底指针的方式如图3所示。操作系统在任务创建、任务删除、任务切换时,将更新后任务列表信息存入自定义全局变量“_current_task_list”指向的内存空间,并且在任务切换时,将当前执行任务的任务栈栈底指针存入自定义全局变量“_current_stack_base”指向的内存空间;调试器软件在操作系统停止时,从“_current_task_list”和“_current_stack_base”指向的内存地址,分别读取当前任务列表信息和当前任务栈栈底指针,存储到调试器软件的内部数据结构中。
任务列表信息给出当前执行的多任务,当前任务栈栈底指针给出操作系统在停止时执行的任务,如图4所示。当操作系统在停止时执行的任务与指定任务相同时,再根据调试指令,对指定任务进行调试。
显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域及相关领域的普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
Claims (1)
1.一种嵌入式操作系统的多任务程序指定任务调试方法,其特征在于,操作系统维护执行任务的相关信息,相关信息包括任务列表信息、任务个数、任务ID、任务状态;
操作系统在任务创建、任务删除、任务切换时,更新其维护的任务列表信息,并且在任务切换时,保存当前执行任务的任务栈栈底指针;
用户通过上位机调试器软件提供的接口,给指定任务中的待调试函数设置断点,调试器软件在操作系统停止时获取其保存的任务列表信息和当前任务栈栈底指针,将任务列表信息中处于执行状态的任务ID与用户指定任务的ID进行对比;
若相同,则表明当前执行任务即为用户指定任务,调试器软件根据当前任务栈栈底指针更新当前执行任务的栈信息,并根据调试指令,对指定任务进行调试;
若不同,则表明当前执行任务并非用户指定任务,调试器软件发送继续执行命令后,等待下一次操作系统停止;
操作系统在任务创建、任务删除、任务切换时,将更新后任务列表信息存入自定义全局变量“_current_task_list”指向的内存空间,并且在任务切换时,将当前执行任务的任务栈栈底指针存入自定义全局变量“_current_stack_base”指向的内存空间;
在调试过程中,调试器软件首先读取可执行文件的符号表信息,从符号表信息中分别获取“_current_task_list”和“_current_stack_base”指向的内存地址;在操作系统停止时,调试器软件再分别从“_current_task_list”和“_current_stack_base”指向的内存地址中,读取当前任务列表信息和当前任务栈栈底指针,存储到调试器软件的内部数据结构中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110134816.3A CN112799816B (zh) | 2021-02-01 | 2021-02-01 | 一种嵌入式操作系统的多任务程序指定任务调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110134816.3A CN112799816B (zh) | 2021-02-01 | 2021-02-01 | 一种嵌入式操作系统的多任务程序指定任务调试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112799816A CN112799816A (zh) | 2021-05-14 |
CN112799816B true CN112799816B (zh) | 2023-03-31 |
Family
ID=75813302
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110134816.3A Active CN112799816B (zh) | 2021-02-01 | 2021-02-01 | 一种嵌入式操作系统的多任务程序指定任务调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112799816B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1645339A (zh) * | 2005-01-31 | 2005-07-27 | 浙江大学 | 在嵌入式系统模拟器上调试应用程序的方法 |
CN102346708A (zh) * | 2010-08-03 | 2012-02-08 | 中兴通讯股份有限公司 | 一种调试器及其调试方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5802368A (en) * | 1995-09-29 | 1998-09-01 | Informix Software, Inc. | Dynamic Library Task Switching |
CA2211505C (en) * | 1997-07-25 | 2002-02-05 | Ibm Canada Limited-Ibm Canada Limitee | Setting instance breakpoints in object oriented computer programs |
CN102945202B (zh) * | 2012-10-15 | 2015-12-16 | 中国科学院软件研究所 | 一种基于代理的rtems系统调试方法 |
CN106326066B (zh) * | 2015-07-07 | 2019-04-26 | 北京东土科技股份有限公司 | 一种嵌入式系统任务响应性能的监测调整的方法及其系统 |
CN109684202B (zh) * | 2018-11-27 | 2022-06-17 | 国电南瑞科技股份有限公司 | 一种在应用中调试嵌入式系统程序中函数功能的方法 |
-
2021
- 2021-02-01 CN CN202110134816.3A patent/CN112799816B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1645339A (zh) * | 2005-01-31 | 2005-07-27 | 浙江大学 | 在嵌入式系统模拟器上调试应用程序的方法 |
CN102346708A (zh) * | 2010-08-03 | 2012-02-08 | 中兴通讯股份有限公司 | 一种调试器及其调试方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112799816A (zh) | 2021-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6901535B2 (en) | Information processing apparatus, defect analysis program, and defect analysis method | |
US10191835B2 (en) | Multi-threaded debugger support | |
US8136097B2 (en) | Thread debugging device, thread debugging method and information storage medium | |
JP2011070256A (ja) | デバッガおよびプログラム | |
CN114064152B (zh) | 基于动态加载的嵌入式多核调试系统及其调试方法 | |
CN101482848A (zh) | 一种在嵌入式软件运行状态下的动态调试方法及系统 | |
US20100153786A1 (en) | Processor, multiprocessor, and debugging method | |
CN112799816B (zh) | 一种嵌入式操作系统的多任务程序指定任务调试方法 | |
WO2022100033A1 (zh) | 调试小程序的方法、装置、电子设备和存储介质 | |
KR101027005B1 (ko) | 시각적 디버깅 장치 및 방법 | |
CN104102482A (zh) | 一种嵌入式系统的控制台串口与应用串口复用方法及应用 | |
CN112579460B (zh) | 一种基于多核嵌入式系统的多级调试方法 | |
CN112743260A (zh) | 机器人焊接控制方法、机器人焊接控制设备及存储介质 | |
WO2022194090A1 (zh) | 一种多语言混合调试方法及装置 | |
JP2009223471A (ja) | シミュレーション・システム | |
CN112559336A (zh) | 自适应调试异构计算芯片的方法、装置、系统及主板芯片 | |
JP2006293560A (ja) | デバッグシステムおよびデバッグ方法 | |
JPS63177231A (ja) | 並列プログラムデバグ方式 | |
CN117971652A (zh) | Tornado软件加载执行测试程序的批处理方法 | |
CN115080443A (zh) | 一种基于rpa远程调试的方法、装置、设备及介质 | |
KR100538282B1 (ko) | 체크 포인트를 이용한 실시간 병렬 프로그램 디버깅 방법 | |
JP2002244883A (ja) | デバッグ支援装置、デバッグ支援方法及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体 | |
CN114489961A (zh) | 通用的fpga任务调度方法及装置 | |
JP2005235047A (ja) | 電源瞬断デバッグ装置およびその方法を実現するためのプログラムを記録した記録媒体 | |
JPH02118733A (ja) | タスクの実行制御方式 |
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 |