1、接口类型
在前面 《分层软件架构_总览》_点击跳转中,简要介绍了CP_AUTOSAR分层软件的架构,其主要分为应用层,运行时环境(RTE)以及基础软件层(BSW)。而软件模块之间的信息交互需要依赖于各自的接口,关于接口的一些规范在AUTOSAR中也有说明,本文将简要介绍接口。
AUTOSAR架构中的接口类型详见下表:
接口类型 | 描述 |
---|---|
AUTOSAR Interface | 定义了SWC、BSW软件模块间信息交互的端口,通过这些端口,模块之间可以交互,实现交互的方式可以局部交互也可以是基于网络的; |
Standardized AUTOSAR Interface | 是一些语法和语义更加符合AUTOSAR标准的“AUTOSAR Interface”,被用于在BSW中的服务层中,接口可供SWC使用; |
Standardized Interface | 没有使用到像"AUTOSAR Interface"的相关规范,而多出现在“C”语言中;因此,这种接口被经常用在同一个ECU上的软件模块之间的信息交互。如果说软件模块使用Standardized Interface通信,那么该通信所经过的路线,不可能会穿过网络(CAN/ETH…); |
2、简化的接口案例说明
从下图可以看出,BSW中软件模块(操作系统 OS /服务/通信以及ECU抽象层)通信的接口为Standardized Interface,未穿过网络;SWC与SWC、SWC与BSW或者是BSW与BSW之间,如SWC与ECU抽象层交互,使用AUTOSAR Interface;SWC访问BSW中的服务层时,则需要通过Standardized AUTOSAR Interface。
3、关于接口的一些规则
3.1、水平接口
服务层、ECU抽象层和复杂驱动层,可以使用水平接口,比如Error Manager模块使用NVRAM模块中接口来存储错误数据。而在μC Abstraction Layer中,不能使用水平接口(除非是由于性能原因,需要通知其它模块的)。
3.2、垂直接口
图标 | 描述 |
---|---|
一层可以去访问下面软件层的所有接口; | |
应避免绕过一个软件层; | |
绕过两个或两个以上的软件层是不允许的,绕过μC Abstraction Layer也是不被允许; | |
一个软件模块可以其它更低层组内的模块,比如SPI总线访问外部硬件; | |
所有层都可以与系统服务层进行交互; |
3.3、软件模块交互矩阵
AUTOSAR基础软件层之间所允许的通信矩阵如下图所示:
该矩阵图按行阅读,绿色勾号 表示允许使用接口;红色 表示不允许使用接口;蓝色三角形 表示限制性使用(只允许回调去使用)。比如:对于最后一行的I/O驱动模块来说,只允许使用系统服务层中的OS,但无法使用其它模块的接口;
4、复杂驱动层的交互
与复杂驱动层之间的交互遵循如下规则:
1、其它软件模块访问CDD:
只有CDD提供一个可以被AUTOSAR软件模块配置的接口,这样才被允许访问。一个典型的例子就是PDU Router:CDD可能会实施一个新总线系统接口模块,那么在配置PDU Router模块时,则需要考虑这些接口。
2、CDD访问其它软件模块:
一样地,只有AUTOSAR软件模块提供可以被CDD访问的接口,这就意味着:
-> 接口被定义为可以重入(re-entrant)的;
-> 如果使用的是回调例程,那么名称则是可以被配置的;
-> 不存在对模块状态进行管理的上层模块(并行访问可能会改变状态,而上层模块却没有通知)。
3、CDD可以访问如下软件模块:
-> SPI 驱动;
-> GPT 驱动;
-> 具有重入限制的I/O驱动程序通常只存在于单独的组/通道等,水平访问大多是不被允许的,在配置时需要考虑这一点;
-> NVRAM Manager,其作为内存堆栈的唯一访问点;
-> Watchdog Manager,其作为看门狗堆栈的唯一访问点;
-> PDU Router,其作为通信堆栈的总线和协议的唯一访问点;
-> 总线特定的接口模块,其作为通信堆栈的唯一总线访问点;
-> NM 接口模块,其作为网络管理堆栈的唯一访问点;
-> Communication Manager 和 BSW 模式管理,其作为状态管理的唯一访问点;
-> Det, Dem 和 Dlt;
-> OS,只要所使用的OS对象不被某个软件模块使用即可。对于每个软件模块都有必要检查各自的功能是否被标记为可重入(re-entrant)的。例如,init 函数通常不能重入,只能由ECU State Manager软件模块所调用。
4、多核架构下,有如下补充的规则:
-> BSW软件模块可以被分布到多个核中,而每个核能够执行的BSW服务函数,取决于自身的BswOperationInvokedEvent的任务图;
-> 跨越分区和核的边界,只允许那些使用了主从模式的内部通信机制;
-> 在同一个核中,CDD才能去访问BSW的standardized interfaces;
-> CDD在另外一个核,其可以使用normal port mechanism去访问AUTOSAR interfaces 和 standardized AUTOSAR interfaces;这牵扯到了RTE,其使用了操作系统的IOC机制来发送请求到另外一个核中。
-> 如果CDD想访问另外一个核的BSW的standardized interfaces:
1.要么是CDD所在的核,能够提供standardized interfaces的从服务,并提交这些回调到另外的核;
2.另外一个核需要实施CDD的stub part(一个接口或者占位符,用于与其他软件模块交互),并使用OS的IOC机制(类似于RTE层所做的)去组织通信;