IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Написание модуля для расчёта CRC16, АДА
TarasBer
сообщение 17.02.2011 12:28
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Файл описания:

package CRC16 is

type m16 is mod 2**16;

generic
type TData is private;
function Get_CRC16(Data: TData) return m16;

end CRC16;


Файл реализации:

with ADA.Unchecked_Conversion;

package body CRC16 is

type m8 is mod 2**8;
type TTable is array (m8) of m16;

function Get_Table return TTable is
Result: TTable;
r: m16;
begin
for i in Result'Range loop
r := m16(i);
if (r and 1) = 1 then
r := r/2 xor 16#A001#; --???
else
r := r/2; -- ???
end if;
Result(i) := r;
end loop;
return Result;
end;

CRC16_Table: constant TTable := Get_Table;

function Get_CRC16(Data: TData) return m16 is
type m8_arr is array (1 .. TData'Size) of m8;
pragma Pack(m8_arr);
function Data_To_Arr is new Ada.Unchecked_Conversion(TData, m8_arr); --???
use type m8;

Result: m16;
p: m8_arr := Data_To_Arr(Data);
begin
Result := 16#FFFF#;
for i in p'Range loop
Result := (Result / 2**8) xor CRC16_Table(m8(Result and 16#FF#) xor p(i)); --???
end loop;
return Result;
end;

end CRC16;


Проблемы:
1. Как делать битовые сдвиги? Деление на степень двойки это как-то неправильно в данном случае.
2. m8Arr по размеру никак не хочет совпадать с TData

Сообщение отредактировано: TarasBer - 17.02.2011 15:58


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
TarasBer
сообщение 17.02.2011 16:47
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> TData'Size - это размер TData в битах

То есть дело не в том, что массив байтов забыл упаковаться, он упаковывается сам?

Кстати, Table_CRC16 в данном случае считается компилятором или программой при старте?

Сообщение отредактировано: TarasBer - 17.02.2011 16:52


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.07.2025 13:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"