1

据我了解,AUTOSAR 第 4 版中引入了 ApplicationDataType,以设计独立于底层平台的软件组件,因此可在不同的项目和应用程序中重用。但是,这样一个 SW-C 背后的实现如何独立于平台呢?

用例示例:您想要设计和实现一个用作 FiFo 的 SW-C。您有一个输入数据端口、一个内部缓冲区和一个输出数据端口。您可以通过使用“抽象”ApplicationDataType 来实现这一点,而无需了解数据的数据类型。通过为变量使用 ApplicationDataType 作为 PortInterface 的一部分,您迟早必须将此 ApplicationDataType 映射到 RTE-Generator 的 ImplementationDataType。

最后,RTE-Generator 创建的代码只使用了 ImplementationDataType。在生成的代码中找不到 ApplicationDataType。

这是预期的行为还是 RTE-Generator 的错误?(或者也许我错过了什么?)

4

3 回答 3

1

您永远不会在 C 代码中找到 ApplicationDataType,因为它是在具有物理单元的物理级别上定义的,并且在 C 中的实现级别上可能具有(完全)不同的表示形式。

想象一个测量电压的电池控制传感器。该值可以在 0.0V 和 14.0V 范围内,小数点后有一位(物理)。您可以将其映射到 C 中的浮点数,但浮点运算很昂贵。相反,您使用定点算法,将物理值 0.0 映射到 0、0.1 到 1、0.2 到 2 等等。这种映射由所谓的 compuMethod 描述。

软件组件将始终使用内部表示。那么,为什么需要 ApplicationDataType 呢?使用它们的原因有很多,其中一些是:

  • 方法论:软件组件设计者不需要担心 C 中的实现。其他人可以在稍后阶段定义它。
  • 测量如果您测量该值,则您有一个明确定义的 compuMethod 并且知道 C 中该值的物理解释。
  • 数据转换:如果您连接不同单位的软件组件,例如 km/h 与 mph,Rte 可以自动转换它们之间的内部表示。
  • 常量转换:您可以在物理值上指定一个初始值(例如 10.6V),Rte 会将其转换为内部表示。
  • 可变大小数组:没有动态内存分配,你不能在 C 中拥有可变大小的数组。但是你可以在数组中保留一些(最大)内存并将实际长度存储在单独的字段中。在实现级别上,您将拥有一个具有两个成员(值、长度)的结构。但是在应用程序级别上,您只有一个数组。
于 2017-09-12T20:33:47.650 回答
1

ApplicationDataTypes 不直接出现在代码中,它们由它们的 ImplementationDataType 对应物表示。

在 AUTOSAR 规范(即 TPS 软件组件模板)中解释了在不同抽象级别上定义数据类型的动机。

于 2017-09-05T17:33:32.080 回答
0

来自 AUTOSAR_TPS_SoftwareComponentTemplate.pdf

ApplicationDataType 从应用程序的角度定义数据类型。尤其是当“物理”受到威胁时,应该使用它。

ApplicationDataType 表示在应用程序模型中看到的一组值,例如度量单位。它不考虑位大小、字节顺序等实现细节。

应该可以仅使用 ApplicationDataTypes 对 VFB 系统的应用程序级方面进行建模。

于 2018-12-28T07:33:37.300 回答