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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
FUZZY_
Потрогал лапой паяльник
Сообщения: 390
Зарегистрирован: Чт сен 24, 2009 17:22:51
Откуда: UK

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

Сообщение 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 расчет идет не верно
*
*/
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

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

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

Мой уютный бложик... заходите!
FUZZY_
Потрогал лапой паяльник
Сообщения: 390
Зарегистрирован: Чт сен 24, 2009 17:22:51
Откуда: UK

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

Сообщение 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 (для байтовых и двухбайтовых переменных соответственно).
Shplv
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пт июн 04, 2010 19:24:26

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

Сообщение Shplv »

Ваш пример для всех значений RxBuffer[1] = (0...255) выполняется верно.
Проверено на Keil mVision 4.02 (C Compiler V9.01).
FUZZY_
Потрогал лапой паяльник
Сообщения: 390
Зарегистрирован: Чт сен 24, 2009 17:22:51
Откуда: UK

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

Сообщение FUZZY_ »

Спасибо . Нашел глюл в своем коде в виде перекрытия переменных.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»