本文主要是介绍应用层-SWC架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
应用层-SWC架构
- 0 前言
- 1 SWC设计原理
- 1.1 SWC架构目的
- 1.2 SWC架构方案
- 2 SWC架构实现
- 2.1 通用数据
- Base Type
- Compu Method
- Constants
- 2.2 Data Element和Data Type
- Data Type
- 2.3 PortInterface
- Port Prototype
- Port Interface
- 2.4 Atomic SWC
- Application Component Type
- Application Component Prototype
- 2.5 Composition SWC
- Composition Component Type
- Composition Component Prototype
- 2.6 Runnable Entity
0 前言
>>返回AUTOSAR系列文章目录<<
1 SWC设计原理
1.1 SWC架构目的
在AUTOSAR项目中:
① 项目工程师提出设计需求,并将设计需求分为不同的功能模块,也就是Simulink工程中最上层的EBS、ACC等模块,以任务书形式发给策略工程师
② 策略工程师接到任务,比如要完成EBS模块,首先将EBS模块细分为制动踏板传感器Subsystem、执行电机Subsystem、分析计算Subsystem,又列出每个Subsystem需要收发哪些Variable,以Excel形式发给架构工程师
③ 架构工程师拿着Excel文件,开始在Vector Developer里干下面的工作,完成后将架构文件以arxml形式发给策略工程师,以dpa形式发给底层软件工程师
- 将EBS模块设计为Composition SWC
- 将制动踏板传感器Subsystem、执行电机Subsystem、分析计算Subsystem分别设计为EBS模块下的Atomic SWC
- 将每个Atomic SWC需要的Variable组设计为Port,需要的Variable设计为Port下的Data Element,将Port相互连接
- 将每个Atomic SWC需要的函数设计为Runnable
④ 策略工程师用Simulink打开arxml,开发策略,最终生成ASW部分C代码,发给软件集成工程师
- 每个Composition SWC生成一个文件夹
- 每个Atomic SWC生成一个C文件
- 每个Runnable生成一个函数
- 每个Data Element生成一个变量
⑤ 底层软件工程师用Vector Configurator打开dpa文件,配制AUTOSAR BSW,完成后生成BSW部分代码,发给软件集成工程师
⑥ 软件集成工程师将ASW代码和BSW代码生成HEX、MAP、ELF、A2L等文件,发给标定工程师和测试工程师
1.2 SWC架构方案
SWC架构分为5层结构:
- Composition SWC,对应Simulink的模块System,对应C代码的文件夹,每个模块只要一个,包含数个Atomic SWC
- Atomic SWC,对应Simulink的模块Subsystem,对应C代码的C文件,每个传感器、执行器、分析模块各一个,在Composition SWC下层,包含Runnabl和Port
- Port,Atomic SWC之间的通信通道,有数据传输需求的Atomic SWC之间至少要有一个Port相连,也可以有多个Port相连
- Data Element,Port要传输的Variable,给Runable使用
- Runnable,Atomic SWC内具体功能实现的函数,也是Port、Data Element的实际使用者
为了方便架构设计和结构复用,除了Runnable外,每层又分为实例类和应用类:
- 实例类最终会生成实际的C代码,应用类只在架构设计过程中使用,不产生代码
- 应用类可以帮助设计复用,比如作为Sender的实例Port和作为Receiver的实例Port,传输相同的数据,只需要设计一个应用Port映射两次就可以
- 应用类可以帮助层次之间解耦,比如Atomic SWC设计好后,下面的Port还没设计,先将Atomic SWC关联应用Port,等实例Port设计好了在关联应用Port
2 SWC架构实现
SWC架构设计过程如下:
2.1 通用数据
Base Type
Base Type是C语言所支持的基本数据类型,如boolean、int、uint、float等等,一般不用自己添加
Base Type不能直接用于定义Date Element
Compu Method
Compu Method是Date Element的raw value(2进制数)和physical value之间的换算关系
Constants
在C代码中宏定义一个常量,比如
#define InitValue 0
,通常作为Data Element的Init Value、Invalid Value、Enum Value等等
2.2 Data Element和Data Type
Data Element就是应用层使用的变量,由Data Type创建,专属于特定SWC
Data Type是变量的数据类型
- 实例类是Implementation Data Type,使用这个
- 应用类是Application Data Type,目前没有使用
Data Type
RTE层使用的数据类型就称为Data Type
RTE层使用的所有数据类型都在Rte_Type.h中定义
Data Type分为是Implementation Data Type 和 Application Data Type,目前统一使用Implementation Data Type,简称为DT
DT可分为2种,数组型DT和结构体型DT
数组型DT示例如下:
注意,AUTOSAR禁止直接使用Base Type做数据类型
typedef uint8 rt_uint8;
typedef uint8 rt_uint8_4[4];
结构体型DT示例如下:
结构体型DT通常用DT开头,成员变量可以使BaseType、数组型DT和结构体型DT
typedef struct
{uint8 member1;rt_uint8_4 member2;
}DT_name_type;
2.3 PortInterface
Port传递Data Element的接口
- 实例类是Port Prototype,简称Pp
- 应用类是Port Interface,简称Pi
Port Prototype
Pp有方向,有初值
Pp在指定的CtAp界面,New Receiver Port Prototype或者New Sender Port Prototype创建,需要配置的属性
- 方向Receiver或Sender
- 关联的Pi
Port Interface
Port Interface是一个抽象的通道,每个PortInterface负责在SWC之间传递一个DataElement
由于1个PortInterface只能传递1个DataElement,所以需要将要传递的DataElement打包成一个总的DataElement,通常命名为DT_PORTNAME_outputs
typedef struct
{DT_Aaa_TYPE member1;DT_Bbb_TYPE member2;
}DT_PORTNAME_outputs;
对于每一个需要发送DT_PORTNAME_outputs
的SwcName:
- 在Rte_SwcName.h中声明1个发送API
Rte_Write_SwcName_PORTNAME_outputs()
- 在Rte_SystemApplication_OsCore_Corex.c中实现它
- 在Rte_SwcName.h中将
Rte_Write_SwcName_PORTNAME_outputs()
宏定义为Rte_Write_PORTNAME_outputs()
- 在Rte_SwcName.c中使用
Rte_Write_PORTNAME_outputs(&data)
#define Rte_Write_PORTNAME_outputs Rte_Write_SwcName_PORTNAME_outputs
Rte_Write_SwcName_PORTNAME_outputs(*data)
{GetSpinlock();*data = Rte_SeReleasepinlock();
}
对于每一个需要接收DT_PORTNAME_outputs
的SwcName:
- 在Rte_SwcName.h中声明1个接收API
Rte_Read_SwcName_PORTNAME_outputs()
- 在Rte_SystemApplication_OsCore_Corex.c中实现它
- 在Rte_SwcName.h中将
Rte_Read_SwcName_PORTNAME_outputs()
宏定义为Rte_Read_PORTNAME_outputs()
- 在Rte_SwcName.c中使用
Rte_Read_PORTNAME_outputs(&data)
#define Rte_Read_PORTNAME_outputs Rte_Read_SwcName_PORTNAME_outputs
2.4 Atomic SWC
Atomic SWC是Port和Runnable的封装
- 实例类是Application Component Type,简称CtAp
- 应用类是Application Component Prototype,简称CpAp
Application Component Type
在Application Component Types右击创建,选择属性
- Composition/Atomic ->选择Atomic
- Type -> 选择Application
- Supports multiple instantiation -> 是否支持实例化多个CpAp
Application Component Prototype
在CtCo中右击,选择Composition Component相应CtAp,创建CpAp
- 关联Data Type Map
2.5 Composition SWC
Composition SWC是Atomic SWC的封装
- 实例类是Composition Component Type,简称CtCo
- 应用类是Composition Component Prototype,简称CpCo
Composition Component Type
在Application Component Types右击创建,选择属性
- Composition/Atomic ->选择Composition
- Type -> 选择Application
- Supports multiple instantiation -> 是否支持实例化多个CpCo
Composition Component Prototype
在CtCo中右击,选择Composition Component,创建CpCo
2.6 Runnable Entity
在CpAp中创建,在Vector Developer中关联Task
>>返回AUTOSAR系列文章目录<<
这篇关于应用层-SWC架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!