Ada 记录表示
Ada record representation
我的记录类型如下:
type Rec_T is record
a : Bit_12_T;
b : Bit_4_T;
end record;
其中 Bit_12_T is mod 2**12
和 Bit_4_T is mod 2**4
。
为了告诉编译器这条记录的精确对齐方式,我使用了for use record
语句。但是,我想在字节之间拆分 a
字段,所以我尝试按如下方式进行:
for Rec_T use record
a at 0 range 0 .. 7; -- The 1st byte
a at 1 range 0 .. 3; -- The 2nd byte
b at 1 range 4 .. 7;
end record;
显然,这不是这样做的方法,因为编译器会抱怨 "component clause is previously given at line ..."。
问题:是否可以在字节之间拆分组件以及如何拆分?如果不行的话,我是不是应该有a_high和a_low,然后用一些位运算把它们合并在一起?
将位置视为位数组,而不是字节序列。因此这应该有效:
for Rec_T use record
a at 0 range 0 .. 11; -- bits 0..7 of the 1st byte and bits 0..3 of the 2nd byte
b at 0 range 12 .. 15; -- bits 4..7 of the second byte
end record;
for Rec_T'Size use 16;
有关详细信息,请参阅 documentation here,特别是页面末尾的示例,它显示了类似的情况。
我的记录类型如下:
type Rec_T is record
a : Bit_12_T;
b : Bit_4_T;
end record;
其中 Bit_12_T is mod 2**12
和 Bit_4_T is mod 2**4
。
为了告诉编译器这条记录的精确对齐方式,我使用了for use record
语句。但是,我想在字节之间拆分 a
字段,所以我尝试按如下方式进行:
for Rec_T use record
a at 0 range 0 .. 7; -- The 1st byte
a at 1 range 0 .. 3; -- The 2nd byte
b at 1 range 4 .. 7;
end record;
显然,这不是这样做的方法,因为编译器会抱怨 "component clause is previously given at line ..."。
问题:是否可以在字节之间拆分组件以及如何拆分?如果不行的话,我是不是应该有a_high和a_low,然后用一些位运算把它们合并在一起?
将位置视为位数组,而不是字节序列。因此这应该有效:
for Rec_T use record
a at 0 range 0 .. 11; -- bits 0..7 of the 1st byte and bits 0..3 of the 2nd byte
b at 0 range 12 .. 15; -- bits 4..7 of the second byte
end record;
for Rec_T'Size use 16;
有关详细信息,请参阅 documentation here,特别是页面末尾的示例,它显示了类似的情况。