2015-01-30 2 views
1

Я отлаживаю некоторое программное обеспечение, которое было написано в двух частях: одна часть на C++, а другая часть в Ada-, которую я никогда раньше не использовал.Ada- что делать в 'и' диапазоне 'означает/делать?

Во время чтения через некоторые из кода Ada, и ищет переменные, которые содержат particlar данные, я обнаружил, что эти переменные используются в record в for петли, такие как:

for myRecord use 
    record 
     eta at 8 range 0 .. 31; 
     ttg at 16 range 0 .. 63; 
    end record; 

at и range выделены жирным шрифтом в среде IDE (Programming-GNAT Programming Studio), которая, как я полагаю, означает, что они являются ключевыми словами/имеют определенное значение в Ada ... Может кто-нибудь объяснить мне, что это за структура/делает? Имеются ли здесь цифры, связанные с объемом памяти, назначенной переменным/их ячейке памяти?

ответ

8

eta начинается с бит 0 смещения байта 8 с начала записи и продолжается до бит 31; т.е. она занимает 32 бит, начиная с байта 8.

Аналогично, rng занимает 64 бит, начиная с байта 16 бит 0.

ARM 13.5.1, Record Representation Clauses См.

+2

Это доказательство того, что Ada лучше работает на низкоуровневом программировании, чем большинство других языков, поскольку указание такой организации бит для Ады тривиально. Чтобы выполнить ответ Саймона, у вас должно быть отдельное объявление для myRecord ранее в том же пакете. – manuBriot

+0

Спасибо за ответ и комментарий. Да, у меня есть отдельное объявление для 'myRecord' - оно появляется непосредственно перед кодом, который я цитировал, и содержит строки, такие как: eta: SystemTimeTypes.RelativeTime_Type: = 0.0;' внутри определения структуры: 'type myRecord is record' – someone2088

+0

В качестве последующего вопроса ... чуть ниже этого определения записи есть строка: 'для Data_Variant'Size использовать 129 * 8;' Указывает размер для всей записи (т. е. общий объем памяти, который запись и все ее атрибуты могут занять)? Почему Ада должна это делать, если для каждого из атрибутов записи уже был задан определенный размер? Несомненно, он может просто автоматически вычислить общую память, используемую для всех атрибутов записи? – someone2088

Смежные вопросы