650_AUTOSAR_EXP_VFB文档阅读7
作者:互联网
VFB 是一种系统建模和通信概念,它允许将组件分布在 ECU 网络中。 组件和其他组件之间的交互可能性通过组件的端口及其相关接口来描述,这些接口定义了组件提供或需要的操作、数据元素、模式组或校准参数。 通过相同的通信机制,组件可以与标准化的 AUTOSAR 服务(在每个正确配置的 AUTOSAR ECU 上可用)或 ECU 特定的 IO 功能(在具有适当硬件和正确设备的特定 ECU 上可用)交互连接的。
然而,组件的实现需要访问额外的资源,主要是内存(组件的实现通常需要内存来维持其内部状态)和 CPU 能力(组件的实现包含必须根据特定时序安排执行或响应某些事件)。
由于这些调度问题与组件的通信需求密切相关,因此 RTE 必须同时提供这两个方面。 因此,RTE 必须为组件提供一个完整的环境,包括:组件的实现机制(例如在像“C”这样的编程语言中),可以实现如下功能:
为组件的 PPorts 中的数据元素提供值;
读取 / 使用组件 RPorts 中数据元素的值;
访问组件的校准参数;
为组件的 PPorts 中的操作提供实现;
通过组件的 RPorts 调用其他组件提供的操作等;
通过适当的机制调用组件的实现(例如“C”函数)以支持:
固定时间调度(例如:许多组件需要周期性运行);
与通信机制相关的事件(例如 某些组件可能希望在接收到来自其他组件的数据时得到通知); 这个,在我接触的协议栈中可能还是有一些体现的。
与物理事件相关的事件(即触发事件)。
组件实现可以通过适当的机制访问其他公共资源,例如特定于实例的内存;
由于 AUTOSAR ECU 通常是多线程环境,RTE 还必须提供所有公共同步机制,所有的这些组成:Runable。
Runable的概念
原子软件组件的“原子性”是指组件不能分成更小的组件,因此必须映射到单个 ECU 上。
例如,图 3.14 显示了特定 ECU 上映射的应用软件组件“SHCFrontLeft”的逻辑组件视图。 通过其端口,组件表达它需要从其他组件获取哪些信息并提供给其他组件。
然而,组件的实际实现由一组“可运行实体”(也更简单地称为Runable)组成。 “可运行实体”是可以由运行时环境启动的一系列指令(由组件提供)。
上图显示了一个例子。 从逻辑上讲,组件类型“SeatHeatingControl”定义了六个端口,它希望通过这些端口与其他组件或服务进行交互。 另一方面,组件的实现包含两个Runable:“MainCyclic”和“Setting”。 该组件要求 RTE 循环(以特定速率)调用可运行的“MainCyclic”。
该组件要求每当另一个组件调用 PPort“设置”上的操作时调用第二个可运行的“设置”。 runnables 的实现将使用 RTE 提供的操作来实际通过组件的端口进行通信。 例如。 要访问通过 RPort“SeatSwitch”提供给组件的信息“PassengerDetected”,可运行的“Setting”将调用操作“Rte_Read_SeatSwitch_PassengerDetected()”。
一般来说,一个原子软件组件可以只提供一个可运行对象,也可以包含大量可运行对象。 一个 runnable 可以是一段非常简单的代码,它执行一个简单的算法或一个复杂的程序。
“可运行实体”在task的上下文中运行。 任务为“可运行实体”提供公共资源,例如上下文和堆栈空间。 通常,操作系统调度程序有责任在运行时决定哪个task可以在 ECU 的 CPU(或多个 CPU)上运行。 调度程序可以使用许多标准策略(例如,基于优先级的抢占、循环、时间触发……)。
组件的实现和 RTE 的角色(或者应该直白一点成为作用)
总结一下,原子软件组件的实现主要包括三个方面:
- 使用的组件模型(使用端口和端口接口的概念) 将组件与 VFB 级别的其他组件挂钩 一个实现(“代码”);
- 组件的实现以“runnables”结构化,它们是可由 RTE 执行的代码片段。
- 软件组件描述,在这其中组件描述了 RTE 上的需求。 这些包括:
- 需要循环调用哪些可运行对象
- 需要调用哪些可运行对象以响应与通信或其他来源相关的事件
- 组件希望如何访问其端口中的信息或从其他调用它需要的操作的组件
- 组件需要的任何其他资源,例如:AUTOSAR 服务或本地内存。
在正确配置的 AUTOSAR ECU 中,RTE(与正确配置的基本软件配合)将满足组件的要求。 例如,RTE 将:
- 确保在正确的时间调用可运行对象;
- 提供组件访问数据或调用操作所需的功能;
- 提供组件所需的所有其他资源
以上是今天小结的部分,本来以为今天需要看的东西会比较简单。其实,从目前的信息看的确是很简单。但是涉及到的条目还是很多的。一直以来,有点不清楚Runnable到底是一个啥概念,现在基本也清楚了。其实,从C的角度考虑,这种类似于task中被调度的一个函数,也可以是一段代码片段。至于RTE,后期需要努力的地方还有很多,毕竟这部分我是一点都没在工作中接触到过。
标签:RTE,AUTOSAR,调用,端口,VFB,ECU,EXP,组件,运行 来源: https://blog.51cto.com/greyzhang/2986941