Easyelectronics.ru

Электроника для всех
Текущее время: 16 дек 2019, 07:03

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: быстрый float to string
СообщениеДобавлено: 11 май 2019, 19:10 
Только пришел

Зарегистрирован: 10 апр 2017, 03:38
Сообщения: 5
Здравствуйте, форумчане!

Пробую быстрый алгоритм преобразования float to string (http://we.easyelectronics.ru/Soft/preob ... chkoy.html) на LPC2148. После выполнения :

float value=5.6734E-1;
// Unpack exp and fract(binary format)
Int32U uvalue = *(Int32U*)(&value);

значение uvalue = 0.

Что не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: быстрый float to string
СообщениеДобавлено: 11 май 2019, 20:36 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2633
Откуда: Санкт-Петербург
Вряд ли это оно, но можете попробовать ключ компилятора -fno-strict-aliasing. Или преобразовать тип через union вместо игры с указателями (заодно и оптимизируется лучше).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: быстрый float to string
СообщениеДобавлено: 12 май 2019, 01:21 
Только пришел

Зарегистрирован: 10 апр 2017, 03:38
Сообщения: 5
получается по другому: когда

float value=5.6734E-1;
// Unpack exp and fract(binary format)
Int32U uvalue = *(Int32U*)(&value);

выполняется в main() - все ОК.

когда заносишь в функцию и работаешь с параметром

float value=5.6734E-1;
HD44780_ERROR_CODE_DEF HD44780_float_unpack(value,str,exp10,presc)
{
// Unpack exp and fract(binary)
Int32U uvalue = *(Int32U*)(&value);
//...
}
значение uvalue = 0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: быстрый float to string
СообщениеДобавлено: 12 май 2019, 11:27 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2633
Откуда: Санкт-Петербург
1. А почему во втором примере тоже float value=..., а не вызов HD44780_float_unpack(5.6734E-1,...)? Просто вызов не попал в пример?

2. Насколько я помню ABI, первые аргументы передаются в регистрах. Т.е. со взятием указателя – проблема. Посмотрите предупреждения компилятора и попробуйте переложить value в промежуточную переменную.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB