Итак, отказ от ответственности, я использую Ada только несколько недель ... Я ожидаю, что это приведет к ошибке noob, вызывающей это.
Итак, (анонимный) код у меня есть ...
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Containers.Synchronized_Queue_Interfaces;
with Ada.Containers.Bounded_Synchronized_Queues;
procedure Hello is
type ID_Type is ( Invalid_Id,
Config_Id);
for ID_Type use ( Invalid_Id => 16#00#,
Config_Id => 16#11# );
for ID_Type'Size use 8;
type Config_Type is
record
data : Integer;
end record;
type Data_Type (i : ID_Type := Invalid_Id) is
record
Id : ID_Type := i;
case i is
when Invalid_Id => null;
when Config_Id => config : Config_Type;
when others => null;
end case;
end record with Unchecked_Union, Convention => C;
package Queue_Interface is
new Ada.Containers.Synchronized_Queue_Interfaces(Data_Type);
package Data_Queue is
new Ada.Containers.Bounded_Synchronized_Queues
( Queue_Interfaces => Queue_Interface,
Default_Capacity => 1);
Queue_Array : array(1..1) of Data_Queue.Queue;
begin
Put_Line("Queue_Array(1)'Size = " & Integer'Image(Queue_Array(1)'Size));
end Hello;
В онлайн-компиляторе (GNAT 7.1.1) это вызывает: повышение STORAGE_ERROR: s-intman.adb: 136 явное повышение
Использование по назначению для интерфейсас драйверами уровня С, извлекающими данные из последовательного порта.(Отсюда unchecked_union и другие предложения представления)
Попытался обернуть с помощью Indefinite_Holder, предполагая, что неопределенная проблема была из типа Unconstrained ... и получал ту же ошибку.Думал, что мне это не понадобится, потому что, хотя это неограниченный вариант, он имеет определенные размеры.В любом случае, то же самое.
Также стоит отметить, что: test1: array (ID_Type) Data_Type;- работает test2: Data_Queue.Queue;- работает test3: массив (1 .. 2) Data_Queue.Queue;- Storage_Error
Что я делаю не так?