Ada语言中的位域
以下为位域用法之一,也是比较节省篇幅的办法。就是记录声明前加implicit_Packing编译指令。可以看到在类型的最后使用了WITH约定,意思是让类型的尺寸大小保持为16位(2个字节)。
-- 3个不同长度的位类型声明
type Bit1 is mod 2**1;
type Bit2 is mod 2**2;
type Bit3 is mod 2**3;
-- 编译指令:严格的聚集
pragma Implicit_Packing;
type BlockStatus is record
b0:bit1:=0; -- 保留
bOFW:bit1:=0; -- 溢出
bIOBad:bit1:=0; -- I/O故障
bTout:bit1:=0; -- 超时
b4:bit1:=0; -- 保留
bQ:bit1:=0; -- 品质
bScan:bit1:=0; -- 是否扫描切除
bFST :bit1:=0; -- 是否计算过(品质)
Alarm:bit3:=2#000#; -- 报警类型
bAlarmAck:bit1:=0; -- 是否报警确认过
AlarmPriority:bit3:=0; -- 报警优先级
bAlarmCheck:bit1:=0; -- 是否报警切除
end record with size=>16;