Страница 1 из 1

Преобразование чисел с плавающей точкой ?

Добавлено: Вт июл 06, 2010 20:28:28
FUZZY_
код


unsigned char xdata RxBuffer[0xff],i;
float xdata f_var;



i=0xff;
do{

fvar=(float)((unsigned int) RxBuffer[1]);
fvar*=0.05;
fvar+=4.2;
printf("Ubat=%2.2f",fvar);
i--;
} while(i!=0);

/* при значении RxBuffer[1] : 0-127 все считается прекрасно
* при RxBuffer[1] : 128 - 255 расчет идет не верно
*
*/

Re: Преобразование чисел с плавающей точкой ?

Добавлено: Вт июл 06, 2010 21:03:08
ARV
FUZZY_, вы на форуме задавали с десяток вопросов, и НИ ОДНОГО РАЗА не задали так, чтобы другие смогли понять, что же вы хотите.

конкретно сейчас: что за компилятор? что за платформа? что такое xdata? тут все должны гадать или вы все-таки смилостиветесь и поделитесь сокровенным? :twisted: :kill:

ваш код проверен в WinAVR (c небольшими правками, не меняющими сути) - он рабочий.
вы написали fvar=(float)((unsigned int) RxBuffer[1]); - это на 100% эквивалентно записи fvar = RxBuffer[1]; - ваша запись похожа на паранойю, хотя и вполне работоспособна.

Re: Преобразование чисел с плавающей точкой ?

Добавлено: Ср июл 07, 2010 20:27:43
FUZZY_
Среда KEIL 7 для MCS-51 (i8051, i8052)

data — размещение во внутреннем ОЗУ процессора, младшие 128 байт. Обращение посредством прямой адресации и косвенной адресации через индексные регистры R0, R1 (инструкции процессора пересылки данных MOV @R0).
idata — размещение во внутреннем ОЗУ процессора, все 256 байт. Обращение только посредством косвенной адресации через индексные регистры R0, R1 (инструкции процессора пересылки данных MOV @R0).
bdata — размещение в побитно адресуемой области памяти внутреннего ОЗУ (адреса 0x20-0x2F)
pdata — размещение во внешней памяти. Размер памяти ограничен 256 байтами. Доступ посредством косвенной адресации через индексные регистры R0, R1 (инструкции процессора пересылки данных MOVX @R0).
xdata — размещение во внешней памяти. Размер памяти ограничен 64 КБ. Доступ посредством косвенной адресации через индексный регистр DPTR (инструкции процессора пересылки данных MOVX @DPTR).
code — размещение константных данных в области памяти программ. Размер памяти ограничен 64 КБ. Только чтение данных посредством косвенной адресации через индексный регистр DPTR или регистр PC и указание смещения в аккумуляторе ACC (инструкции процессора MOVC A,@A+DPTR; MOVC A,@A+PC).
far — внешняя память данных, адресация до 16 МБ.
Для определения SFR регистров используются квалификаторы sfr и sfr16 (для байтовых и двухбайтовых переменных соответственно).

Re: Преобразование чисел с плавающей точкой ?

Добавлено: Чт июл 08, 2010 17:12:20
Shplv
Ваш пример для всех значений RxBuffer[1] = (0...255) выполняется верно.
Проверено на Keil mVision 4.02 (C Compiler V9.01).

Re: Преобразование чисел с плавающей точкой ?

Добавлено: Пт июл 09, 2010 20:01:38
FUZZY_
Спасибо . Нашел глюл в своем коде в виде перекрытия переменных.