如何在C代码中使用ApplicationDataTypes

时间:2017-09-05 13:25:12

标签: autosar

根据我的理解,ApplicationDataType被引入AUTOSAR第4版以设计独立于底层平台的软件组件,因此可在不同的项目和应用程序中重复使用。 但是这样的SW-C背后的实现如何才能与平台无关?

用例示例:您希望设计和实现一个用作FiFo的SW-C。您有一个输入数据端口,一个内部缓冲区和一个输出数据端口。您可以通过使用“抽象”ApplicationDataType在不知道数据的数据类型的情况下实现此目的。 通过将一个变量的ApplicationDataType作为PortInterface的一部分,迟早必须将此ApplicationDataType映射到RTE-Generator的ImplementationDataType。

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

来自AUTOSAR_TPS_SoftwareComponentTemplate.pdf

  

ApplicationDataType从应用程序的角度定义数据类型   视图。特别是在“物理”状态出现时应使用它   股份。

     

ApplicationDataType代表一组值,如   应用程序模型,例如度量单位。它不考虑   实施细节,例如位大小,字节序等。

     

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