如何在 Autosar 中使用位域创建联合实现数据类型?
Posted
技术标签:
【中文标题】如何在 Autosar 中使用位域创建联合实现数据类型?【英文标题】:How to create Union Implementation data type with bitfields in Autosar? 【发布时间】:2019-11-16 02:38:04 【问题描述】:我正在探索如何在 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】:由于缺乏可移植性,AUTOSAR 不支持 C 位字段。如果你想实现一个位域语义,你需要定义一个ImplementationDataType
,它聚合了一个SwDataDefProps
,它又引用了BITFIELD_TEXTTABLE
类别的CompuMethod
。
在CompuMethod
的定义中,您可以指定位域及其语义。
RTE 生成器将通过生成访问宏来支持此配置,这些宏提供了或多或少方便的方式来访问主机变量中的位。
您可以在 AUTOSAR 文档“TPS 软件组件模板”中找到有关 CompuMethod
类别 BITFIELD_TEXTTABLE
的定义的更多信息。
【讨论】:
感谢您的指点!我会尽快深入研究并回到这里! 非常感谢@Uwe!这正是我所需要的。ImplementationDataType
位于 C 代码级别。从那里,我们可以为VALUE
类别的AutosarDataType
定义几个CompuMethod
,在我的例子中是BITFIELD_TEXTTABLE
。 BITFIELD_TEXTTABLE
包含所有必要的属性,例如掩码、上限/下限,当然还有您希望使用COMPU-CONST
属性为每个位指示的含义。以上是关于如何在 Autosar 中使用位域创建联合实现数据类型?的主要内容,如果未能解决你的问题,请参考以下文章