Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Преобразование форматов с плавающей точкой
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Kosh
Как осуществить преобразование форматов с плавающей точкой 32разрядные-в-16разрядные и 16-в-32, на языке си ?
CeDeX
Поясните пожалуйста, что Вы будете делать с числом, когда приведете его к 16-бит. формату? - лично я не видел компиляторов, которые поддерживали бы операции над числами с пл.точкой размером 16 бит. 24 бита видел (HI*TECH PI*CC), а 16 нет.
Поэтому сдается мне, что Вам придется не только преобразование писать, но и саму 16-бит. математику.

Кстати не совсем понимаю, зачем Вам 16 бит, ведь даже у 24-битного числа с пт - точность всего около 5 значащих десят. цифр, а у 16-битного и того меньше.
Samrat
Пожалуйста поподробнее - какой контроллер, какой компилятор.
Kosh
Мне просто надо принять по ком порту число, грубо говоря от дсп процессора(ШАРК), и преобразовать его в обычный флоат, а потом передать в него такой же 16 битный флоат, у меня процессор MCs51, компилятор кейл.
Miron
Цитата(Kosh @ Feb 22 2005, 08:02)
Мне просто надо принять по ком порту число, грубо говоря от дсп процессора(ШАРК), и преобразовать его в обычный флоат, а потом передать в него такой же 16 битный флоат, у меня процессор MCs51, компилятор кейл.
*


У ШАРК- 32-bit IEEE floating-point
У СИ Кейла 32-bit IEEE-floating-point

Так что никаких проблем быть не должно мне не понятно откуда у вас
16 битный флоат
По видимому вы организуете обмен по последовательному порту
между двумя процессорами
Небольшой пример преобразования после приема данных


union {unsigned char VarByte[4];
float VarFloat;
}VarUn;
unsigned char BufChar[4];//Типа буфер приема передачи

for(i=0;i<4;i++)
{VarUn.VarByte[i]=BufChar[i];
}
VarUn.VarFloat - в результате содержит значение float
аналогично в обратную сторону
Если передача 16 разрядная надо только
скорректировать тип переменных и организацию цикла
Kosh
Я так и делаю когда принимаю, нормальный флоат, но мне передают 16 битный флоат двумя байтами, так что приведённый више код не поможет. А шарки помимо стандактного 32 битного также поддерживают укороченый формат, вот выдержка из "ФОРМАТЫ ДАННЫХ ПРОЦЕССОРОВ SHARC ADSP-21000"
Цитата
УКОРОЧЕННЫЙ ФОРМАТ ДАННЫХ С ПЛАВАЮЩЕЙ ТОЧКОЙ
Процессоры ADSP2106x поддерживают 16-разрядный тип данных с плавающей
точкой и выполняют команды преобразования форматов. Укороченный формат данных с
плавающей точкой содержит 11-разрядную мантиссу, 4-разрядный порядок и знаковый бит,
как показано на рис. С3. 16-разрядные числа размещаются в младших 16 разрядах 32-битного
формата.
15 14 11 10 0
S е3 e0 1 . f10 f0
Скрытый бит Десятичная точка
Рис. С3. 16-разрядный укороченный формат данных с плавающей точкой
Преобразование форматов с плавающей точкой 32-в-16 и 16-в-32 выполняется за 1
цикл при помощи команд устройства сдвига FPACK и FUNPACK соответственно (см.
описание этих команд в справочнике по вычислительным операциям).
Miron
Тогда Вам скорее всего придется самому писать программу преобразования форматов или при отправке данных с ADSP2106x преобразовывать их в 32 битный флоат
Kosh
К сожалению я не имею доступа к программе дсп.
bialix
может ссылка на описание 32-х разрядного float поможет?
сделать перекодировку ручками из 16 в 32 не составит большого труда

http://onembedding.com/info/float/
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.