用于autosar的rte代码自动生成方法

文档序号:6426470阅读:4622来源:国知局
专利名称:用于autosar的rte代码自动生成方法
技术领域
本发明涉及AUT0SAR智能汽车软件开发技术领域,具体涉及一种用于AUT0SAR的 RTE代码自动生成方法。
背景技术
RTE (Run-Time Environment)是 AUT0SAR 系统中 ECU 架构的核心。AUT0SAR 系统中组件间所有的通信都通过组件端口(port)进行,而端口是由AUT0SAR接口(AUT0SAR Ihterfaces)定义的,RTE实现了通信接口,提供组件间的通信服务,因此组件间的所有通信在RTE的控制之下。RTE提供的通信方式有两种类型发送-接收接口类型和客户-服务接口类型。发送-接收接口类型通信提供一种信息传送机制,而客户-服务接口类型通信触发函数调用。RTE借助基础软件模块(包括OS和COM)来完成上层组件间的通信服务。上层软件组件看不到位于RTE下层的OS和COM。当通信的两个组件位于不同的E⑶上时,RTE使用COM服务来完成ECU之间的通信。另外,RTE使用OS的任务资源来调度软件组件的各个运行实体运行,即RTE使用OS和COM的服务来完成上层软件组件的通信或者调度功能。RTE代码自动生成工具以E⑶配置描述文件为输入,生成具有以上功能的RTE代码(C语言描述),同时要求生成的代码符合AUT0SAR规范。ECU配置描述文件描述标准的 AUT0SAR对象模型。组件组合可以分为两部分,若干组件原型和若干连接器。组件类型经实例化成为组件原型,而若干个有通信关系的组件原型可以组成一个特定子系统一组件组合,组件组合也是一种组件类型,可以继续被实例化。组件原型通过连接器确定与其他组件原型的通信关系。连接器类型主要包含集合连接器、代理连接器两种。其中集合连接器用于连接组件组合内部的发送方组件原型端口和接收方组件原型端口,而代理连接器用于连接组件组合自身端口和组件组合内部组件原型端口,相当于组件组合代理内部的组件原型对外通信,以此避免暴露组件组合内部的组件原型。根据AUT0SAR方法论,一个完整开发过程依次经过软件组件建模、系统配置、E⑶ 配置最后到代码生成。在系统配置阶段,用户将完成数据映射。数据映射是把某一个数据元素绑定到特定的信号上发送或接收,其中简单类型数据元素绑定到系统信号,而复杂类型数据元素绑定到系统信号组。当组件被分配到不同的ECU上运行时,依据解析的信号或者信号组,RTE调用COM服务来完成组件间通信。组件间的通信方式可以分为发送-接收类型和客户-服务类型,其中前者有显式/隐式之分,后者有同步/异步之别。而对于某一个发送-接收类型端口,还有其专属的通信属性配置本端口是否以队列方式接收通信的数据元素、本端口发送/接收数据的初始值、本端口发送/接收数据的类型。或者是对于某一个客户-服务类型端口,通信属性为本服务端口的服务请求队列的长度、本操作的参数列表。RTE代码自动生成工具拥有一套解析器用于分析逻辑上相对独立的AUT0SAR对象模型,如连接器原型分析器就是用于分析组件组合内的各条连接器,以建立系统中组件间的通信关系。为满足通信要求,RTE还需要申请额外资源,如客户-服务类型通信时,需要OS告警或者事件资源的协助。因此,RTE代码自动生成工具定义RTE缓存计算器和OsNeeds 计算器,前者用于计算并申请RTE需要的缓存资源,而后者专用来计算并申请当前系统需要的OS资源。然而,ECU配置描述文件中的描述模型专注于构成整个系统的各个模块的描述,用这些描述信息直接生成RTE代码是不现实的,例如组件类型和组件实例分开描述,切断了组件原型模型与其通信依赖的端口原型模型的实质包含关系,导致传统的基于模板的RTE 代码自动生成方法存在逻辑性差、可读性低、开发繁琐复杂、开发效率低下的问题。

发明内容
本发明的目的是提供一种逻辑性强、可读性好、开发简单快捷、开发效率高的基于模板的RTE代码自动生成方法。为解决上述技术问题,本发明采用的技术方案为一种用于AUT0SAR的RTE代码自动生成方法,其实施步骤如下1)依次分析AUT0SAR中各组件实例,获取当前组件实例对应的组件类型,获取当前组件实例的端口以及端口所属接口类型,根据所述端口接口类型创建数据元素实例或者操作实例、在数据元素实例或者操作实例中保存所属端口信息以及元素通信属性,然后分析组件实例中各原子组件的内部行为,在数据元素实例或者操作实例记录对应的通信方式,直至分析完所有的组件实例;2)依次分析具有连接关系的组件实例的组件组合,如果连接关系的通信方式为客户-服务接口类型,则将该端口下的各操作实例保存通信对端的端口内的操作实例;如果连接关系的通信方式为发送-接收接口类型,则将该端口下的各数据元素实例保存通信对端的端口内的数据元素实例,直至分析完所有的连接关系;3)获取RTE对应各个数据元素实例或者操作实例所需要的缓存资源,并将获取的缓存对应保存在对应的数据元素实例或者操作实例中。作为本发明技术方案的进一步改进所述步骤2、中分析具有连接关系的组件实例的组件组合时,首先处理相同ECU内部具有连接关系的组件实例,然后处理不同E⑶之间具有连接关系的组件实例。所述处理相同E⑶内部具有连接关系的组件实例时的详细步骤包括A)通过若干个代理连接或者集合连接查找到连接的发送端原子软件组件的端 Π ;B)通过若干个代理连接或者集合连接查找到连接的接收端原子软件组件的端 Π ;C)如果是发送-接收类型端口,在通过此端口通信的数据元素实例模型中保存对其通信对端的数据元素实例的引用;如果是客户-服务类型端口,在通过端口通信的操作实例模型中保存对其通信的对端操作实例的引用。所述步骤2~)中分析具有连接关系的组件实例的组件组合时,将执行数据或者操作通信的系统信号或系统信号组的信息保存在对应的数据元素实例或者操作实例中。所述步骤3)中获取缓存资源时,首先分析组件实例中的每个运行实体的通信行为,根据所述通信行为定义接收缓存或者接收队列、缓存拷贝、请求队列和响应队列,并在数据元素实例模型或者操作实例模型中保存对所述接收缓存或者接收队列、缓存拷贝、请求队列和响应队列的引用;然后根据客户-服务通信类型、运行实体的通信行为以及ECU配置信息,在OS缓存资源中获取需要向OS申请的事件或者告警资源,并在操作实例模型中保存对其使用的OS事件或者告警的引用。本发明具有下述优点。1、本发明分析了 RTE代码自动生成工具的总体特点,从其输入文件E⑶配置描述文件出发,分析其元素模型的信息,转化成RTE代码自动生成工具自定义的模型。这种分析过程不修改原模型,只是创建自定义模型及模型间逻辑。2、本发明中的所述的RTE代码自动生成工具的自定义模型的逻辑关系接近目标代码,数据元素实例模型或是操作实例模型不仅增加了与其通信端口的关联信息,而且保存了其通信方式,如是否以队列方式接收等,从而简化了模板语言的开发。以数据元素实例模型为例,如果某数据元素以队列方式接收,那么生成的RTE API类型就是Rte_ReCeive, 否则生成API类型是Rte_Read。因此模板开发可以以是否以队列方式接收来判断数据接收 API类型,既增强了模板语言的可读性,又极大地方便RTE API的生成。3、本方法所述的自定义数据元素实例模型或是操作实例模型保存了对RTE代码自动生成工具申请的缓存资源或者OS资源的引用,而通过运行实体对数据元素实例模型或者操作实例模型的包含关系,很容易从任务中找到对映射到该任务的运行实体使用的缓存或者OS资源,因而方便了 Task的生成。


图1为本发明实施例的方法流程示意图。图2为本发明实施例的组件实例模型示意图。图3为本发明实施例中示例系统经步骤1)分析后创建的数据元素实例4为本发明实施例中示例系统经步骤1)分析后创建操作实例5为本发明实施例中示例系统经步骤2)分析后的数据元素实例6为本发明实施例中示例系统经步骤2)分析后的操作实例7为本发明实施例中示例系统经步骤3)分析后的数据元素实例8为本发明实施例中示例系统经步骤3)分析后的操作实例9为本发明实施例数据元素实例创建流程图。图10为本发明实施例操作实例创建流程图。
具体实施例方式如图1所示,本发明实施例用于AUT0SAR的RTE代码自动生成方法的实施步骤如下1)依次分析AUT0SAR中各组件实例,获取当前组件实例对应的组件类型,获取当前组件实例的端口以及端口所属接口类型,根据端口接口类型创建数据元素实例或者操作实例、在数据元素实例或者操作实例中保存所属端口信息以及元素通信属性,然后分析组件实例中各原子组件的内部行为,在数据元素实例或者操作实例记录对应的通信方式,直至分析完所有的组件实例;针对发送-接收类型端口,创建数据元素实例,其元素通信属性为是否以队列的方式发送或者接收;针对客户-服务类型端口,创建操作实例,其元素通信属性为服务请求的队列长度信息。在数据元素实例对应的通信方式为显式或者隐式,操作实例记录对应的通信方式为同步或者异步。2)依次分析具有连接关系的组件实例的组件组合,如果连接关系的通信方式为客户-服务接口类型,则将该端口下的各操作实例保存通信对端的端口内的操作实例;如果连接关系的通信方式为发送-接收接口类型,则将该端口下的各数据元素实例保存通信对端的端口内的数据元素实例,直至分析完所有的连接关系;3)获取RTE对应各个数据元素实例或者操作实例所需要的缓存资源,并将获取的缓存对应保存在对应的数据元素实例或者操作实例中。步骤2)中分析具有连接关系的组件实例的组件组合时,首先处理相同ECU内部具有连接关系的组件实例,然后处理不同ECU之间具有连接关系的组件实例。处理相同E⑶内部具有连接关系的组件实例时的详细步骤包括A)通过若干个代理连接或者集合连接查找到连接的发送端原子软件组件的端 Π ;B)通过若干个代理连接或者集合连接查找到连接的接收端原子软件组件的端 Π ;C)如果是发送-接收类型端口,在通过此端口通信的数据元素实例模型中保存对其通信对端的数据元素实例的引用;如果是客户-服务类型端口,在通过端口通信的操作实例模型中保存对其通信的对端操作实例的引用。步骤2~)中分析具有连接关系的组件实例的组件组合时,将执行数据或者操作通信的系统信号或系统信号组的信息保存在对应的数据元素实例或者操作实例中。步骤3)中获取缓存资源时,首先分析组件实例中的每个运行实体的通信行为,根据通信行为定义接收缓存/队列、缓存拷贝、请求队列和响应队列,并在数据元素实例模型或者操作实例模型中保存对接收缓存/队列、缓存拷贝、请求队列和响应队列的引用;然后根据客户-服务通信类型、运行实体的通信行为以及E⑶配置信息,在OS缓存资源中获取需要向OS申请的事件或者告警缓存资源,并在操作实例模型中保存对其使用的OS事件或者告警的引用。如图2所示,本发明实施例共有两个组件实例,各自包含两个端口。其中组件 Compl 包含 Port_Client 禾口 Port_Send, Comp2 包含 Port_Server 禾口 Port_Receive。 Port_ Client和PortJerver是客户-服务通信类型端口,以同步有超时方式通信;而Port_Send 和P0rt_Receive是发送-接收类型端口,以队列方式发送/接收数据。如图3和图4所示,经过步骤1)以后,上述两个组件实例分别被分析后创建数据元素实例模型 Rte_S_DataElement 和 Rte_R_DataElement、操作实例模型 Rte_C_0peration 和Rte_S_0peration。其中椭圆形元素表示是引用成员,如发送端口 Port_Send,菱形元素表示是属性成员,如通信方式显式。如图5和图6所示,经过步骤2~)分析组件组合后,获得组件间通信的通信双方的连接关系,并把这种连接关系保存到数据元素实例模型或是操作实例模型中。数据元素实例保存下通信对端数据元素实例的引用,而操作实例也保存下通信对端操作实例的引用。本实施例中通过分析原子软件组件内部行为计算RTE为实现用户要求的发送-接收类型通信方式需要申请的缓存资源(如接收队列/接收缓存);或者分析ECU配置信息, 计算RTE为实现客户-服务类型通信方式需要向OS申请的资源(事件/告警、请求队列
寸乂 Oa)在分析完组件通信的连接关系后,由RTE缓存计算器负责计算合适的缓存。RTE 缓存计算器将针对组件中的每个运行实体,分析其通信行为,以AUT0SAR标准为依据,计算接收缓存/队列,缓存拷贝、请求队列、响应队列。b)在数据元素实例模型中保存对其使用的RTE缓存的引用。如图7所示,本发明实施例中,PortJend和Port_ReCeiVe是发送-接收类型端口,且以队列方式发送/接收数据。因此RTE缓存计算器计算得出,这对通信需要一个接收队列,并申请队列 Rte_ReceiveQueue_l。并在 Rte_S_DataElement 禾口 Rte_R_DataElement 中保存对Rte_ReceiveQueue_l的引用。c)保存对OS资源的引用。OsNeeds计算器将根据客户-服务通信类型、运行实体的通信行为以及ECU配置等信息,计算需要向OS申请的事件或者告警资源,并在操作实例模型中保存对其使用的OS事件或者告警的引用。进一步,步骤包括1.申请事件资源。依次分析映射在OS任务中的运行实体,如果是服务器端运行实体,并且被以同步有超时方式请求服务,则由RTE代码自动生成工具向OS 申请一个事件用于服务器端和客户端的同步通信;如果是客户端运行实体,当其以同步方式请求服务时,申请一个同步事件用于与服务器端运行实体的通信。2.申请告警资源。依次分析映射在OS任务中的运行实体,当该运行实体是从客户端请求服务且通信请求方式是同步有超时或者是异步时,由RTE代码自动生成工具向OS 申请告警资源,用于RTE监控超时通信。此外,要把申请的告警关联到其等待的OS事件上。 如图8所示,在本发明实施例中,Port_Client和Port_SerVer是客户-服务通信类型端口, 以同步有超时方式通信。OsNeeds计算器根据同步通信方式计算并申请同步事件OsEvent, 又因为通信是有超时的,因此在Client端还需要申请一个告警来监控超时情况,这里告警命名为 OsAlarm。最后在 Rte_C_0peration 禾口 Rte_S_0peration 中保存对事件 OsEvent 的引用;在Rte_C_0peration中保存对告警OsAlarm的引用;把告警OsAlarm关联到其等待的同步事件OsEvent上。如图9所示,数据元素实例创建流程可以概括如下组件原型分析器分析各组件实例,分析组件实例的端口类型获得对应的接口类型,如果是发送-接收类型接口,创建数据元素实例模型,保存对通信端口的引用以及通信方式,同时通过连接器原型分析器获取对端的数据元素,保存对端数据元素的引用;RTE缓存计算器针对每一个数据元素实例计算通信的缓存需求,如果需要则创建缓存,并创建数据元素实例模型到RTE缓存的引用。如图10所示,操作实例的创建流程可以概括如下组件原型分析器分析各组件实例,分析组件实例的端口类型获得对应的接口类型,如果是为客户-服务类型接口,创建操作实例模型,保存对通信端口的引用以及通信参数列表,同时通过连接器原型分析器获取对端的操作实例,保存对端操作实例的引用;OsNeeds计算器分析组件的内部行为,针对每个运行实体计算需要的OS缓存资源,如果需要事件则向对应的OS申请事件缓存资源、如果需要告警则向对应的OS申请告警资源,并最终将引用的缓存资源保存操作实例模型中。以上所述仅为本发明的优选实施方式,本发明的保护范围并不仅限于上述实施方式,凡是属于本发明原理的技术方案均属于本发明的保护范围。对于本领域的技术人员而言,在不脱离本发明的原理的前提下进行的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种用于AUT0SAR的RTE代码自动生成方法,其特征在于其实施步骤如下1)依次分析AUT0SAR中各组件实例,获取当前组件实例对应的组件类型,获取当前组件实例的端口以及端口所属接口类型,根据所述端口接口类型创建数据元素实例或者操作实例,在数据元素实例或者操作实例中保存所属端口信息以及元素通信属性,然后分析组件实例中各原子组件的内部行为,在数据元素实例或者操作实例记录对应的通信方式,直至分析完所有的组件实例;2)依次分析具有连接关系的组件实例的组件组合,如果连接关系的通信方式为客户-服务接口类型,则将该端口下的各操作实例保存通信对端的端口内的操作实例;如果连接关系的通信方式为发送-接收接口类型,则将该端口下的各数据元素实例保存通信对端的端口内的数据元素实例,直至分析完所有的连接关系;3)获取RTE对应各个数据元素实例或者操作实例所需要的缓存资源,并将获取的缓存对应保存在对应的数据元素实例或者操作实例中。
2.根据权利要求1所述的用于AUT0SAR的RTE代码自动生成方法,其特征在于所述步骤2、中分析具有连接关系的组件实例的组件组合时,首先处理相同ECU内部具有连接关系的组件实例,然后处理不同ECU之间具有连接关系的组件实例。
3.根据权利要求2所述的用于AUT0SAR的RTE代码自动生成方法,其特征在于所述处理相同ECU内部具有连接关系的组件实例时的详细步骤包括A)通过若干个代理连接或者集合连接查找到连接的发送端原子软件组件的端口;B)通过若干个代理连接或者集合连接查找到连接的接收端原子软件组件的端口;C)如果是发送-接收类型端口,在通过此端口通信的数据元素实例模型中保存对其通信对端的数据元素实例的引用;如果是客户-服务类型端口,在通过端口通信的操作实例模型中保存对其通信的对端操作实例的引用。
4.根据权利要求3所述的用于AUT0SAR的RTE代码自动生成方法,其特征在于所述步骤2)中分析具有连接关系的组件实例的组件组合时,将执行数据或者操作通信的系统信号或系统信号组的信息保存在对应的数据元素实例或者操作实例中。
5.根据权利要求1或2或3或4所述的用于AUT0SAR的RTE代码自动生成方法,其特征在于所述步骤3)中获取缓存资源时,首先分析组件实例中的每个运行实体的通信行为, 根据所述通信行为定义接收缓存或者接收队列、缓存拷贝、请求队列和响应队列,并在数据元素实例模型或者操作实例模型中保存对所述接收缓存或者接收队列、缓存拷贝、请求队列和响应队列的引用;然后根据客户-服务通信类型、运行实体的通信行为以及E⑶配置信息,在OS资源中获取需要向OS申请的事件或者告警资源,并在操作实例模型中保存对其使用的OS事件或者告警的引用。
全文摘要
本发明公开了一种用于AUTOSAR的RTE代码自动生成方法,其实施步骤如下1)依次分析AUTOSAR中各组件实例,创建数据元素实例或者操作实例、保存所属端口信息以及元素通信属性,然后分析组件实例中各原子组件的内部行为,在数据元素实例或者操作实例记录对应的通信方式;2)依次分析具有连接关系的组件实例的组件组合,保存通信对端的端口内的操作实例或者数据元素实例;3)获取RTE对应各个数据元素实例或者操作实例所需要的缓存资源,并将获取的缓存对应保存在对应的数据元素实例或者操作实例中。本发明具有逻辑性强、可读性好、开发简单快捷、开发效率高的优点。
文档编号G06F9/44GK102214099SQ20111016260
公开日2011年10月12日 申请日期2011年6月16日 优先权日2011年6月16日
发明者刘敏, 李红, 汪金波, 耿莉莉, 顾宗华 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1