реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Преобразование форматов с плавающей точкой
Kosh
сообщение Feb 21 2005, 10:40
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 21-02-05
Пользователь №: 2 793



Как осуществить преобразование форматов с плавающей точкой 32разрядные-в-16разрядные и 16-в-32, на языке си ?
Go to the top of the page
 
+Quote Post
CeDeX
сообщение Feb 21 2005, 12:52
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 4-11-04
Из: Омск
Пользователь №: 1 035



Поясните пожалуйста, что Вы будете делать с числом, когда приведете его к 16-бит. формату? - лично я не видел компиляторов, которые поддерживали бы операции над числами с пл.точкой размером 16 бит. 24 бита видел (HI*TECH PI*CC), а 16 нет.
Поэтому сдается мне, что Вам придется не только преобразование писать, но и саму 16-бит. математику.

Кстати не совсем понимаю, зачем Вам 16 бит, ведь даже у 24-битного числа с пт - точность всего около 5 значащих десят. цифр, а у 16-битного и того меньше.


--------------------
-- Если б мишки были пчелами... (с) --
Go to the top of the page
 
+Quote Post
Samrat
сообщение Feb 21 2005, 16:29
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 36
Регистрация: 24-08-04
Пользователь №: 536



Пожалуйста поподробнее - какой контроллер, какой компилятор.
Go to the top of the page
 
+Quote Post
Kosh
сообщение Feb 22 2005, 05:02
Сообщение #4





Группа: Новичок
Сообщений: 11
Регистрация: 21-02-05
Пользователь №: 2 793



Мне просто надо принять по ком порту число, грубо говоря от дсп процессора(ШАРК), и преобразовать его в обычный флоат, а потом передать в него такой же 16 битный флоат, у меня процессор MCs51, компилятор кейл.
Go to the top of the page
 
+Quote Post
Miron
сообщение Feb 22 2005, 07:26
Сообщение #5


Частый гость
**

Группа: Validating
Сообщений: 149
Регистрация: 11-02-05
Из: Рязань
Пользователь №: 2 574



Цитата(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 разрядная надо только
скорректировать тип переменных и организацию цикла
Go to the top of the page
 
+Quote Post
Kosh
сообщение Feb 22 2005, 07:40
Сообщение #6





Группа: Новичок
Сообщений: 11
Регистрация: 21-02-05
Пользователь №: 2 793



Я так и делаю когда принимаю, нормальный флоат, но мне передают 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 соответственно (см.
описание этих команд в справочнике по вычислительным операциям).
Go to the top of the page
 
+Quote Post
Miron
сообщение Feb 22 2005, 08:31
Сообщение #7


Частый гость
**

Группа: Validating
Сообщений: 149
Регистрация: 11-02-05
Из: Рязань
Пользователь №: 2 574



Тогда Вам скорее всего придется самому писать программу преобразования форматов или при отправке данных с ADSP2106x преобразовывать их в 32 битный флоат
Go to the top of the page
 
+Quote Post
Kosh
сообщение Feb 22 2005, 08:47
Сообщение #8





Группа: Новичок
Сообщений: 11
Регистрация: 21-02-05
Пользователь №: 2 793



К сожалению я не имею доступа к программе дсп.
Go to the top of the page
 
+Quote Post
bialix
сообщение Feb 22 2005, 16:49
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 4-11-04
Из: zp.ua
Пользователь №: 1 046



может ссылка на описание 32-х разрядного float поможет?
сделать перекодировку ручками из 16 в 32 не составит большого труда

http://onembedding.com/info/float/


--------------------
Имей мужество пользоваться своим собственным разумом! (с) И.Кант
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 06:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01431 секунд с 7
ELECTRONIX ©2004-2016