如何在 Autosar 中使用位域创建联合实现数据类型?

How to create Union Implementation data type with bitfields in Autosar?

我正在探索如何在 AUTOSAR 中创建复杂的数据类型。一直在寻找以下问题,但我还没有找到可以清楚地向我展示方法的问题。

我想以这种形式创建一个 IRV:

union {
    uint8 u8Value;
    struct {
        uint8 bit0 : 1;
        uint8 bit1 : 1;
        ...
    }stMyBits;
}unMyUnion;

根据我自己的调查,我在 SW Data Prop Ref 中找到了所谓的 SwBitsRepresentation,您可以从中指定起始位置和位数。但是,它不起作用,因为 RTE 生成的代码如下所示:

union {
    uint8 u8Value;
    struct {
        uint8 bit0;
        uint8 bit1;
        ...
    }stMyBits;
}unMyUnion;

编译它肯定不会应用所需的位域。

由于缺乏可移植性,AUTOSAR 不支持 C 位域。如果你想实现一个位域语义,你需要定义一个 ImplementationDataType 来聚合一个 SwDataDefProps,而这个 SwDataDefProps 又引用类别 BITFIELD_TEXTTABLECompuMethod

CompuMethod 的定义中,您可以指定位域及其语义。

RTE 生成器将通过生成访问宏来遵循此配置,这些访问宏提供或多或少方便的方式来访问主机变量中的位。

您可以在 AUTOSAR 文档“TPS 软件组件模板”中找到有关类别 BITFIELD_TEXTTABLECompuMethod 定义的更多信息。