У меня есть тип записи следующим образом:Ada запись представление
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
поле bewteen байтов, поэтому я пытаюсь сделать это следующим образом:
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;
Очевидно, что это не способ сделать это, как компилятор жалуется, что «положение компонента ранее дано на линии ... ».
Вопрос: Возможно ли разделение компонента между байтами и как это сделать? Если это невозможно, должен ли я иметь a_high и a_low, а затем использовать некоторые битовые операции для их объединения?
Благодарим за предложение. Я уже рассмотрел этот пример; однако он показывает только, как выровнять различные поля в байтах, а не как разделить одно поле между байтами. – NeoSer
@NeoSer Снова прочитайте документы. Нет ограничений относительно 'first_bit' и' last_bit', принадлежащих к одному и тому же байту. Подумайте о базовом хранилище как длинном последовательном массиве бит. –
Ondrej, не должно быть 'для Rec_T'Size использовать 16;'? –