Enterprise Architect 不能传递空位域成员
Empty bitfield member cannot be passed by Enterprise Architect
我在 c
中有一个结构如下所示:
typedef union AxisBitFieldStatus{
struct {
BitField32
:7,
actuatorSaturated :1,
:1,
lastIndexInError :2
} bits;
UInt32 all;
} BITS_SERVO_MODE, *P_BITS_SERVO_MODE;
似乎是因为空位域成员(这是合法的c
),企业架构师在逆向代码工程中解析这个文件时会抛出错误。
有没有办法添加一个宏或类似的方法来成功解析这个位域并简单地跳过空成员?
没有办法做到这一点。 EA 的解析规则不能更改。最后的解决方案是找到并为所有空位域成员设置一个名称。因为位域不能有重复的成员(我们在位域中有大量未命名的字段)我们开发了一个这样的宏:
#define VARIABLE_FROM_PARTS_SUB(p1, p2) p1 ## p2
#define VARIABLE_FROM_PARTS(p1, p2) VARIABLE_FROM_PARTS_SUB(p1, p2)
#define __unused_bitfield__ VARIABLE_FROM_PARTS(_b_unused, __COUNTER__)
这让我们可以像这样定义位域:
typedef union AxisServoModeConfiguration {
struct {
BitField32
__unused_bitfield__ :7,
actuatorSaturated :1,
__unused_bitfield__ :1,
lastIndexInError :1,
...
我在 c
中有一个结构如下所示:
typedef union AxisBitFieldStatus{
struct {
BitField32
:7,
actuatorSaturated :1,
:1,
lastIndexInError :2
} bits;
UInt32 all;
} BITS_SERVO_MODE, *P_BITS_SERVO_MODE;
似乎是因为空位域成员(这是合法的c
),企业架构师在逆向代码工程中解析这个文件时会抛出错误。
有没有办法添加一个宏或类似的方法来成功解析这个位域并简单地跳过空成员?
没有办法做到这一点。 EA 的解析规则不能更改。最后的解决方案是找到并为所有空位域成员设置一个名称。因为位域不能有重复的成员(我们在位域中有大量未命名的字段)我们开发了一个这样的宏:
#define VARIABLE_FROM_PARTS_SUB(p1, p2) p1 ## p2
#define VARIABLE_FROM_PARTS(p1, p2) VARIABLE_FROM_PARTS_SUB(p1, p2)
#define __unused_bitfield__ VARIABLE_FROM_PARTS(_b_unused, __COUNTER__)
这让我们可以像这样定义位域:
typedef union AxisServoModeConfiguration {
struct {
BitField32
__unused_bitfield__ :7,
actuatorSaturated :1,
__unused_bitfield__ :1,
lastIndexInError :1,
...