CN1235142C - 嵌入式软件任务死循环监控方法 - Google Patents
嵌入式软件任务死循环监控方法 Download PDFInfo
- Publication number
- CN1235142C CN1235142C CN 02128400 CN02128400A CN1235142C CN 1235142 C CN1235142 C CN 1235142C CN 02128400 CN02128400 CN 02128400 CN 02128400 A CN02128400 A CN 02128400A CN 1235142 C CN1235142 C CN 1235142C
- Authority
- CN
- China
- Prior art keywords
- task
- endless loop
- call stack
- message
- context
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明属于计算机操作系统任务管理技术领域,涉及嵌入式软件任务死循环监控方法。主要包括;启动硬件定时器,硬件定时器的中断服务例程检测各任务处理各自消息的时间;若某个任务对一个消息的处理时间超过了预先规定的阈值,则认为该任务发生了死循环;将中断上下文转换成任务上下文;在任务上下文中获得该任务的调用栈信息,并输出调用栈。本发明可解决在中断上下文中检测出来任务死循环后,给出该任务的调用栈,为分析出发生死循环的精确位置提供了可靠的依据。
Description
技术领域
本发明属于计算机操作系统任务管理技术领域,特别涉及嵌入式软件任务死循环监控方法。
背景技术
在开发嵌入式软件过程中,任务的跟踪、监控一直是嵌入式操作系统任务管理的重点和难点,也是影响一个嵌入式软件开发周期的关键因素。软件在开发整个过程中,由于这样或那样的原因,有时一个任务在处理一个消息时,导致进入死循环,进而不能再对其它消息进行处理,这给开发人员造成很大的定位困难。这就要求软件开发者使用的嵌入式操作系统(或虚拟操作系统)能够提供高效、准确的任务监控的方法。但遗憾的是目前使用的嵌入式操作系统都没有提供这样的功能。
已有的嵌入式软件死循环监控的实现方法,主要是启动一个看门狗定时器,该看门狗定时器的中断服务例程不断地检查每个任务对各自消息的处理,若某任务对一个消息的处理时间超过规定的一个最大的阈值,则认为该任务发生了死循环,该方法的具体步骤是:
1)在正在开发的嵌入式软件中创建看门狗定时器;
2)启动看门狗定时器,看门狗定时器的中断服务例程检测每个任务对各自消息的处理,这时系统运行的上下文是在中断状态中;
3)若某个任务对一个消息的处理时间超过了预先规定的阈值,则认为该任务发生了死循环,打印信息通知开发人员该任务进入了死循环。
由于看门狗定时器是中断上下文,当检测出来任务发生死循环时,只能告知某任务发生了死循环,这对死循环问题的精确定位没有多大的实际意义。
发明内容
本发明的目的是为克服已有技术的不足之处,提出一种嵌入式软件任务死循环监控方法,可解决在中断上下文中检测出来任务死循环后,给出该任务的调用栈,为分析出发生死循环的精确位置提供了可靠的依据。
本发明提出的一种嵌入式软件任务死循环监控方法,包括以下步骤:
(1)启动硬件定时器;
(2)系统运行的上下文在中断状态中,该硬件定时器的中断服务例程检测各任务处理各自消息的时间;
(3)判断是否发生死循环,若某个任务对一个消息的处理时间超过了预先规定的阈值,则认为该任务发生了死循环;
(4)将系统运行的中断上下文转换成任务上下文;
(5)在系统的任务上下文中调读调用栈函数并输出。
所述的硬件定时器可以是看门狗定时器。
本发明的工作原理:
由于嵌入式软件编译生成的最终文件一般是ELF文件格式,这种文件中含有非常有用的调试信息,可给出软件运行过程发生了死循环任务的调用栈,有了调用栈,可方便地根据ELF文件的统一格式分析出该调用栈在那些文件及在该文件中的行号。
本发明的特点及效果:
本发明可将中断上下文转换成任务上下文,即可获得调用栈信息。从而可以精确地得到发生死循环时整个软件系统的调用栈,也就是系统发生死循环时的函数间调用关系。利用本方法给出的调用栈,再通过一个分析ELF文件的小工具,则可以分析出死循环发生在代码的哪个文件、哪行,对分析问题具有重要使用价值。
附图说明
图1为本发明方法总体流程图。
图2为本发明的中断上下文转换成任务上下文的方法实施例流程图。
图3为本发明的调读调用栈函数的方法实施例流程图。
具体实施方式
本发明提出了一种嵌入式软件任务死循环监控方法,结合实施例及附图详细说明如下:
本发明方法总体流程如图1所示,包括以下步骤:
(1)启动硬件定时器;
(2)系统运行的上下文在中断状态中,该硬件定时器的中断服务例程检测各任务处理各自消息的时间;
(3)判断是否发生死循环,若某个任务对一个消息的处理时间超过了预先规定的阈值,则认为该任务发生了死循环,进行下一步,否则转回第2)步;
(4)将系统运行的中断上下文转换成任务上下文;
(5)在系统的任务上下文中调读调用栈函数并输出。
上述的硬件定时器可以是看门狗定时器,其中,第4)、5)步骤的实施例详细流程分别详细说明如下:
本实施例的中断上下文转换成任务上下文的方法如图2所示,具体包括以下步骤:
(41)获得发生死循环任务的系统标示;
(42)挂起死循环任务;
(43)申请内存,并填充消息头;
(44)将死循环任务的系统标示写到消息体内;
(45)向调试任务发消息;
(46)运行中的调试任务收到消息后,判断是否是任务死循环的通知消息;
(47)若不是,则转回到(46);
(48)若是,则根据消息中携带的死循环任务的系统标示,调读调用栈的函数。
本实施例的调读调用栈函数的方法实施例如图3所示,具体包括以下步骤:
(51)根据死循环任务的系统标示获得系统通用寄存器的值;
(52)从通用寄存器中获得调用栈的第一层栈指针;
(53)设置循环初始变量i=0(i为调用栈的层号);
(54)输出第i层调用栈;
(55)若i小于最大的调用栈层数(本实施例设定调用栈层数为10)且栈指针不为空时,i加1,取下一层调用栈,转到(54);
(56)否则,结束。
Claims (4)
1、一种嵌入式软件任务死循环监控方法,包括以下步骤:
(1)启动硬件定时器;
(2)系统运行的上下文在中断状态中,该硬件定时器的中断服务例程检测各任务处理各自消息的时间;
(3)判断是否发生死循环,若某个任务对一个消息的处理时间超过了预先规定的阈值,则认为该任务发生了死循环;
(4)将系统运行的中断上下文转换成任务上下文;
(5)在系统的任务上下文中调读调用栈函数并输出。
2、如权利要求1所述的嵌入式软件任务死循环监控方法,其特征在于,所述的步骤(4)包括:
(41)获得发生死循环任务的系统标示;
(42)挂起死循环任务;
(43)申请内存,并填充消息头;
(44)将死循环任务的系统标示写到消息体内;
(45)向调试任务发消息;
(46)运行中的调试任务收到消息后,判断是否是任务死循环的通知消息;
(47)若不是,则转回到(46);
(48)若是,则根据消息中携带的死循环任务的系统标示,调读调用栈的函数。
3、如权利要求1所述的嵌入式软件任务死循环监控方法,其特征在于,所述的步骤(5),具体包括以下步骤:
(51)根据死循环任务的系统标示获得系统通用寄存器的值;
(52)从通用寄存器中获得调用栈的第一层栈指针;
(53)设置循环初始变量i=0,i为调用栈的层号;
(54)输出第i层调用栈;
(55)若i小于最大的调用栈层数,且栈指针不为空时,i加1,取下一层调用栈,转到(54);
(56)否则,结束。
4、如权利要求1所述的嵌入式软件任务死循环监控方法,其特征在于所述步骤(1)的硬件定时器为看门狗定时器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02128400 CN1235142C (zh) | 2002-08-20 | 2002-08-20 | 嵌入式软件任务死循环监控方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02128400 CN1235142C (zh) | 2002-08-20 | 2002-08-20 | 嵌入式软件任务死循环监控方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1477512A CN1477512A (zh) | 2004-02-25 |
CN1235142C true CN1235142C (zh) | 2006-01-04 |
Family
ID=34143716
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 02128400 Expired - Fee Related CN1235142C (zh) | 2002-08-20 | 2002-08-20 | 嵌入式软件任务死循环监控方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1235142C (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1327349C (zh) * | 2005-06-13 | 2007-07-18 | 浙江大学 | 一种微内核嵌入式实时操作系统的任务级资源管理方法 |
CN100359475C (zh) * | 2005-08-05 | 2008-01-02 | 中兴通讯股份有限公司 | 一种软件运行状态的监控方法 |
CN100369011C (zh) * | 2005-08-15 | 2008-02-13 | 英业达股份有限公司 | 嵌入式装置的检测系统及方法 |
CN100394399C (zh) * | 2006-02-22 | 2008-06-11 | 迈普(四川)通信技术有限公司 | 一种死循环或类死循环任务检测方法 |
US8209683B2 (en) * | 2007-04-17 | 2012-06-26 | International Business Machines Corporation | System and method for probing hypervisor tasks in an asynchronous environment |
CN101639725B (zh) * | 2008-07-31 | 2013-07-17 | 国际商业机器公司 | 指令处理装置、方法及其使用的执行控制装置 |
CN102141947B (zh) * | 2011-03-30 | 2013-04-24 | 东方通信股份有限公司 | 一种对采用嵌入式操作系统的计算机应用系统中异常任务的处理方法及系统 |
CN102902616A (zh) * | 2012-08-23 | 2013-01-30 | Tcl通力电子(惠州)有限公司 | 终端故障记录方法和系统、终端 |
CN102929770B (zh) * | 2012-09-25 | 2015-07-29 | 烽火通信科技股份有限公司 | 嵌入式linux系统用户态任务独占的监测定位方法 |
CN104391754B (zh) * | 2014-10-13 | 2017-08-25 | 北京星网锐捷网络技术有限公司 | 一种任务异常的处理方法及装置 |
CN105427695B (zh) * | 2015-11-03 | 2018-11-02 | 中国农业大学 | 编程类考题自动测评方法和系统 |
CN105388883A (zh) * | 2015-11-05 | 2016-03-09 | 株洲南车时代电气股份有限公司 | 主机插件的运行自检方法和装置 |
CN105760305A (zh) * | 2016-03-09 | 2016-07-13 | 上海博达数据通信有限公司 | 一种linux下的系统实时性监控方法 |
CN107220175B (zh) * | 2017-05-08 | 2020-01-21 | 百富计算机技术(深圳)有限公司 | 应用程序死循环定位方法、装置、计算机设备和存储介质 |
CN111045832B (zh) * | 2019-11-13 | 2022-09-30 | 烽火通信科技股份有限公司 | 一种软件死循环或阻塞监控的方法及系统 |
-
2002
- 2002-08-20 CN CN 02128400 patent/CN1235142C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1477512A (zh) | 2004-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1235142C (zh) | 嵌入式软件任务死循环监控方法 | |
CN1291311C (zh) | 一种执行非标准呼叫/返回的程序代码的装置及方法 | |
CN1129857C (zh) | 多处理器转换装置和主处理器转换方法 | |
CN1260651C (zh) | 用于在爪哇程序中缩短字节代码的编译时间的系统和方法 | |
CN1308826C (zh) | 用于smt处理器上的cpi调度的系统和方法 | |
US8959490B2 (en) | Optimizing heap memory usage | |
Yamamoto et al. | Measuring similarity of large software systems based on source code correspondence | |
CN1975696A (zh) | 用于管理存储器使用的方法和计算设备 | |
CN1264083C (zh) | 用于在执行被转换指令时维持环境的方法和装置 | |
CN101751325A (zh) | 软件运行监控方法 | |
CN101046861A (zh) | 业务流程分析设备 | |
CN101876923A (zh) | 一种用于精确估计嵌入式系统中堆栈需求量的方法 | |
CN1829977A (zh) | 利用一个栈跟踪高速缓存器改善垃圾收集的性能的方法和装置 | |
CN102243596A (zh) | 一种自适应动态代码卸载方法 | |
CN1740973A (zh) | 一种实时任务管理与调度方法 | |
CN1831756A (zh) | 微处理器 | |
US8990532B2 (en) | Method of managing memory in computer system, computer system and memory managing program | |
CN1300681C (zh) | 用于缩短java程序中的类加载处理的系统和方法 | |
CN1834936A (zh) | 耗电量监测系统 | |
US7370327B2 (en) | Method for managing memory resources in a shared memory system | |
CN1684043A (zh) | 计算机文件的实时监控系统和方法 | |
CN1269034C (zh) | 一种嵌入式系统中可执行文件的压缩及其加载方法 | |
CN115659354A (zh) | 电力系统物联网固件多粒度漏洞相似性检测方法和装置 | |
CN1851648A (zh) | 一种嵌入式系统运行时堆栈溢出保护方法 | |
CN1752885A (zh) | 计算机系统及其配置方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20060104 Termination date: 20150820 |
|
EXPY | Termination of patent right or utility model |