实时多任务下死循环的处理方法技术

技术编号:2880351 阅读:175 留言:0更新日期:2012-04-11 18:40
一种实时多任务下死循环的处理方法,适用于通信系统运行中在多任务环境下的程序调试,包括下述步骤:使用通信调试系统提供的时钟监视一个任务是否陷入死循环或超常时间运行;当发现某个任务陷入死循环或超常时间运行时,把发生超时的任务挂起;对挂起的超时任务进行调试。本发明专利技术有效地解决了程序陷入死循环的问题,可使程序员能快速判断通信信道中死循环或超时运行的发生及发生位置。(*该技术在2021年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术涉及通信调试方法,特别涉及。现在的实时多任务系统(如VxWorks和PSOS)的调试方法一般如附图说明图1所示。调试主机通过目标系统服务模块和目标系统的代理通讯,达到控制目标系统运行的目的。这种方式所适用的通讯通道可以是以太网口或串口。图中所示的“代理”实际上也是实时操作系统的一个任务形式,所述“代理”必须及时响应目标系统服务模块的请求。所以,在系统设计时,常常要禁止任务的切换,任何其他任务包括代理都不能运行,但这时应用程序任务发生超时运行或陷入死循环,目标系统服务模块和目标系统就失去联系,而调式人员并不知道运行的目标系统在哪段程序发生了问题。即使在非调试版本运行时发生了死循环,调式人员也必须知道程序运行到了什么地方,但这时应用程序的控制台任务已经得不到运行了,因此,调试员不再能获得所需的信息。因而,按照现有技术的这种调试方法,实际只能靠猜测或不断缩小范围来定位和判定死循环发生的位置,既费时费力,判断和处理问题的效率极为低下。本专利技术的目的是提供一种在,能够快速、准确地判定死循环或超时运行发生及发生位置。为实现上述目的,本专利技术提供的包括以下步骤a)使用系统提供的时钟中断监视一个任务是否陷入死循环或超常时间运行;b)当发现某个任务陷入死循环或超常时间运行时,把发生超时的任务挂起;b)对挂起的超时任务进行调试。使用本专利技术可快速、准确地判定死循环或超时运行发生及发生位置,有效地解决了程序陷入死循环的及时处理问题。由于程序员能立即知道死循环或超时运行发生的位置,为保证信道的畅通提供了必须的条件,在实际的应用中发挥了重要的作用。不管是调试还是正式版本,都经常检测到程序超时运行的情况。本专利技术同时提供超时运行的时间,可以作为程序员去优化设计和编码的依据。图1是现有技术实时调试系统示意图。图2是超时检测和强制挂起原理图。下面结合附图详述本专利技术。如图2所示,假设系统中有两个不同优先级的任务T1和T2在运行,设T1的优先级高,且T1、T2都处于非抢占模式,即如果T2不主动让出CPU的话,T1是永远得不到执行的,反之亦然。上图即显示了T2在发生超时的情况下,本方法如何探测、强制挂起T2。时钟中断定时、均匀地产生于时刻t0,t1,t2,t3,t4,t5,...,tn,...,并调用本方法安装的时钟中断服务程序ISR。在时刻tn,设监视到的信息(当前任务,起始时刻,当前时刻,运行时间)=(T2,t4,tn,tn-t4)。T2为当前正执行的任务,t4为T2开始执行时的时刻,T2和t4在任务切换入T2时记录(任务切换时系统要调用本方法安装的任务切换钩函数hook,并传入被切换的任务标识,要切换去的任务标识)。在tn时刻的时钟中断里,判断tn-t4已大于等于设定的极限值TMAX,所以T2已超时运行了,调用实时操作系统提供的任务挂起函数把T2挂起,并输出提示信息。其他任务如T1就可以执行了。这时启动调试器就可以看到T2超时运行发生在哪个地方,立即就定位到这样的程序错误。用SystemTime表示系统的时钟,它是不断更新的。当某一任务被调度到开始运行时,这时的系统时间是该任务本次运行的起始时刻,用BeginTime记住,任务的标识用Tid记住。每个时钟中断到来时,任务Tid连续一次运行的时间t就是SystemTime-BeginTime。当t超过预定的最大时间TMAX时,就断定任务Tid运行超时了,然后把任务Tid强制挂起。如果发生了任务切换,则Tid和BeginTime都要被更新,它们始终记住的是当前任务的值。下面对实现时的三个关键点加以详细阐述。(1)安装时钟中断服务程序ISR和任务切换钩函数hook让自己的ISR在时钟中断到来时能被运行。例如,在VxWorks和PSOS实时操作系统中,在BSP(板支持系统程序包)里可以作到。如何知道实时系统发生了任务切换以及从哪个任务切换到哪个任务?例如,在VxWorks实时操作系统中,可调用函数taskSwitchHookAdd()做到。例如,在PSOS实时操作系统中,在config.h文件里可以连接自己的任务切换钩函数。到任务发生切换时,系统都会调用已连接的的钩函数,并带入新旧任务的标识。(2)任务切换钩函数hook监视任务的切换如前所述,此时要更新需要监视的任务的标识Tid,和该任务本次运行的起始时刻BeginTime。需要注意的是,对最低优先级任务(如空闲任务)不要监控,因为最低优先级任务运行时间长一般是正常的。在这个函数中,还可以统计各任务运行的实际时间状况。(3)时钟中断服务程序做超时检测和挂起处理如前所述,当前任务连续一次运行的时间t=SystemTime-BeginTime。如果t>TMAX,就表示该任务超长时间运行,挂起当前任务Tid,实时操作系统就可以调度其他任务运行,调试就可以继续了。挂起调用在中断里是可以使用的。挂起调用一般是多任务操作系统提供的一个系统调用。挂起时要输出提示信息,包含Tid和任务名称,方便调试。权利要求1.一种,包括步骤a)使用系统提供的时钟中断监视一个任务是否陷入死循环或超常时间运行;b)当发现某个任务陷入死循环或超常时间运行时,把发生超时的任务挂起;c)对挂起的超时任务进行调试。2.按权利要求1所述的方法,其特征在于每个时钟中断到来时,任务Tid连续一次运行的时间t=SystemTime-Begin Time,当t超过预定的最大时间TMAX时,断定任务Tid运行超时。3.按权利要求1所述的方法,其特征在于在系统中安装时钟终端服务程序ISR和任务切换钩函数HOOK。4.按权利要求1所述的方法,其特征在于挂起调用是多任务操作系统提供的一个系统调用。5.按权利要求1所述的方法,其特征在于挂起调用可以在中断里使用。6.按权利要求3所述的方法,其特征在于当任务发生切换时,系统调用已连接的钩函数。7.按权利要求3所述的方法,其特征在于任务切换钩函数不监视最低优先级任务。8.按权利要求1或4所述的方法,其特征在于挂起时输出提示信息、任务标识、任务名称。全文摘要一种,适用于通信系统运行中在多任务环境下的程序调试,包括下述步骤:使用通信调试系统提供的时钟监视一个任务是否陷入死循环或超常时间运行;当发现某个任务陷入死循环或超常时间运行时,把发生超时的任务挂起;对挂起的超时任务进行调试。本专利技术有效地解决了程序陷入死循环的问题,可使程序员能快速判断通信信道中死循环或超时运行的发生及发生位置。文档编号G06F9/40GK1377148SQ0111252公开日2002年10月30日 申请日期2001年3月27日 优先权日2001年3月27日专利技术者毛雪峰 申请人:华为技术有限公司 本文档来自技高网...

【技术保护点】
一种实时多任务下死循环的处理方法,包括步骤: a)使用系统提供的时钟中断监视一个任务是否陷入死循环或超常时间运行; b)当发现某个任务陷入死循环或超常时间运行时,把发生超时的任务挂起; c)对挂起的超时任务进行调试。

【技术特征摘要】

【专利技术属性】
技术研发人员:毛雪峰
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:94[中国|深圳]

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

1