如何在Autosar中使用位域创建Union Implementation数据类型?

时间:2019-11-16 02:38:04

标签: 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;

编译此命令绝对不会应用所需的位域。

1 个答案:

答案 0 :(得分:0)

由于缺乏可移植性,AUTOSAR不支持

C位字段。如果要实现位域语义,则需要定义一个ImplementationDataType,该{聚集的SwDataDefProps聚合了一个指向CompuMethod类的BITFIELD_TEXTTABLE

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

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

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