一种实现VxWorks任务钩子函数功能的方法及装置与流程

文档序号:15642551发布日期:2018-10-12 22:13阅读:597来源:国知局
一种实现VxWorks任务钩子函数功能的方法及装置与流程

本发明涉及计算机技术领域,尤其涉及一种实现VxWorks任务钩子函数功能的方法及装置。



背景技术:

VxWorks操作系统和Linux操作系统都是嵌入式操作系统,但VxWorks操作系统的源代码是不公开的,且VxWorks操作系统的授权费用较高;而Linux操作系统源代码是公开的,Linux操作系统的使用不需要支付任何授权费用。

由于Linux操作系统的源代码公开,Linux操作系统的使用不需要支付任何授权费用,因此,出于成本的考虑,可以考虑将许多现存的VxWorks操作系统上能够运行的实时任务移植到Linux操作系统上运行。

但是,VxWorks操作系统和Linux操作系统的设计思想和系统架构差异较大,Linux操作系统无法提供在VxWorks操作系统上处理实时任务所需的很多函数,例如,VxWorks任务钩子函数。钩子函数是指一类函数,这类函数在需要时可以动态嵌入源代码,相当于“钩到”源代码上,供操作系统调用。VxWorks任务钩子函数主要包括:任务切换钩子函数、任务创建钩子函数和任务删除钩子函数。任务切换钩子函数可以在任务切换时被调用,以监测当前的任务切换过程;任务创建钩子函数可以在任务创建时被调用,以监测当前的任务创建过程;任务删除钩子函数可以在任务删除时被调用,以监测当前的任务删除过程。

在将VxWorks操作系统上运行的实时任务移植到Linux操作系统上后,为了监测VxWorks任务的切换、创建或删除等过程,一个需要解决的问题是:如何在Linux系统中实现VxWorks任务钩子函数的功能。



技术实现要素:

本发明的实施例提供一种实现VxWorks任务钩子函数功能的方法及装置,可以在Linux系统中实现VxWorks任务钩子函数的功能。

为达到上述目的,本发明的实施例采用如下技术方案:

本发明实施例的第一方面,提供一种实现VxWorks任务钩子函数功能的方法,包括:

定义钩子函数链表,所述钩子函数链表包含N个结点,N≥0;当N≥1时,所述结点的数据域存储有一指定事件的标识,所述结点的指针指向为所述指定事件定义的回调函数,所述指定事件为将VxWorks任务移植到Linux操作系统上执行时,对所述VxWorks任务进行指定处理的事件;

在调用一函数执行第一指定事件时,遍历所述钩子函数链表,以调用为所述第一指定事件定义的回调函数,所述第一指定事件为所述钩子函数链表中任一结点对应的指定事件。

结合第一方面,在第一种可能的实现方式中,所述方法还包括:

当第二指定事件对应的钩子添加函数被调用时,向所述钩子函数链表中添加数据域中存储有所述第二指定事件的标识,且指针指向为所述第二指定事件定义的回调函数的结点;

当第三指定事件对应的钩子删除函数被调用时,从所述钩子函数链表中删除所述第三指定事件所对应的结点,所述第三指定事件为所述钩子函数链表中任一结点对应的指定事件。

结合第一方面,在第二种可能的实现方式中,所述钩子函数链表为任务切换钩子函数链表;

所述第一指定事件为第一VxWorks任务向第二VxWorks任务切换;或者,

所述第一指定事件为第三VxWorks任务向第一Linux任务切换;或者,

所述第一指定事件为第二Linux任务向第四VxWorks任务切换。

结合第一方面,在第三种可能的实现方式中,所述钩子函数链表为任务创建钩子函数链表;

所述第一指定事件为创建第一VxWorks任务。

结合第一方面,在第四种可能的实现方式中,所述钩子函数链表为任务删除钩子函数链表;

所述第一指定事件为删除第一VxWorks任务。

本发明实施例的第二方面,提供一种实现VxWorks任务钩子函数功能的装置,包括:

链表定义模块,用于定义钩子函数链表,所述钩子函数链表包含N个结点,N≥0;当N≥1时,所述结点的数据域存储有一指定事件的标识,所述结点的指针指向为所述指定事件定义的回调函数,所述指定事件为将VxWorks任务移植到Linux操作系统上执行时,对所述VxWorks任务进行指定处理的事件;

函数调用模块,在调用一函数执行第一指定事件时,遍历所述钩子函数链表,以调用为所述第一指定事件定义的回调函数,所述第一指定事件为所述钩子函数链表中任一结点对应的指定事件。

结合第二方面,在第一种可能的实现方式中,所述装置还包括:

结点添加模块,用于当第二指定事件对应的钩子添加函数被调用时,向所述钩子函数链表中添加数据域中存储有所述第二指定事件的标识,且指针指向为所述第二指定事件定义的回调函数的结点;

结点删除模块,用于当第三指定事件对应的钩子删除函数被调用时,从所述钩子函数链表中删除所述第三指定事件所对应的结点,所述第三指定事件为所述钩子函数链表中任一结点对应的指定事件。

结合第二方面,在第二种可能的实现方式中,所述钩子函数链表为任务切换钩子函数链表;

所述第一指定事件为第一VxWorks任务向第二VxWorks任务切换;或者,

所述第一指定事件为第三VxWorks任务向第一Linux任务切换;或者,

所述第一指定事件为第二Linux任务向第四VxWorks任务切换。

结合第二方面,在第三种可能的实现方式中,所述钩子函数链表为任务创建钩子函数链表;

所述第一指定事件为创建第一VxWorks任务。

结合第二方面,在第四种可能的实现方式中,所述钩子函数链表为任务删除钩子函数链表;

所述第一指定事件为删除第一VxWorks任务。

本发明实施例提供的实现VxWorks任务钩子函数功能的方法及装置,通过在Linux系统中定义钩子函数链表,使得链表中的结点的指针指向指定事件定义的回调函数;在调用一函数执行第一指定事件时,可以遍历钩子函数链表,以调用为第一指定事件定义的回调函数。这样,就可以通过遍历钩子函数链表,调用回调函数,以实现对第一指定事件的监测,从而在Linux系统中实现VxWorks任务钩子函数的功能。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种实现VxWorks任务钩子函数功能的方法流程图;

图2为本发明实施例提供的一种实现VxWorks任务钩子函数功能的装置的组成示意图;

图3为本发明实施例提供的另一种实现VxWorks任务钩子函数功能的装置的组成示意图;

图4为本发明实施例提供的另一种实现VxWorks任务钩子函数功能的装置的组成示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

VxWorks操作系统中提供了任务钩子函数(任务切换钩子函数、任务创建钩子函数和任务删除钩子函数),在任务切换、任务创建或任务删除时,可以通过调用任务钩子函数,调用特定的回调函数,以实现对任务切换、任务创建或任务删除过程的监测。而在Linux操作系统中,并没有任务钩子函数的概念,在将VxWorks操作系统上运行的实时任务移植到Linux操作系统上后,为了监测任务切换、任务创建或任务删除过程,需要在Linux系统中模拟实现VxWorks任务钩子函数的功能。

本发明实施例提供一种实现VxWorks任务钩子函数功能的方法,如图1所示,包括:

S101、定义钩子函数链表。

其中,钩子函数链表包含N个结点,N≥0;当N≥1时,结点的数据域存储有一指定事件的标识,结点的指针指向为指定事件定义的回调函数,指定事件为将VxWorks任务移植到Linux操作系统上执行时,对VxWorks任务进行指定处理的事件。

示例性的,指定事件可以为任务切换、任务创建或任务删除。

S102、在调用一函数执行第一指定事件时,遍历钩子函数链表,以调用为第一指定事件定义的回调函数。

其中,第一指定事件为钩子函数链表中任一结点对应的指定事件。例如,第一指定事件可以为任务A向任务B切换,第一指定事件也可以为创建任务A,第一指定事件还可以为删除任务A,其中,任务A、任务B为将VxWorks任务移植到Linux操作系统上的任务。通过调用为第一指定事件定义的回调函数,可以对第一指定事件进行监测。

需要说明的是,当N=0时,钩子函数链表为空,遍历钩子函数链表时,不执行回调函数直接返回。

本发明实施例提供的实现VxWorks任务钩子函数功能的方法,通过在Linux系统中定义钩子函数链表,使得链表中的结点的指针指向指定事件定义的回调函数;在调用一函数执行第一指定事件时,可以遍历钩子函数链表,以调用为第一指定事件定义的回调函数。这样,就可以通过遍历钩子函数链表,调用回调函数,以实现对第一指定事件的监测,从而在Linux系统中实现VxWorks任务钩子函数的功能。

进一步的,在VxWorks系统中,还包括钩子添加函数和钩子删除函数,在钩子添加函数或钩子删除函数被调用时,需要在Linux系统中模拟实现相应的函数功能。

其中,钩子添加函数包括:任务切换钩子添加函数taskSwitchHookAdd(),任务创建钩子添加函数taskCreateHookAdd()和任务删除钩子添加函数taskDeleteHookAdd()。

钩子删除函数包括:任务切换钩子删除函数taskSwitchHookDelete(),任务创建钩子删除函数taskCreateHookDelete()和任务删除钩子删除函数taskDeleteHookDelete()。

具体的,在Linux系统中模拟实现钩子添加函数的功能的方法包括:

当第二指定事件对应的钩子添加函数被调用时,向钩子函数链表中添加数据域中存储有第二指定事件的标识,且指针指向为第二指定事件定义的回调函数的结点。

其中,第二指定事件可以为任务切换、任务创建或任务删除,例如,第二指定事件可以为任务A向任务B切换,第二指定事件也可以为创建任务A,第二指定事件还可以为删除任务A。

在Linux系统中模拟实现钩子删除函数的功能的方法包括:

当第三指定事件对应的钩子删除函数被调用时,从钩子函数链表中删除第三指定事件所对应的结点,第三指定事件为钩子函数链表中任一结点对应的指定事件。

其中,第三指定事件可以为任务切换、任务创建或任务删除,例如,例如,第三指定事件可以为任务A向任务B切换,第三指定事件也可以为创建任务A,第三指定事件还可以为删除任务A。

本发明实施例中,分别以实现VxWorks中的任务切换钩子函数、任务创建钩子函数和任务删除钩子函数的功能为例对本发明实施例中的方法进行说明。

示例性的,实现任务切换钩子函数的功能时,S101中的钩子函数链表为任务切换钩子函数链表;S102中的第一指定事件为第一VxWorks任务向第二VxWorks任务切换,或者,第一指定事件为第三VxWorks任务向第一Linux任务切换,或者,第一指定事件为第二Linux任务向第四VxWorks任务切换。第一VxWorks任务、第二VxWorks任务、第三VxWorks任务、第四VxWorks任务均为将VxWorks操作系统上运行的实时任务移植到Linux操作系统上后任务。

需要说明的是,在定义任务切换钩子函数链表后,还需要定义一个空闲任务,该空闲任务不做任何工作,一直处于睡眠状态,仅仅在任务切换钩子函数的处理中起到占位的作用。

任务切换钩子函数链表中的结点的指针所指向的回调函数的原型为:void taskSwitchHookCallback(structtask_struct*pOldTask,structtask_struct*pNewTask),其中,pOldTask指向任务切换前的任务的任务结构体,pNewTask指向任务切换后的任务的任务结构体。任务结构体用于描述任务的各项属性,如:任务标识、任务名、任务优先级和任务入口函数等。

当第一指定事件为第一VxWorks任务向第二VxWorks任务切换时,pOldTask指向第一VxWorks任务的任务结构体,pNewTask指向第二VxWorks任务的任务结构体。

当第一指定事件为第三VxWorks任务向第一Linux任务切换时,pOldTask指向第三VxWorks任务的任务结构体,pNewTask指向空闲任务的任务结构体。

当第一指定事件为第二Linux任务向第四VxWorks任务切换时,pOldTask指向空闲任务的任务结构体,pNewTask指向第四VxWorks任务的任务结构体。

当第一指定事件为上述三种情况时,在调用任务切换函数TaskSwitch()时,遍历任务切换钩子函数链表,以调用相应的回调函数,然后再执行任务切换,通过调用相应的回调函数,可以对任务切换过程进行监测;当第一指定事件为某一Linux任务向另一Linux任务切换时,不作任何处理,直接执行任务切换。

假设当任务C向任务D切换(即第二指定事件为任务C向任务D切换)时,需要增加一个回调函数,则可以在任务切换钩子添加函数taskSwitchHookAdd()被调用时,在任务切换钩子函数链表中添加一个结点,该结点的数据域存储有任务C向任务D切换的标识,且该结点的指针指向为任务C向任务D切换定义的回调函数。

假设当任务A向任务B切换(即第三指定事件为任务A向任务B切换)时,需要删除一个回调函数,则可以在任务切换钩子删除函数taskSwitchHookDelete()被调用时,删除任务切换钩子函数链表中的一个结点,该结点的数据域存储有任务A向任务B切换的标识,且该结点的指针指向为任务A向任务B切换定义的回调函数。

示例性的,实现任务创建钩子函数的功能时,S101中的钩子函数链表为任务创建钩子函数链表;S102中的第一指定事件为创建第一VxWorks任务。

任务创建钩子函数链表中的结点的指针所指向的回调函数的原型为:void taskCreateHookCallback(structtask_struct*pTask),其中,pTask指向所要创建的任务的任务结构体。任务结构体用于描述任务的各项属性,如:任务标识、任务名、任务优先级和任务入口函数等。

假设创建任务C(即第二指定事件为创建任务C)时,需要增加一个回调函数,则可以在任务创建钩子添加函数taskCreateHookAdd()被调用时,在任务创建钩子函数链表中添加一个结点,该结点的数据域存储有创建任务C的标识,且该结点的指针指向为创建任务C定义的回调函数。

假设创建任务C(即第三指定事件为创建任务C)时,需要删除一个回调函数,则可以在任务创建钩子删除函数taskCreateHookDelete()被调用时,删除任务创建钩子函数链表中的一个结点,该结点的数据域存储有创建任务C的标识,且该结点的指针指向为创建任务C定义的回调函数。

示例性的,实现任务删除钩子函数的功能时,S101中的钩子函数链表为任务删除钩子函数链表;S102中的第一指定事件为删除第一VxWorks任务。

任务删除钩子函数链表中的结点的指针所指向的回调函数的原型为:void taskDeleteHookCallback(structtask_struct*pTask),其中,pTask指向所要删除的任务的任务结构体。任务结构体用于描述任务的各项属性,如:任务标识、任务名、任务优先级和任务入口函数等。

假设删除任务C(即第二指定事件为删除任务C)时,需要增加一个回调函数,则可以在任务删除钩子添加函数taskDeleteHookAdd()被调用时,在任务删除钩子函数链表中添加一个结点,该结点的数据域存储有删除任务C的标识,且该结点的指针指向为删除任务C定义的回调函数。

假设删除任务C(即第三指定事件为创建任务C)时,需要删除一个回调函数,则可以在任务删除钩子删除函数taskDeleteHookDelete()被调用时,删除任务创建钩子函数链表中的一个结点,该结点的数据域存储有删除任务C的标识,且该结点的指针指向为删除任务C定义的回调函数。

本发明实施例提供的实现VxWorks任务钩子函数功能的方法,通过在Linux系统中定义钩子函数链表(包括:任务切换钩子函数链表、任务创建钩子函数链表和任务删除钩子函数链表),使得链表中的结点的指针指向指定事件定义的回调函数;在调用一函数执行第一指定事件时,可以遍历钩子函数链表,以调用为第一指定事件定义的回调函数。这样,就可以通过遍历钩子函数链表,调用回调函数,以实现对第一指定事件的监测(例如,对任务切换过程的监测、对任务创建过程的监测和对任务删除过程的监测),从而在Linux系统中实现VxWorks任务钩子函数的功能。

本发明实施例提供一种实现VxWorks任务钩子函数功能的装置,用以执行如图1所示的方法,如图2所示,该装置包括:链表定义模块21和函数调用模块22。

链表定义模块21,用于定义钩子函数链表,钩子函数链表包含N个结点,N≥0;当N≥1时,结点的数据域存储有一指定事件的标识,结点的指针指向为指定事件定义的回调函数,指定事件为将VxWorks任务移植到Linux操作系统上执行时,对VxWorks任务进行指定处理的事件。

函数调用模块22,在调用一函数执行第一指定事件时,遍历钩子函数链表,以调用为第一指定事件定义的回调函数,第一指定事件为钩子函数链表中任一结点对应的指定事件。

进一步的,如图3所示,该装置还包括:结点添加模块23和结点删除模块24。

结点添加模块23,用于当第二指定事件对应的钩子添加函数被调用时,向钩子函数链表中添加数据域中存储有第二指定事件的标识,且指针指向为第二指定事件定义的回调函数的结点。

结点删除模块24,用于当第三指定事件对应的钩子删除函数被调用时,从钩子函数链表中删除第三指定事件所对应的结点,第三指定事件为钩子函数链表中任一结点对应的指定事件。

在本发明实施例的第一种应用场景中,钩子函数链表为任务切换钩子函数链表。

第一指定事件为第一VxWorks任务向第二VxWorks任务切换;或者,第一指定事件为第三VxWorks任务向第一Linux任务切换;或者,第一指定事件为第二Linux任务向第四VxWorks任务切换。

在本发明实施例的第二种应用场景中,钩子函数链表为任务创建钩子函数链表,第一指定事件为创建第一VxWorks任务。

在本发明实施例的第三种应用场景中,钩子函数链表为任务删除钩子函数链表,第一指定事件为删除第一VxWorks任务。

需要说明的是,本发明实施例提供的实现VxWorks任务钩子函数功能的装置中部分功能模块的具体描述可以参考方法实施例中的对应内容,本实施例这里不再详细赘述。

本发明实施例提供的实现VxWorks任务钩子函数功能的装置,通过在Linux系统中定义钩子函数链表,使得链表中的结点的指针指向指定事件定义的回调函数;在调用一函数执行第一指定事件时,可以遍历钩子函数链表,以调用为第一指定事件定义的回调函数。这样,就可以通过遍历钩子函数链表,调用回调函数,以实现对第一指定事件的监测,从而在Linux系统中实现VxWorks任务钩子函数的功能。

本发明实施例还提供另一种实现VxWorks任务钩子函数功能的装置,用以执行如图1所示的方法,如图4所示,该装置包括:存储器31、处理器32和总线系统33。

其中,存储器31和处理器32之间是通过总线系统33耦合在一起的,其中总线系统33除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图4中将各种总线都标为总线系统33。

存储器31,用于存储一组代码。

处理器32,用以执行存储器31存储的代码,并具体用于执行以下操作:定义钩子函数链表,钩子函数链表包含N个结点,N≥0;当N≥1时,结点的数据域存储有一指定事件的标识,结点的指针指向为指定事件定义的回调函数,指定事件为将VxWorks任务移植到Linux操作系统上执行时,对VxWorks任务进行指定处理的事件;在调用一函数执行第一指定事件时,遍历钩子函数链表,以调用为第一指定事件定义的回调函数,第一指定事件为钩子函数链表中任一结点对应的指定事件。

进一步的,处理器32,还用于:当第二指定事件对应的钩子添加函数被调用时,向钩子函数链表中添加数据域中存储有第二指定事件的标识,且指针指向为第二指定事件定义的回调函数的结点;当第三指定事件对应的钩子删除函数被调用时,从钩子函数链表中删除第三指定事件所对应的结点,第三指定事件为钩子函数链表中任一结点对应的指定事件。

在本发明实施例的第一种应用场景中,钩子函数链表为任务切换钩子函数链表。第一指定事件为第一VxWorks任务向第二VxWorks任务切换;或者,第一指定事件为第三VxWorks任务向第一Linux任务切换;或者,第一指定事件为第二Linux任务向第四VxWorks任务切换。

在本发明实施例的第二种应用场景中,钩子函数链表为任务创建钩子函数链表,第一指定事件为创建第一VxWorks任务。

在本发明实施例的第三种应用场景中,钩子函数链表为任务删除钩子函数链表,第一指定事件为删除第一VxWorks任务。

需要说明的是,本发明实施例提供的实现VxWorks任务钩子函数功能的装置中部分功能模块的具体描述可以参考方法实施例中的对应内容,本实施例这里不再详细赘述。

本发明实施例提供的实现VxWorks任务钩子函数功能的装置,通过在Linux系统中定义钩子函数链表,使得链表中的结点的指针指向指定事件定义的回调函数;在调用一函数执行第一指定事件时,可以遍历钩子函数链表,以调用为第一指定事件定义的回调函数。这样,就可以通过遍历钩子函数链表,调用回调函数,以实现对第一指定事件的监测,从而在Linux系统中实现VxWorks任务钩子函数的功能。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1