union - BOOL 和 WORD 的联合位映射
问题描述
我试图在一个单词中映射一些位,但我看到编译时 bool 的大小等于一个字节。当我看到正在执行的代码时,每个 BOOL 都是 8 位大小。如何在 struct 或 union 中指定位字段?那是我的代码:
TYPE FAULT_CODE:
STRUCT
fault1,falut2,fault3: BOOL;
END_STRUCT
END_TYPE
TYPE U_fault :
UNION
faultCode: FAULT_CODE;
in: WORD;
END_UNION
END_TYPE
解决方案
回答
您正在寻找的 ST 数据类型是BIT
- 布尔值:8 位
- 位:1位
您只能将数据类型 BIT 用于结构或功能块中的各个变量。可能的值为 TRUE (1) 和 FALSE (0)。
BIT 元素需要 1 位存储空间,您可以使用它来使用其名称来寻址结构或功能块的各个位。按顺序声明的 BIT 元素被合并为字节。与 BOOL 类型相比,这允许您优化内存使用,每种类型至少占用 8 位。然而,位访问需要更长的时间。因此,如果要以指定格式定义数据,则应仅使用数据类型 BIT。
例子
TYPE st_Flags :
STRUCT
Bit1 : BIT;
Bit2 : BIT;
Bit3 : BIT;
Bit4 : BIT;
Bit5 : BIT;
Bit6 : BIT;
Bit7 : BIT;
Bit8 : BIT;
END_STRUCT
END_TYPE
TYPE u_Error :
UNION
_Byte : BYTE;
_Flag : st_Flags;
END_UNION
END_TYPE
推荐阅读
- material-ui - React,Material-UI,网格空项目
- javascript - 设置要下降的列的基值
- c++ - 比较更多 50 个字符串的有效方法
- php - 我正在尝试在 php 中继续未定义的偏移代码
- docker - 运行 docker quickstrat 终端时如何通过预创建检查解决错误?
- ibm-midrange - 在 as400 中交互和提交作业中的数据区域加载不同
- vba - 不能在 vba 上使用硒
- linux-mint - 如果面板变得不可见,如何重置/重新启动 Cinnamon
- javascript - 使用 React 类创建多个按钮
- c - “20”[1] 有什么作用?