我有一个需要 4 位的枚举类型,但是当我声明该类型的变量时,编译器会为该变量分配 8 位。
下面是代码的简化版本。
subtype ab_range_index is word range 0..3;
type ab_buffer_type is array(ab_range_index) of bit;
type Buffer is record
...
var1 : some_buffer_type;
Orig_AB_var : ab_buffer_type;
...
end record;
for Buffer use record
...
var1 at 16 range 0..5;
Orig_AB_var at 16 range 6..9;
...
end record;
...
type AB_type is (A,B);
for AB_type use (A => 0, B => 5);
for AB_type'Size use 4;
...
procedure Proc(AB_buff : ab_buffer_type) is
AB_var : AB_type; -- AB_var'Size returns 8 in debugger.
for AB_var use at AB_buff'Address;
begin
data_valid = AB_var'valid; -- returns false since the variable
-- contains extra bits
...
这一切都适用于以前的 gnat 版本,但不适用于 gnat 4.4.6。我了解 gnat 符合 Ada 规范。
有没有办法强制编译器将上面示例中的 AB_var 设为 4 位?我试过'Object_Size,但它需要是8位的倍数。