01开发流程AP AUTOSAR的开发流程(如上图所示): 1、定义服务:输出所需的ServiceInterface, 这属于OEM工作范围。 2、基于AUTOSAR供应商(Vector、ETAS等)的工具链,生成基于Skeleton/Proxy 的Class。 3、实现SWC和使用目标软件平台工具链编译为可执行文件。 4、基于AUTOSAR工具链生成Machine Manifest,描述目标硬件和软件平台环境,并将应用映射到进程。 02案例分析1、服务定义将车辆功能拆解为服务的部分暂不展开,个人认为其跟业务逻辑强相关,跟IT域的方法论没什么太大区别。 首先假设一个服务接口为RadarFusion,如下图所示。 基于AP工具生成Skeleton/ProxySkeleton/Proxy是在CM (Communication Management)选择的基本设计模式。这是软件设计模式里最常用的设计模式之一。AP基本上参考了GENIVI的CommonAPI设计。原因很简单,都是由BMW主导。 做个和比较常见的Publisher/Subscriber模式比较:
Skeleton/Proxy的代码由AUTOSAR工具链自动生成,跟应用相关的主要是一个头文件,如下图所示。 SWC定义和实现在本案例中,两个SWC分别对应一个可执行文件。 服务接口为ap/radar。 RadarService提供输出接口radar_PPort, Fusion提供输入接口radar_RPort。 接下来,怎么去实现RadarService和Fusion两个SWC。 几个关键点需要注意:
注解:
功能安全: 值得注意的是,如果一个SWC是ASIL,其所依赖的POSIX PSE51库也必须是通过ASIL认证。一般来讲,这是由OS供应商提供。另外,一部分C++14的标准库也必须通过ASIL认证。这部分一般由编译器供应商提供。 定义目标硬件平台Machine Manifest对应于流程里步骤3。用于定义目标环境。 从外看,我们可以把机器看做一个抽象的硬件+软件平台和通讯接口。硬件包括一个N核CPU。软件平台可以定义为具体OS。通讯接口如上图,可以有一个以太网接口连接在一个以太网上。 1、定义机器状态 比如,我们有如下7种状态定义: "name": "Driving" "name": "Leaving" "name": "Off" "name": "Parking" "name": "Restart" "name": "Shutdown" "name": "Startup" 目的是:每一种机器状态里,可能会激活不同的应用。 2、网络配置 在我们这个RadarFusion案例里,我们假定最简单情况:一个Provider和一个Consumer。 在这里案例里,他们分别部署在不同的ECU上,通过以太网通讯。 首先配置服务发现(Service Discovery,SD)用来交换SD消息。一般是一个multicast地址和UDP端口。 然后是两个应用本身的网络配置: 应用配置Application Manifest应用除了代码本身外,还包含应用配置。 这个案例比较简单,每个应用只有一个进程。每个进程对应自己的可执行文件。 3、定义应用到进程的映射 如上图所示,一个Machine可以有N个进程。每个进程都会对应可执行文件。 ServiceInstance定义这里主要定义SOA通讯怎么映射和部署到transport传输层协议,比如SOME/IP。 1、服务接口部署 这里定义对于一个接口的SOME/IP Service ID, 每个Method ID,Event ID。应该非常清晰。 2、服务实例Service Instance 部署 定义一个服务实例是提供方还是消费方。 3、从服务实例映射到目标硬件Mapping from ServiceInstance to Machine Service Instance可以理解为还在应用的层面,这步将会把一个服务实例映射到目标硬件层面。 下表可以看出,ServiceInstance列以前属于应用层面,而Connector和TCP/UDP端口都属于目标硬件层面。 建模总结下图能比较直观的展示应用配置,目标硬件配置,服务实例配置的对应关系。 |
|