【问题标题】:How to use ApplicationDataTypes in C code如何在 C 代码中使用 ApplicationDataTypes
【发布时间】:2017-09-05 13:25:12
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: autosar


    【解决方案1】:

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

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

    【讨论】:

    • 我现在仔细检查了 AUTOSAR_TPS_SoftwareComponentTemplate.pdf,但找不到上述问题的明确答案。我发现的是这个(而且非常模糊):[TPS_SWCT_01236] 数据类型的大图...... ApplicationDataType 在 M2 上定义 - 为应用程序级别的数据类型提供元模型。它涵盖了数据类型的与应用程序相关的方面。 ApplicationDataType 最终应映射到 ImplementationDataType。
    • @OliverScheid TPS_SWCT_01230 怎么样?还是不够精确?
    • 它没有解释为什么 ApplicationDataType (最终)在生成的(C-)代码中不可用。在我看来,平台抽象的想法似乎没有得到充分考虑。 [TPS_SWCT_01230] 应用程序数据级别⌈ 应用程序数据级别是 ApplicationSwComponentTypes 指定数据类型或原型的通用级别。此级别允许定义从应用程序的角度来看所需的所有数据属性,以便在软件组件之间或软件组件与测量和校准工具之间交换数据。
    • 我倾向于不同意你关于抽象有缺陷的断言?。但是,我将提交一份 RfC,旨在改进这方面的解释。
    • 也许我们这里有一些误解。我不想修改规范。我想要的是生成的代码中可用的 ApplicationDataType(例如,作为 typedef),这样我就可以编写独立于使用的 ImplementationDataType 的代码。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      来自 AUTOSAR_TPS_SoftwareComponentTemplate.pdf

      ApplicationDataType 从应用点定义一个数据类型 看法。尤其是当“物理”存在时,应该使用它 股份。

      ApplicationDataType 表示一组值,如 应用模型,例如测量单位。它不考虑 实现细节,例如位大小、字节序等。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-10
        • 2014-10-07
        • 2013-04-15
        • 2015-08-03
        • 2013-05-09
        • 1970-01-01
        相关资源
        最近更新 更多