应用层-SWC架构

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个发送APIRte_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_Se
  Releasepinlock();
}

对于每一个需要接收DT_PORTNAME_outputs的SwcName:

  • 在Rte_SwcName.h中声明1个接收APIRte_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应用层软件的详细设计需要涵盖以下几个方面:架构设计、功能设计、界面设计和数据库设计。 首先,架构设计是SWC应用层软件设计的基础。它包括应用的模块划分、不同模块之间的接口和数据传递方式等。在这个阶段,需要将整个应用拆成不同的模块,每个模块负责不同的任务。例如,如果是一个电商应用,模块可以包括用户管理、订单管理、商品管理等。接着是不同模块之间的接口设计,需要明确各个模块之间的调用关系以及如何传递数据。 其次,功能设计包括对各个模块涉及的具体功能进行设计和实现。例如,在用户管理模块中,需要设计用户注册、登录、修改密码等功能。在订单管理模块中,需要设计创建订单、查询订单等功能。 然后是界面设计,需要考虑用户界面的易用性和美观性。界面设计需要考虑用户的使用习惯、场景及其使用频率,根据这些因素设计出易于操作的用户界面。例如,对于一个电商应用,需要设计一个易于搜索商品和下单的用户界面。 最后是数据库设计,需要将各个模块所使用的数据进行建表,并保证数据表之间的关系正确。在设计过程中,需要考虑数据的规范性、完整性和安全性。同时,需要选择适合数据量和读写次数的数据库引擎。 总体而言,SWC应用层软件的详细设计需要综合考虑软件需求、用户体验以及技术实现等因素,才能满足用户和业务需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值