如何在 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_TEXTTABLE
的 CompuMethod
。
在 CompuMethod
的定义中,您可以指定位域及其语义。
RTE 生成器将通过生成访问宏来遵循此配置,这些访问宏提供或多或少方便的方式来访问主机变量中的位。
您可以在 AUTOSAR 文档“TPS 软件组件模板”中找到有关类别 BITFIELD_TEXTTABLE
的 CompuMethod
定义的更多信息。
我正在探索如何在 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_TEXTTABLE
的 CompuMethod
。
在 CompuMethod
的定义中,您可以指定位域及其语义。
RTE 生成器将通过生成访问宏来遵循此配置,这些访问宏提供或多或少方便的方式来访问主机变量中的位。
您可以在 AUTOSAR 文档“TPS 软件组件模板”中找到有关类别 BITFIELD_TEXTTABLE
的 CompuMethod
定义的更多信息。