CN111737025A - 用于实现VxWorks操作系统环境下RTP间数据调用的方法及系统 - Google Patents
用于实现VxWorks操作系统环境下RTP间数据调用的方法及系统 Download PDFInfo
- Publication number
- CN111737025A CN111737025A CN202010446684.3A CN202010446684A CN111737025A CN 111737025 A CN111737025 A CN 111737025A CN 202010446684 A CN202010446684 A CN 202010446684A CN 111737025 A CN111737025 A CN 111737025A
- Authority
- CN
- China
- Prior art keywords
- call
- rtp
- function
- data
- creating
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 74
- 238000005316 response function Methods 0.000 claims abstract description 87
- 230000006854 communication Effects 0.000 claims abstract description 53
- 238000004891 communication Methods 0.000 claims abstract description 27
- 230000008569 process Effects 0.000 claims abstract description 22
- 230000004044 response Effects 0.000 claims description 42
- 238000000547 structure data Methods 0.000 claims description 12
- 238000012544 monitoring process Methods 0.000 claims description 6
- 238000002955 isolation Methods 0.000 abstract description 8
- 230000007246 mechanism Effects 0.000 description 13
- 238000013461 design Methods 0.000 description 10
- 230000003993 interaction Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 229920004880 RTP PEK Polymers 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Exchange Systems With Centralized Control (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种用于实现VxWorks操作系统环境下RTP间数据调用的方法,包括:建立在数据调用时通信双方的公共管道;在调用请求方对应的第一RTP中创建用于请求调用公共管道内数据的调用请求函数;在被调用方对应的第二RTP中创建用于响应公共管道内的调用请求并将被调用数据写入公共管道的调用响应函数;在第二RTP中创建用于将调用请求函数和调用响应函数进行响应关联的调用关系响应函数;将调用关系响应函数对应的关联作为任务添加至第二RTP中。本发明简单有效地实现了不同RTP间进程的通信,既确保不同SIL应用软件的安全隔离,又有效保障整体软件功能的实现。
Description
技术领域
本发明涉及嵌入式实时操作系统技术领域,尤其是涉及一种用于实现VxWorks操作系统环境下RTP间数据调用的方法及系统。
背景技术
在嵌入式实时操作系统领域中,VxWorks操作系统中的实时进程(Real TimeProcess,RTP)是为实时嵌入式系统专门优化的一种用户态应用程序,类似于DOS/Windows.exe和Unix executable,具备单独的地址空间和命名空间,实现应用程序和操作系统Kernel的独立开发。RTP实质上是一个“资源容器”,包含程序(代码与数据)、栈、堆、属于这个RTP的任务、由RTP创建的各种软件对象等其管理的各种资源,这些资源仅局限于该进程内部的操作与访问,使得每一个RTP具有独立的执行任务和系统资源。因此,采用RTP编程模式能有效地将不同安全关键等级的应用程序整合在一个VxWorks操作系统上共享CPU资源,又能实现各应用程序与操作系统Kernel之间的安全隔离保护,并保证各自任务运行的实时性和确定性。
随着旅客对列车出行安全需求的不断提升,列车核心车载设备(如:通信信号系统、网络控制系统、牵引控制系统等)的功能安全设计已逐步成为轨道交通行业的必备关键技术。根据EN50128(铁路应用——铁路控制和防护系统的通信、信号和处理系统软件)欧洲铁路安全标准要求,当不同安全完整性等级(Safety Integrity Level,SIL)的应用软件运行在一起时,所有应用软件均应按最高SIL进行设计,否则需要进行各SIL软件的独立性证明。若对原本大量没有SIL需求或仅有低SIL需求的应用软件一刀切地进行高SIL设计,将大幅提升软件设计和开发的工作量、工作时间以及认证成本。采用VxWorks操作系统中RTP的编程模式,使不同SIL应用软件在不同的RTP中运行,实现安全隔离,又能很好地满足安全标准要求。然而,不同SIL应用软件间需要进行数据交互和共同配合才能完成整体软件功能,由于各RTP资源的独立性而不能直接进行共享,因此,不同RTP间的通信成为了这种软件功能安全设计方法中的技术难点。
发明内容
为了解决上述技术问题,本发明实施例提供了一种用于实现VxWorks操作系统环境下RTP间数据调用的方法,其特征在于,所述方法包括:建立在数据调用时通信双方的公共管道;在调用请求方对应的第一RTP中创建用于请求调用所述公共管道内数据的调用请求函数;在被调用方对应的第二RTP中创建用于响应所述公共管道内的调用请求并将被调用数据写入所述公共管道的调用响应函数;在所述第二RTP中创建用于将所述调用请求函数和所述调用响应函数进行响应关联的调用关系响应函数;将所述调用关系响应函数对应的所述关联作为任务添加至所述第二RTP中。
优选地,在建立在数据调用时通信双方的公共管道步骤中,包括:创建关于当前通信进程的公共函数;根据所述公共函数和所述公共管道的最大字节数,创建相应的公共管道,并记录所述公共管道的文件描述符。
优选地,在建立在数据调用时通信双方的公共管道步骤中,还包括:在所述第一RTP和所述第二RTP中分别定义所述文件描述符的打开方式。
优选地,在创建所调用请求函数过程中,包括:创建所述调用请求函数对应的第一结构体,所述第一结构体包括:函数功能和结构体元素;对通过所述第一结构体将请求信息写入所述公共管道的操作进行编辑;以及对通过所述第一结构体从所述公共管道读取被调用数据的操作进行编辑。
优选地,在创建所述调用响应函数过程中,包括:创建所述调用响应函数对应的第二结构体,所述第二结构体与所述第一结构体的内部结构形式相同;对通过第二结构体从所述公共管道读取所述请求信息的操作进行编辑;以及对执行当前调用操作进行编辑;以及对通过所述第二结构体将所述被调用数据写入所述公共管道的操作进行编辑。
优选地,在创建所述调用关系响应函数过程中,包括:创建代表多个调用响应关系的结构体数组,所述结构体数组包括多个所述调用关系响应函数,每个所述调用关系响应函数表示一种所述调用响应关系,所述调用关系响应函数的元素包括:所述公共管道的名称、所述调用响应函数和所述公共管道的文件描述符;将所有通信进程任务对应的注册信息写入所述结构体数据组中;编辑对所述结构体数据组中各个文件描述符是否处于活跃状态进行监视的操作;编辑对所述结构体数据组中处于活跃状态的文件描述符进行判断的操作;对在当前通信进程任务对应的文件描述符处于活跃状态时立即响应相应任务对应的所述调用请求函数的操作进行编辑。
优选地,进一步,利用系统函数select()对所述结构体数据组进行监视;利用系统函数FD_ISSET()对所有通信进程任务中处于活跃状态的文件描述符进行判断。
优选地,所述方法还包括:启动所述调用关系响应函数。
另一方面,提供了一种用于实现VxWorks操作系统环境下RTP间数据调用的系统,所述系统利用上述所述的方法生成,所述系统包括:公共管道;第一RTP,其用于将调用请求方对应的请求信息通过调用请求函数写入所述公共管道内,以及在第二RTP完成对满足当前调用需求的任务时,通过所述调用请求函数读取所述公共管道内的被调用数据;所述第二RTP,其用于在调用关系响应函数检测到所述公共管道对应的文件描述符处于活跃状态时,利用调用响应函数读取所述请求信息,并执行相应的调用任务,而后通过所述调用响应函数将所述被调用数据写入所述公共管道内。
优选地,所述第二RTP,其用于存储代表多个调用响应关系的结构体数组,所述结构体数组包括多个所述调用关系响应函数,每个所述调用关系响应函数表示一种所述调用响应关系,所述调用关系响应函数的元素包括:所述公共管道的名称、所述调用响应函数和所述公共管道的文件描述符。
与现有技术相比,上述方案中的一个或多个实施例可以具有如下优点或有益效果:
本发明实施例主要提出了一种用于实现VxWorks操作系统环境下RTP间数据调用的方法及系统。该方法及系统,首先,建立与当前通信双方对应的通信进程任务对应的公共管道和公共函数,以此为基础,分别在调用请求方RTP和被调用方RTP内建立相应的调用请求机制和调用响应机制,并进一步建立了针对当前通信进程任务的数据交互机制,从而简单、有效地实现了不同RTP间进程的通信(实现各应用软件间的数据交互)。本发明既能确保不同SIL应用软件的安全隔离,又能有效保障整体软件功能的实现,有效保障单一硬件下软件的功能安全性设计,有效降低了功能安全型软、硬件架构设计的复杂度和资源(时间、人力、认证等)成本。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:
图1为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的方法的步骤图。
图2为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的方法中调用请求函数的实现流程图。
图3为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的方法中调用响应函数的实现流程图。
图4为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的方法中调用关系响应函数的实现流程图。
图5为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的方法中公共函数调用过程的流程图。
图6为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的系统的结构示意图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
另外,附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在嵌入式实时操作系统领域中,VxWorks操作系统中的实时进程(Real TimeProcess,RTP)是为实时嵌入式系统专门优化的一种用户态应用程序,类似于DOS/Windows.exe和Unix executable,具备单独的地址空间和命名空间,实现应用程序和操作系统Kernel的独立开发。RTP实质上是一个“资源容器”,包含程序(代码与数据)、栈、堆、属于这个RTP的任务、由RTP创建的各种软件对象等其管理的各种资源,这些资源仅局限于该进程内部的操作与访问,使得每一个RTP具有独立的执行任务和系统资源。因此,采用RTP编程模式能有效地将不同安全关键等级的应用程序整合在一个VxWorks操作系统上共享CPU资源,又能实现各应用程序与操作系统Kernel之间的安全隔离保护,并保证各自任务运行的实时性和确定性。
随着旅客对列车出行安全需求的不断提升,列车核心车载设备(如:通信信号系统、网络控制系统、牵引控制系统等)的功能安全设计已逐步成为轨道交通行业的必备关键技术。根据EN50128(铁路应用——铁路控制和防护系统的通信、信号和处理系统软件)欧洲铁路安全标准要求,当不同安全完整性等级(Safety Integrity Level,SIL)的应用软件运行在一起时,所有应用软件均应按最高SIL进行设计,否则需要进行各SIL软件的独立性证明。若对原本大量没有SIL需求或仅有低SIL需求的应用软件一刀切地进行高SIL设计,将大幅提升软件设计和开发的工作量、工作时间以及认证成本。采用VxWorks操作系统中RTP的编程模式,使不同SIL应用软件在不同的RTP中运行,实现安全隔离,又能很好地满足安全标准要求。然而,不同SIL应用软件间需要进行数据交互和共同配合才能完成整体软件功能,由于各RTP资源的独立性而不能直接进行共享,因此,不同RTP间的通信成为了这种软件功能安全设计方法中的技术难点。
为了解决上述技术问题,本发明提出了一种用于实现VxWorks操作系统环境下RTP间数据调用的方法及系统。该方法及系统以公共管道为基础,建立不同RTP间函数调用的请求和响应的机制,简单有效地实现了不同RTP之间的通信进程,既能确保不同SIL应用软件的安全隔离,又能有效保障整体软件功能的实现。需要说明的是,本申请将铁路轨道控制系统内各类子系统(例如:通信信号系统、网络控制系统、牵引控制系统等等)分别通过属于不同安全完整性等级的RTP形式来实现相应的子系统功能,即每个子系统对应有相应的RTP进程(SIL应用软件),并且根据每个RTP进程所对应的子系统在铁路轨道控制系统内的安全性等级,来确定相应的SIL。因此,为了实现各个子系统(即各SIL应用软件)之间的通信(数据交互),需要实现不同RTP之间的通信进程。
图1为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的方法的步骤图。如图1所示,本发明所述的用于实现VxWorks操作系统环境下RTP间数据调用的方法(以下简称“数据调用实现方法”)包括如下步骤:步骤S110建立在数据调用时通信双方的公共管道;步骤S120在调用请求方对应的第一RTP中创建用于请求调用步骤S110所建立的公共管道内数据的调用请求函数;步骤S130在被调用方对应的第二RTP中创建用于响应公共管道内的调用请求并将被调用数据写入公共管道的调用响应函数;步骤S140在第二RTP中创建用于将步骤S120构建的调用请求函数和步骤S130构建的调用响应函数进行响应关联的调用关系响应函数;步骤S150将步骤S140构建的调用关系响应函数对应的关联作为任务添加至第二RTP中。下面针对上述各步骤进行一一说明。
首先,在不同RTP进程之间要想完成第一RTP(第一RTP作为调用请求方)请求调用第二RTP(第二RTP作为被调用方)内的数据任务时,在步骤S110(公共管道生成步骤)中,需要建立起当前数据调用任务所需的针对通信双方(调用请求方与被调用方之间)的公共管道。
具体地,首先,(步骤S1101)先创建关于当前通信进程的公共函数及其名称,公共函数名称符串优选为“rtpt1_Fun1”。而后,(步骤S1102)根据上述已创建的公共函数和公共管道的最大字节数,创建相应的公共管道,并记录当前公共管道的文件描述符。在一个具体实施例中,以公共函数的名称字符串“rtpt1_Fun1”为基础生成唯一的公共管道的名称字符串“/pipe/rtpt1_Fun1”,并利用系统函数pipeDevCreate()创建当前公共管道,以及记录当前公共管道的文件描述符publicPipe。其中,创建公共管道的程序代码如下表示:pipeDevCreate(“/pipe/rtpt1_Fun1”,1,nBytes)。nBytes表示公共管道消息的最大字节数,由公共函数通信数据的大小来决定。
接着,为了保持公共通道在通信双方对应的RTP内的有效性,还需要在完成上述公共管道的创建后,在第一RTP和第二RTP中,分别定义文件描述符的打开方式,以便能够将RTP内的消息顺利写入公共管道内并从公共管道顺利读取相应的消息。例如:第一RTP和第二RTP分别运用系统函数open()打开该公共管道,并用下列形式来记录管道的文件描述符publicPipe的打开方式:publicPipe=open(“/pipe/rtpt1_Fun1”,O_RDWR,0)。其中,O_RDWR表示当前公共管道以可读写的方式打开。
图2为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的方法中调用请求函数的实现流程图。下面结合图1和图2,对上述步骤S120(请求机制生成步骤)进行说明。调用请求函数一方面用来由调用请求方,向公共通道内写入请求消息,并且还能用来由调用请求方从公共通道读取其所需要的被调用数据,从而作为一种用于向被调用方请求调用当前通信进程任务所需的被调用数据的函数。
具体地,如图2所示,在进行调用请求函数创建过程中,需要以公共函数intrtpt1_Fun1(int a,int b)为基础,在第一RTP中创建基于当前公共管道(名称)的调用请求函数int rtpt1_Fun1_Request(const char*name,int a,int b)。其中,name=“/pipe/rtpt1_Fun1”。
首先,(步骤S1201)需要定义调用请求函数的变量并进行初始化设置,而后,(步骤S1202)根据步骤S110生成的公共函数来创建调用请求函数对应的第一结构体,并(步骤S1203)为第一结构体内的结构体元素赋值。其中,第一结构体包括:函数功能和结构体元素(结构体元素包括但不限于:元素a和元素b)。然后,(步骤S1204)对通过第一结构体将请求信息(请求消息)写入当前公共管道的操作进行编辑,以使得第一RTP将符合当前调取需求的请求消息写入公共管道内。接着,(步骤S1205)对通过第一结构体从当前公共管道读取被调用数据的操作进行编辑,以使得第一RTP从当前公共管道内获得被调用数据。最后,(步骤S1206)对结构体元素的返回操作进行编辑。这样,通过上述步骤S1201~步骤S1206完成了对公共函数对应的调用请求函数的创建,并生成了相应的数据调用请求机制。
如图2所示,在调用请求函数生成后,调用请求函数的实现流程如下所示:
S21、对调用请求函数进行变量定义与初始化设置。
S22、按照如下方式创建调用请求函数对应的第一结构体:
struct fun_fml_para
{int fun;
int a;
int b;
}parameter;
S23、按照如下方式为第一结构体内的结构体元素进行赋值:
parameter.a=a;
parameter.b=b;
S24、按照如下方式对将请求信息(请求消息)写入当前公共管道的操作进行编辑:
write(publicPipe,(char*)(¶meter),sizeof(parameter));
S25、等待调用响应函数读取当前公共管道中的结构体数据(请求消息),基于当前请求消息数据完成对公共函数的调用(即完成当前数据调用任务,得到调用请求方所需的被调用数据),并将公共函数运行结果(此时,公共函数运行结果为被调用数据)以相同结构体的形式写回公共管道,参考图3。
S26、按照如下方式从当前公共管道读取被调用数据的操作进行编辑:
read(publicPipe,(char*)(¶meter),sizeof(parameter));
S27、按照如下方式对结构体元素的返回操作进行编辑:
a=parameter.a;
b=parameter.b;
return parameter.fun;
由此,通过步骤S21~S27展示了当前调用请求函数的功能实现流程。
图3为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的方法中调用响应函数的实现流程图。下面结合图1和图3,对上述步骤S130(响应机制生成步骤)进行说明。调用响应函数一方面用来由被调用方从公共通道内读取请求消息,并且在执行相应的调用操作后,还能用来由被调用方,向公共通道读取内写入被调用数据,从而作为一种用于对被调用请求方的调用请求进行调用响应的函数。
具体地,如图3所示,在进行调用响应函数创建过程中,需要以公共函数intrtpt1_Fun1(int a,int b)为基础,在第二RTP中创建基于当前公共管道(名称)的调用响应函数int rtpt1_Fun1_Reponse(const char*name)。其中name=“/pipe/rtpt1_Fun1”。
首先,(步骤S1301)需要定义调用响应函数的变量并进行初始化设置,而后,(步骤S1302)根据步骤S110生成的公共函数来创建调用响应函数对应的第二结构体。其中,第二结构体与第一结构体的内部结构形式相同,从而确保将请求消息、被调用数据以相同的格式写入公共管道内,便于第二RTP、第一RTP读取。然后,(步骤S1303)对通过第二结构体从当前公共管道读取请求消息的操作进行编辑,以使得第二RTP获得当前第一RTP发送的请求消息。接着,(步骤S1304)对调用公共函数来执行当前调用操作进行编辑,以使得第二RTP根据当前获得的请求消息,得到满足当前调取需求的被调用数据。最后,(步骤S1305)对通过第二结构体将被调用数据(按照与第一结构体相同的格式)写入当前公共管道的操作进行编辑,以使得第二RTP将调取到的被调用数据写入公共管道内。这样,通过上述步骤S1301~步骤S1305完成了对公共函数对应的调用响应函数的创建,并生成了相应的数据调用响应机制。
如图3所示,在调用响应函数生成后,调用响应函数的实现流程如下所述:
S31、对调用响应函数进行变量定义与初始化设置。
S32、按照如下方式创建调用响应函数对应的第二结构体:
struct fun_fml_para
{int fun;
int a;
int b;
}parameter;
S33、按照如下方式对从当前公共管道读取请求信息的操作进行编辑:
read(publicPipe,(char*)(¶meter),sizeof(parameter));
S34、按照如下方式对调用当前公共函数以执行当前调用操作的操作进行编辑:
parameter.fun=rtpt1_Fun1(parameter.a,parameter.b);
S35、按照如下方式对将被调用数据写入公共管道的操作进行编辑:
write(publicPipe,(char*)(¶meter),sizeof(parameter));
由此,通过步骤S31~S35展示了当前调用响应函数的功能实现流程。
图4为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的方法中调用关系响应函数的实现流程图。下面结合图1和图4,对上述步骤S140(响应关系生成步骤)进行说明。调用关系响应函数的功能是用来表示上述调用请求函数与调用响应函数之间的直接调用响应关系的。在本发明实施例中,为了能在第一RTP中调用上述调用请求函数后,对第二RTP中的调用响应函数进行及时响应,需在第二RTP中,创建调用响应选择函数(调用关系响应函数)STATUS rtpt1_FunSelectRsp(void)。需要说明的是,调用关系响应函数是具有通信双方指向性的函数,仅表示指定的通信双方之间的数据调用任务(即通信进程任务)。在实际应用过程中,由于本发明所述的数据调用实现方法能够适用于各类应用场景的复杂控制系统中,不同的子系统之间的数据调用关系网络也非常复杂,对于具有被调用方身份的RTP来说,可能具有多个,每个具有被调用方身份的RTP(第二RTP)又可能存在多种与其他具有调用请求方身份的RTP之间的直接调用响应关系。因此,需要在具有被调用方身份的第二RTP中,创建能够表征其与多个其他调用请求方所具有的多个直接调用响应关系的结构体数组,每个数组元素表示一个直接调用响应关系。
具体地,如图4所示,在进行调用关系响应函数创建过程中,首先,(步骤S1401)定义调用关系响应函数的变量并进行初始化设置,而后,(步骤S1402)创建代表多个直接调用响应关系的结构体数组,结构体数组包括多个调用关系响应函数,每个调用关系响应函数表示一种调用响应关系。其中,调用关系响应函数的元素包括:与当前调用响应关系(数据调取任务)匹配的公共管道的名称、与当前调用响应关系(数据调取任务)匹配的调用响应函数、以及与当前调用响应关系(数据调取任务)匹配的公共管道的文件描述符。然后,(步骤S1403)将所有通信进程任务(数据调取任务)对应的注册信息写入结构体数据组中,以使得第一RTP将符合当前调取需求的请求消息写入公共管道内,从而表示出每种调用响应关系的具体情况。其中,注册信息为与当前调用响应关系(数据调取任务)匹配的调用关系响应函数的元素。
接着,(步骤S1404)编辑对结构体数据组中所有文件描述符是否处于活跃状态进行监视的操作。具体地,在本发明实施例中,优选为利用系统函数select()对结构体数据组内的所有已注册的调用响应关系进行监视。需要说明的是,在本发明实施例中,处于活跃状态的文件描述符指的是,当前文件描述符所属的调用响应关系正在被实施执行,需要立即读取相应公共管道内的请求消息,并在完成当前数据调取任务后将对应的被调取数据写入指定的公共管道内,也就是说,与当前通信进程任务(数据调用任务)匹配的调用请求函数已被调用。
进一步,(步骤S1405)编辑对结构体数据组中处于活跃状态的文件描述符(是哪一个)进行判断的操作,以判断所有已注册调用响应关系中具体哪一个关系正处于活跃状态。具体地,在本发明实施例中,优选为利用系统函数FD_ISSET()对结构体数据组内的所有已注册的调用响应关系中具体哪一个关系对应的文件描述符正处于活跃状态进行判断。
最后,(步骤S1406)对在当前通信进程任务对应的文件描述符处于活跃状态时立即响应相应任务对应的调用请求函数的操作进行编辑。在步骤S1406中,需要对指定操作进行编辑,其中,指定操作为:在当前第一RTP请求调取第二RTP内数据的通信进程任务对应的文件描述符处于活跃状态时(在与当前通信进程任务匹配的调用请求函数已被调用时),立即调用与当前通信进程任务(数据调用任务)匹配的公共函数来执行当前调用操作。
这样,通过上述步骤S1401~步骤S1406完成了对公共函数所需的调用关系响应函数的创建,从而基于公共管道的公共函数调用请求和响应的机制,进一步生成了不同RTP间通信进程的数据交互策略。
如图4所示,在调用关系响应函数生成后,调用关系响应函数的实现流程如下所示:
S41、对调用关系响应函数进行变量定义与初始化设置。
S42、按照如下方式创建代表多个调用响应关系的结构体数组:
struct_FUN_SELECT_INFO
{char*name;
void(*funRsp)(const char*name);
int fd;
}selectFun[RTP_FUN_NUM_MAX];
S43、按照如下方式将所有通信进程任务对应的注册信息写入结构体数据组中:
selectFun[i].name="/pipe/rtpt1_Fun1";
selectFun[i].funRsp=rtpt1_Fun1_Reponse;
selectFun[i].fd=publicPipe;
i++;
S44、利用系统函数select()对结构体数据组内的所有已注册的文件描述符进行监视。
S45、利用系统函数FD_ISSET()对结构体数据组内的所有已注册的调用响应关系中具体哪一个文件描述符正处于活跃状态进行判断。
S46、在对结构体数据组内的所有已注册的文件描述符进行监视过程中,按照如下方式将当前通信进程任务对应的文件描述符正处于活跃状态时立即响应相应任务对应的调用请求函数的操作进行编辑:
selectFun[i].funRsp(selectFun[i].name);
由此,通过步骤S41~S46展示了当前调用关系响应函数的功能实现流程。
图5为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的方法中公共函数调用过程的流程图。参考图5,在步骤S150(调用响应步骤)中,需要在第二RTP中,以任务的形式先启动步骤S140生成的针对当前通信进程任务的调用关系响应函数rtpt1_FunSelectRsp(),以实现对当前数据调用任务对应的公共函数的调用。
如图5所示,第二RTP以任务的形式先启动调用响应选择函数rtpt1_FunSelectRsp(),第二RTP与第一RTP以公共管道命名字符串“/pipe/rtpt1_Fun1”为桥梁,当第一RTP调用rtpt1_Fun1_Request()时,将函数的入口参数以第一结构体的形式写入公共管道;第二RTP中的函数rtpt1_FunSelectRsp()检测到该公共管道对应的文件描述符publicPipe活跃时,立即调用函数rtpt1_Fun1_Reponse(),将公共函数rtpt1_Fun1()运行所需的入口参数从公共管道读出来并代入该函数,再将公共函数的运行结果(被调用数据)以第二结构体的形式写回公共管道;最后将该数据从公共管道中读回并返回给函数rtpt1_Fun1_Request(),从而间接实现了第一RTP对第二RTP中公共函数rtpt1_Fun1()的调用。
由此,本发明实施例,以公共管道为基础,建立了不同RTP间函数调用的请求和响应的机制,通过实现调用请求方对被调用方内存储的代表当前通信进程关系的公共函数的调用,有效地实现了不同RTP间进程的通信。
另一方面,本发明基于上述用于实现VxWorks操作系统环境下的RTP间数据调用的方法,还提出了一种用于实现VxWorks操作系统环境下RTP间数据调用的系统(以下简称“数据调用实现系统”)。图6为本申请实施例的用于实现VxWorks操作系统环境下RTP间数据调用的系统的结构示意图。
如图6所示,上述数据调用实现系统包括:第一RTP601、第二RTP602和公共管道603。公共管道603通过上述步骤S110所述的方法创建。第一RTP601首先用于将调用请求方对应的请求信息通过上述步骤S120所述的方法创建的调用请求函数写入公共管道内,以及在第二RTP602完成对满足当前调用需求的任务时,再次通过上述调用请求函数读取公共管道603内的被调用数据。第二RTP602用于在利用上述步骤S140和步骤S150所述的方法创建的调用关系响应函数检测到公共管道603对应的文件描述符正处于活跃状态时,利用上述步骤S130所述的方法创建的调用响应函数读取上述请求信息,并执行相应的调用任务,而后再次通过上述调用响应函数将被调用数据写入公共管道603内。
进一步,第二RTP602用于存储有代表多个调用响应关系的结构体数组,结构体数组包括多个调用关系响应函数,每个调用关系响应函数表示一种调用响应关系。调用关系响应函数的元素包括:与当前调用响应关系(数据调取任务)匹配的公共管道的名称、与当前调用响应关系(数据调取任务)匹配的调用响应函数、以及与当前调用响应关系(数据调取任务)匹配的公共管道的文件描述符。
本发明提出了一种用于实现VxWorks操作系统环境下RTP间数据调用的方法及系统。该方法及系统,首先,建立与当前通信双方对应的通信进程任务对应的公共管道和公共函数,以此为基础,分别在调用请求方RTP和被调用方RTP内建立相应的调用请求机制和调用响应机制,并进一步建立了针对当前通信进程任务的数据交互机制,从而简单、有效地实现了不同RTP间进程的通信(实现各应用软件间的数据交互)。本发明既能确保不同SIL应用软件的安全隔离,又能有效保障整体软件功能的实现,有效保障单一硬件下软件的功能安全性设计,有效降低了功能安全型软、硬件架构设计的复杂度和资源(时间、人力、认证等)成本。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人员在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
应该理解的是,本发明所公开的实施例不限于这里所公开的特定结构、处理步骤或材料,而应当延伸到相关领域的普通技术人员所理解的这些特征的等同替代。还应当理解的是,在此使用的术语仅用于描述特定实施例的目的,而并不意味着限制。
说明书中提到的“一个实施例”或“实施例”意指结合实施例描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,说明书通篇各个地方出现的短语“一个实施例”或“实施例”并不一定均指同一个实施例。
虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
Claims (10)
1.一种用于实现VxWorks操作系统环境下RTP间数据调用的方法,其特征在于,所述方法包括:
建立在数据调用时通信双方的公共管道;
在调用请求方对应的第一RTP中创建用于请求调用所述公共管道内数据的调用请求函数;
在被调用方对应的第二RTP中创建用于响应所述公共管道内的调用请求并将被调用数据写入所述公共管道的调用响应函数;
在所述第二RTP中创建用于将所述调用请求函数和所述调用响应函数进行响应关联的调用关系响应函数;
将所述调用关系响应函数对应的所述关联作为任务添加至所述第二RTP中。
2.根据权利要求1所述的方法,其特征在于,在建立在数据调用时通信双方的公共管道步骤中,包括:
创建关于当前通信进程的公共函数;
根据所述公共函数和所述公共管道的最大字节数,创建相应的公共管道,并记录所述公共管道的文件描述符。
3.根据权利要求2所述的方法,其特征在于,在建立在数据调用时通信双方的公共管道步骤中,还包括:
在所述第一RTP和所述第二RTP中分别定义所述文件描述符的打开方式。
4.根据权利要求2或3所述的方法,其特征在于,在创建所调用请求函数过程中,包括:
创建所述调用请求函数对应的第一结构体,所述第一结构体包括:函数功能和结构体元素;
对通过所述第一结构体将请求信息写入所述公共管道的操作进行编辑;以及
对通过所述第一结构体从所述公共管道读取被调用数据的操作进行编辑。
5.根据权利要求4所述的方法,其特征在于,在创建所述调用响应函数过程中,包括:
创建所述调用响应函数对应的第二结构体,所述第二结构体与所述第一结构体的内部结构形式相同;
对通过第二结构体从所述公共管道读取所述请求信息的操作进行编辑;以及
对执行当前调用操作进行编辑;以及
对通过所述第二结构体将所述被调用数据写入所述公共管道的操作进行编辑。
6.根据权利要求1~5中任一项所述的方法,其特征在于,在创建所述调用关系响应函数过程中,包括:
创建代表多个调用响应关系的结构体数组,所述结构体数组包括多个所述调用关系响应函数,每个所述调用关系响应函数表示一种所述调用响应关系,所述调用关系响应函数的元素包括:所述公共管道的名称、所述调用响应函数和所述公共管道的文件描述符;
将所有通信进程任务对应的注册信息写入所述结构体数据组中;
编辑对所述结构体数据组中各个文件描述符是否处于活跃状态进行监视的操作;
编辑对所述结构体数据组中处于活跃状态的文件描述符进行判断的操作;
对在当前通信进程任务对应的文件描述符处于活跃状态时立即响应相应任务对应的所述调用请求函数的操作进行编辑。
7.根据权利要求6所述的方法,其特征在于,进一步,
利用系统函数select()对所述结构体数据组进行监视;
利用系统函数FD_ISSET()对所有通信进程任务中处于活跃状态的文件描述符进行判断。
8.根据权利要求1~7中任一项所述的方法,其特征在于,所述方法还包括:启动所述调用关系响应函数。
9.一种用于实现VxWorks操作系统环境下RTP间数据调用的系统,其特征在于,所述系统利用如权利要求1~8中任一项所述的方法生成,所述系统包括:
公共管道;
第一RTP,其用于将调用请求方对应的请求信息通过调用请求函数写入所述公共管道内,以及在第二RTP完成对满足当前调用需求的任务时,通过所述调用请求函数读取所述公共管道内的被调用数据;
所述第二RTP,其用于在调用关系响应函数检测到所述公共管道对应的文件描述符处于活跃状态时,利用调用响应函数读取所述请求信息,并执行相应的调用任务,而后通过所述调用响应函数将所述被调用数据写入所述公共管道内。
10.根据权利要求9所述的系统,其特征在于,
所述第二RTP,其用于存储代表多个调用响应关系的结构体数组,所述结构体数组包括多个所述调用关系响应函数,每个所述调用关系响应函数表示一种所述调用响应关系,所述调用关系响应函数的元素包括:所述公共管道的名称、所述调用响应函数和所述公共管道的文件描述符。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010446684.3A CN111737025B (zh) | 2020-05-25 | 2020-05-25 | 用于实现VxWorks操作系统环境下实时进程间数据调用的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010446684.3A CN111737025B (zh) | 2020-05-25 | 2020-05-25 | 用于实现VxWorks操作系统环境下实时进程间数据调用的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111737025A true CN111737025A (zh) | 2020-10-02 |
CN111737025B CN111737025B (zh) | 2024-04-09 |
Family
ID=72647690
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010446684.3A Active CN111737025B (zh) | 2020-05-25 | 2020-05-25 | 用于实现VxWorks操作系统环境下实时进程间数据调用的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111737025B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101894045A (zh) * | 2010-06-18 | 2010-11-24 | 阳坚 | 一种实时Linux操作系统 |
US20110271289A1 (en) * | 2010-04-30 | 2011-11-03 | Reginald Weiser | Systems and methods for providing a client-side application programming interface to access a networked telecommunication resource |
CN105468465A (zh) * | 2015-12-28 | 2016-04-06 | 深圳市科漫达智能管理科技有限公司 | 一种基于ace的进程间通信系统和方法 |
CN108170503A (zh) * | 2018-01-24 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 一种跨系统运行安卓应用的方法、终端及存储介质 |
CN108833578A (zh) * | 2018-06-30 | 2018-11-16 | 武汉斗鱼网络科技有限公司 | 基于fifo命名管道进行双工通信的方法及相关设备 |
CN110413420A (zh) * | 2019-01-23 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 数据传输方法、装置、终端及存储介质 |
CN110457140A (zh) * | 2019-07-02 | 2019-11-15 | 福建新大陆通信科技股份有限公司 | 一种基于binder机制的client server快速调用方法及系统 |
-
2020
- 2020-05-25 CN CN202010446684.3A patent/CN111737025B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110271289A1 (en) * | 2010-04-30 | 2011-11-03 | Reginald Weiser | Systems and methods for providing a client-side application programming interface to access a networked telecommunication resource |
CN101894045A (zh) * | 2010-06-18 | 2010-11-24 | 阳坚 | 一种实时Linux操作系统 |
CN105468465A (zh) * | 2015-12-28 | 2016-04-06 | 深圳市科漫达智能管理科技有限公司 | 一种基于ace的进程间通信系统和方法 |
CN108170503A (zh) * | 2018-01-24 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 一种跨系统运行安卓应用的方法、终端及存储介质 |
CN108833578A (zh) * | 2018-06-30 | 2018-11-16 | 武汉斗鱼网络科技有限公司 | 基于fifo命名管道进行双工通信的方法及相关设备 |
CN110413420A (zh) * | 2019-01-23 | 2019-11-05 | 腾讯科技(深圳)有限公司 | 数据传输方法、装置、终端及存储介质 |
CN110457140A (zh) * | 2019-07-02 | 2019-11-15 | 福建新大陆通信科技股份有限公司 | 一种基于binder机制的client server快速调用方法及系统 |
Non-Patent Citations (2)
Title |
---|
AHMADZADEH, S: "An Income-Based Real-Time Pricing Algorithm Under Uncertainties in Smart Grid", 2016 8TH COMPUTER SCIENCE AND ELECTRONIC ENGINEERING CONFERENCE (CEEC), pages 107 - 111 * |
张绪红;黄睿;: "基于EPOLL机制的实时监控传输系统的设计与实现", 实验室研究与探索, no. 01, pages 140 - 145 * |
Also Published As
Publication number | Publication date |
---|---|
CN111737025B (zh) | 2024-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096857B (zh) | 区块链系统的权限管理方法、装置、设备和介质 | |
Maesa et al. | Blockchain based access control services | |
CN110874739B (zh) | 实现高完整性、高带宽、低延迟、安全处理的分布式计算和存储网络 | |
RU2586866C2 (ru) | Дифференцирование набора признаков участником арендуемой среды и пользователем | |
CN113114498B (zh) | 一种可信区块链服务平台的架构系统及其构建方法 | |
US7975138B2 (en) | Systems and methods for mutually authenticated transaction coordination messages over insecure connections | |
CN109992465A (zh) | 服务追踪方法、装置和计算机可读存储介质 | |
WO2020055968A1 (en) | Secure communications gateway for trusted execution and secure communications | |
US20070220031A1 (en) | XNA relationship management | |
CN110445669A (zh) | 一种基于协程的服务器的监控方法、设备及可读介质 | |
WO2019224028A1 (en) | Autocommit transaction management in a blockchain network | |
CN112966028A (zh) | 一种基于工业互联网标识的数据溯源系统、方法及装置 | |
CN110138767B (zh) | 事务请求的处理方法、装置、设备和存储介质 | |
US20210004274A1 (en) | Method and a device comprising an edge cloud agent for providing a service | |
CN110297721B (zh) | 一种基于java的智能合约的跨合约调用方法 | |
CN109697670B (zh) | 一种不影响可信度的公链信息屏蔽方法 | |
CN111368330A (zh) | 一种基于区块链的以太坊智能合约审计系统及方法 | |
CN107609408B (zh) | 一种基于过滤驱动控制文件操作行为的方法 | |
CN109359092A (zh) | 文件管理方法、桌面显示方法、装置、终端及介质 | |
CN110598419A (zh) | 一种区块链客户端漏洞挖掘方法、装置、设备及存储介质 | |
CN104484291A (zh) | 一种建立设备映射的方法及装置 | |
CN111737025B (zh) | 用于实现VxWorks操作系统环境下实时进程间数据调用的方法及系统 | |
CN109241783A (zh) | 移动终端管控策略的实施方法及装置 | |
CN115208637B (zh) | 区块链智能合约的访问控制方法 | |
CN111444524A (zh) | 一种基于联盟链的动态双访问控制机制 |
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 |