Алгоритм формирования 32-битных чисел с плав. точкой из полученных 16-ти битных integer - C (СИ)
Формулировка задачи:
Здравствуйте!
Прошу Вас помочь с задачей. Уповаю на Вас!
Наш контроллер (НК) опрашивает некое устройство (НУ) по неважно какому протоколу.
В НУ адресное пространство реализовано в виде 16-ти битных регистров, но в них хранятся 32-х битные числа с плавающей точкой в формате IEEE 754.
В результате запроса НК получает десять 16ти битных integer.
Необходимо реализовать алгоритм формирования 32-битных чисел с плав. точкой из полученных 16-ти битных integer.
Алгоритм реализовать на языке ST (можно pascal, Delphi, basic, VBA, С).
Контрольный пример для проверки:
Адресное пространство НУ - R1, R2, R3, R4, …R10.
Переменная Float1 = 1234.5678 располагается в R1 и R2, в двоичном представлении будет 100 0100 1001 1010 0101 0010 0010 1011, а в 16-тиричном 449A522B. То есть результат запроса будет R1=100 0100 1001 1010(449A), R2=0101 0010 0010 1011(522B)
Переменная Float2 = 987654321 располагается в R3, R4;
Переменная Float3 = 0 располагается в R5, R6;
Переменная Float4 = NAN располагается в R7, R8;
Переменная Float5 = 1234.5678 располагается в R9, R10;
Решение задачи: «Алгоритм формирования 32-битных чисел с плав. точкой из полученных 16-ти битных integer»
textual
Листинг программы
unsigned short input_16bit1, input_16bit2; float output_float32; union { struct { unsigned short hi, lo; } s; float f; } u; u.s.hi = input_16bit1; u.s.lo = input_16bit2; output_float32 = u.s.f;
Объяснение кода листинга программы
- Объявляются две переменные типа unsigned short: input_16bit1 и input_16bit2.
- Объявляется переменная типа float: output_float32.
- Объявляется union с именем u.
- В структуре union, в поле s, указываются названия и значения переменных hi и lo.
- Значения переменных hi и lo устанавливаются равными input_16bit1 и input_16bit2 соответственно.
- Значение переменной f устанавливается равным значению переменных hi и lo.
- Значение переменной output_float32 устанавливается равным значению переменной f.