全部学习汇总: https:///GreyZhang/hack_autosar

         继续分析《AUTOSAR_TR_Methodology》。

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_预处理

         表 2.57 概述了 AUTOSAR 变体处理中的绑定时间。

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_元模型_02

         AUTOSAR 元模型中的变体处理支持的绑定时间,其实从上面的表格中也是可以看出来的。

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_xml_03

         元模型中变化点的最新绑定时间的定义

       所有这些绑定时间都可以在标签 Vh.latestBindingTime 中使用,该标签用于定义元模型中变化点的最新绑定时间。

一个变体点的实际绑定时间存储在一个VariationPoint的ConditionByFormula的属性bindingTime中,并且只能使用值SystemDesignTime、CodeGenerationTime、PreCompileTime、LinkTime。

看起来这些要求都是对工具设计的要求。

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_元模型_04

         AUTOSAR 方法使用另外两个绑定时间,InitialBindingTimes 来表征没有绑定变化点的工件,以及 CompileTime 来区分代码的预处理和编译。 最后,FunctionDesignTime 和 Runtime 不在 AUTOSAR 变体处理的范围内,但为了完整性在此处提及。

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_元模型_02

         蓝图变体阶段

         在 BlueprintDerivationTime,模型是从蓝图派生的。 例如,功能设计工具提供了从一组预定义的蓝图派生对象的选项。 有关更多详细信息,请参阅 [19]。 这与本章定义的变体处理不同,但它使用相同的元模型特征(参见 [18])。

BlueprintDerivationTime 超出了本文档的范围,但为了完整性在此提及。

输入工件:模型、需求

输出工件:ARXML

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_预处理

         功能设计阶段

         在FunctionDesignTime,为(控制)系统开发了一个独立于软件架构的模型。 此阶段使用的典型工具是 Matlab/Simulink 或 ASCETMD。

如果函数设计工具支持根据 AUTOSAR 进行变体处理,则除了使用 CodeGenerationTime 或更高版本作为生成的 AUTOSAR 工件中的绑定时间之外别无选择。

         FunctionDesignTime 不在本文档的范围内(只要它不影响校准测量),但为了完整性在此提及。

输入工件:模型、需求

输出工件:功能模型

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_xml_07

         初始绑定阶段

         在 InitialBindingTime,没有任何变体点被绑定。 需要此绑定时间来表示工件中没有绑定 SystemDesignTime 点的状态

         输入工件:模型、需求、功能模型、来自 ARXML 格式蓝图的 AUTOSAR 模型。

输出工件:ARXML。

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_预处理_08

         系统设计阶段

         SystemDesignTime 的特点是以下任务:

• 设计 VFB

• 软件组件类型(接口)

• SWC 原型和 SWC 原型之间的连接

• 设计拓扑

• ECU 和互连网络

• 设计通信矩阵和数据映射

输入工件:功能模型, 需求,来自 ARXML 格式蓝图的 AUTOSAR 模型。

输出工件:ARXML。

看起来,整个基于AUTOSAR架构开发的软件是严重依赖或者强调开发或者配置工具的,这个对于软件开发的灵活度有了很大的限制。而工程师的能力,很大一部分也应该向工具的了解方面做一个侧重才行。

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_元模型_02

         代码生成阶段

         在这一步,生成代码。 这可以手动完成,也可以使用工具完成,或者两者结合。

手写代码通常基于需求文档,而生成的代码通常是从在 FunctionDesignTime 或 SystemDesignTime 设计的模型中创建的。

需求和模型都可能包含变体,但只为那些已选择或稍后需要解决的变体生成代码。

输入工件:ARXML。

输出工件:源代码。

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_元模型_10

         预编译阶段

         在 PreCompileTime,预处理器(例如 C 预处理器)用于进一步自定义代码并将部分代码从编译过程中排除。

这种排除有多种原因:所选变体不需要代码,代码与所选变体不兼容,或代码需要所选变体中不存在的资源。 在此阶段代码中排除的代码在后续阶段将不可用。

PreCompileTime 通常用于手写代码(对于 SystemDesignTime 和 CodeGenerationTime 显然不能生效)或者代码生成后需要绑定系统常量的时候。

输入工件:源代码。

输出工件:绑定源代码。

思考:这里的不兼容究竟是一个什么概念?

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_预处理_11

         编译阶段

在 CompileTime,已经由宏处理器(例如 C 预处理器)处理并去除了所有 PreCompileTime 变化点的源代码被转换为目标代码。 编译器可能会通过删除未使用的代码路径来消除更多变体。

CompileTime 未在 AUTOSAR 元模型中使用,但在 AUTOSAR 方法中使用以区分预处理器和编译器。

输入工件:绑定源代码。

输出工件:目标代码。

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_预处理_12

         链接阶段

         PostBuild 是在ECU 启动时最晚绑定的绑定时间。 换句话说,这就是创建可执行程序和启动 ECU 之间的一切。

ECU 的启动是 PostBuild 绑定,因为显然无法在模型中解析。

输入工件:可执行程序、配置数据集。

输出工件: 无

706_AUTOSAR_TR_Methodology_文档阅读26_变体处理_三_xml_13

         运行时

         启动和初始化之后的一切都是运行时。 运行时的变体处理超出了本文档的范围,但为了完整性在此处提及。

         通过最近的几个章节,基本上对这个变体配置有一定了解了。在我的知识体系里面,变体也终于不再与标定是等同概念了。