多核系统中RTE模块代码生成的方法

2020-02-04 02:03何晓明耿海强刘硕李峰刘羽
电子技术与软件工程 2020年20期
关键词:代码生成端口组件

何晓明 耿海强 刘硕 李峰 刘羽

(潍柴动力股份有限公司 山东省潍坊市 261061)

RTE 是AUTOSAR 中的核心模块。在AUTOSAR 架构的项目中,一般包括多个软件组件。每个软件组件都有多个组件端口,这些端口在软件组件对应的ARXML 文件中都有描述。RTE 可通过这些组件端口实现组件之间的通信机制。组件端口对应的连接关系在软件组合对应的ARXML 文件中体现。通过从ARXML 文件中提取相关信息,可以生成RTE 模块的代码。本文描述了从ARXML 文件到RTE 模块代码生成的方法。

1 输入文件描述

本文中涉及到的应用软件组件是由MATLAB 中的Simulink 模型实现的,基础软件部分是由C 代码实现。操作系统是由配置工具生成。生成RTE 模块代码需要的输入文件有:

(1)模型对应生成的ARXML 文件,如Model1.arxml、Model2.arxml 等。

(2)描述基础软件接口的ARXML 文件,这些接口用于与模型之间的交互,可以由配置工具生成,如BSW1.arxml、BSW2.arxml。

(3)描述调度任务的ARXML 文件,可从操作系统的配置工具中获取,如os.arxml。

(4)任务调度列表,描述Runnable 调度的周期、调度的位置等信息。

AUTOSAR 架构图如图1所示。

2 信息提取

在生成RTE 模块的代码之前,需要首先获取相应的输入信息,例如软件组合描述、组件端口及连接关系描述、Runnable 优先级等。

2.1 软件组合描述

Composition.arxml 是软件组合的描述文件,它描述了软件组件之间端口的连接关系。从模型生成的ARXML 和描述基础软件接口的ARXML 中读取发送端口PPort 和接收端口RPort 的信息,然后将端口名称后缀相同的端口连接到一起,例如将模型Model1中的PPort 端口psr_Test1 和模型Model2 中的RPort 端口rsr_Test1连接到一起,并将这个连接关系按照ARXML 文件的格式生成到Composition.arxml 文件中,生成完的文件如图2所示。

2.2 Runnable相关信息提取

从模型生成的ARXML 中获取每个Runnable 中使用的组件端口的信息。从描述调度任务的ARXML 文件中读取每个任务调度对应的优先级和调度的核,然后结合任务调度列表,提取出每个Runnable 对应的优先级和运行的核。从而可以得出每个Runnble 中使用的组件端口的优先级和运行的核。

2.3 组件端口分类

一般常用的组件端口有Send-Receive 类型和Client-Server 类型。从模型生成的ARXML 和描述基础软件接口的ARXML 中读取所有的组件端口的信息并按照这两种类型分类存放。

根据通信类型的不同,RTE 最多可以支持1:n、n:1 和1:1 三种模式。按照不同的模式,从Composition.arxml 文件中读取所有组件端口的连接关系并按照1:1、1:n、n:1 三种关系分类存放。

图1:AUTOSAR 架构图

3 代码生成

3.1 1:1连接关系的代码生成

1:1 连接关系是指有一个发送端口PPort 和一个接收端口RPort的连接关系。这种连接关系的代码生成相对来说比较简单。首先需要判断PPort 和RPort 在Runnable 中是否都有使用,如果是,则需要将两个组件端口对应的函数定义都生成,如果不是,则只生成用到的组件端口的定义即可。

组件端口对应的函数定义根据所运行的核、类型、传递数据类型的维数的不同而不同。根据这些属性的不同,可以分为如下几种情况,在以下描述中以Model1 中Runnable 使用的发送端口psr_Test1 和Model2 中Runnable 使用的接收端口rsr_Test1 为例。

(1)如果PPort 和RPort 在Runnable 中都有使用,并且运行的核是相同的,Port 口的类型为Send-Receive 类型,传递数据类型的维数为1,那么生成的函数定义如下:

Model1 中Runnable 使用的发送端口psr_Test1 生成的函数定义会生成到Rte_Model1.h 文件中,定义为一个Rte_Write_ rsr_Test1_Test1 的宏函数,在这个宏函数中写RTE 中间变量的值。Model2 中Runnable 使用的接收端口rsr_Test1 生成的函数定义会生成到Rte_Model2.h 文件中,定义为Rte_Read_rsr_Test1_Test1 的宏函数,在这个宏函数中读RTE 中间变量的值。其中生成的RTE 中间变量会放到运行的核对应的RAM 区中。

(2)如果PPort 和RPort 在Runnable 中都有使用,并且运行的核是相同的,Port 口的类型为Send-Receive 类型,传递数据类型的维数为多维,那么生成的函数定义如下:

图2:软件组合

Model1 中Runnable 使用的发送端口psr_Test1 生成的函数定义会生成到Rte_Model1.h 文件中,定义为一个Rte_Write_psr_Test1_Test1 的宏函数,这个宏函数指向函数Rte_Write_Model1_psr_Test1_Test1 的定义;Model2 中Runnable 使用的接收端口rsr_Test1 生成的函数定义会生成到Rte_Model2.h 文件中,定义为Rte_Read_rsr_Test1_Test1 的宏函数,这个宏函数指向函数Rte_Read_Model1_psr_Test1_Test1 的定义。函数Rte_Write_Model1_psr_Test1_Test1(data)和Rte_Read_Model1_psr_Test1_Test1(data)的定义会在Rte.c 中生成。在这两个函数中分别实现RTE 中间变量数组的读写。其中生成的RTE 中间变量数组会放到运行的核对应的RAM 区中。

(3)如果PPort 和RPort 在Runnable 中都有使用,并且运行的核是不同的,组件端口的类型为Send-Receive 类型,那么生成的函数定义跟情形2)中的内容类似,其中文件Rte_Model1.h 和Rte_Model2.h 的内容是相同的。在文件Rte.c 中生成的函数Rte_Write_Model1_psr_Test1_Test1(data)和Rte_Read_Model1_psr_Test1_Test1(data)的定义分别指向两个IOC 的读写函数。如果是1 维的数据传递,这两个IOC 的读写函数在Ioc.h 中实现,分别实现IOC 中间变量的读写。如果是多维的数据传递,这两个IOC 的读写函数在Ioc.c 中实现,分别实现IOC 中间数组变量的读写。其中生成的IOC 中间变量或数组一般会放在共用RAM 中。

(4)如果PPort 或RPort 只有一个在Runnable 中有使用,那么根据上述情形1)、2)、3),只生成使用的端口定义即可。如果两个端口都未使用,则不需要生成定义函数。

(5)如果为Client-Server 类型的组件端口交互,且RPort 在Runnable 中有使用,则需要在Rte_Model2.h 中生成Rte_Read_rsr_Test1_Test1 的宏函数,这个宏函数指向函数Rte_Call_Model1_psr_Test1_Test1 的定义。函数Rte_Call_Model1_psr_Test1_Test1 的定义会在Rte.c 中生成,在该函数中实现对Client 端函数的调用。

3.2 1:n连接关系的代码生成

1:n 连接关系是指有一个PPort,多个RPort 的连接关系。在生成RTE 代码的时候可参考上述3.1 章节中不同的情形。但是跟1:1的连接关系代码生成不同的是,如果PPort 跟RPort 都在一个核,那么生成一个Rte 变量。如果PPort 跟RPort,有的在一个核,有的在不同的核,生成两个变量,同核之间的数据传递用RTE 变量,不同核之间的数据传递用IOC 变量。如果PPort 跟RPort 都在不同的核,那么生成一个Rte 变量。RTE 变量放到所在核对应的RAM 中,IOC 变量放在共用RAM 中。

3.3 n:1连接关系的代码生成

n:1 连接关系是指有多个PPort,一个RPort 的连接关系。在生成RTE 代码的时候可参考上述3.2 章节中不同的情形。但是跟1:n的连接关系代码生成不同的是,如果PPort 跟RPort 有的在一个核,有的在不同的核,则生成一个IOC 变量。

3.4 没有连接关系的代码生成

当上述连接关系的代码都生成完毕之后,检查Runnable 用到的组件端口对应的函数是否还有未定义的。如果有未定义的,那么这个组件端口是没有连接关系的端口,可参照3.1 中的方法完成组件端口对应函数的定义。

4 结论

本文按照软件组件之间端口的连接关系,分别按照1:1、1:n、n:1和无连接关系的顺序,可以实时生成RTE 模块的源代码。当SWC之间的连接关系改变时,也可以做到RTE 模块代码的快速生成,对于符合AUTOSAR 架构的项目的开发,具有重要的意义。

猜你喜欢
代码生成端口组件
无人机智能巡检在光伏电站组件诊断中的应用
新型碎边剪刀盘组件
Lustre语言可信代码生成器研究进展
U盾外壳组件注塑模具设计
端口阻塞与优先级
代码生成技术在软件开发中的应用
基于XML的代码自动生成工具
初识电脑端口
风起新一代光伏组件膜层:SSG纳米自清洁膜层
8端口IO-Link参考设计套件加快开发速度