我有一个枚举类型需要4位,但是当我声明该类型的变量时,编译器将该变量分配给8位。强制Ada使用枚举类型的最小规格大小与gnat 4.4
下面是代码的简化版本。
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位的倍数。
您是否尝试过设置“对象大小(AB_var)”而不仅仅是类型? – egilhh 2013-05-08 18:19:21
我得到以下编译错误:“原始对象的大小必须是2的范围8-64的幂”谢谢你的想法。 – user1998752 2013-05-08 19:00:12
@ user1998752:这是有道理的,因为只能分配一定数量的架构可寻址字节/位,即1/8,2/16,4/32或8/64 – 2013-05-08 19:48:24