Float to String ?

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Float to String ?

Сообщение FireProoF »

Здравствуйте! Задался вопросом вывода на дисплей значений переменных. Везде советуют использовать sprintf(), но она тянет за собой кучу обвязки и медленная. Нашел такую статью, где протестированны другие методы конвертации. Пытаюсь содрать my_ftoa(), но возникла проблема...Не суть.
Хочу спросить у Вас: "Кто чем пользуется? Может есть решение попроще?".
P.S. stm32f103 + keil
Реклама
Аватара пользователя
ave101
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Пт янв 02, 2015 14:45:31

Re: Float to String ?

Сообщение ave101 »

Может из этого что-то сделаете.

Код: Выделить всё

// --- Преобразование строки в число ---
void StrTo() {
	number=0;
	ret = 0;
	ret=retstr[0]-0x30;
	number=ret*1000000;
	ret=retstr[1]-0x30;
	number=number+ret*100000;
	ret=retstr[2]-0x30;
	number=number+ret*10000;
	ret=retstr[3]-0x30;
	number=number+ret*1000;
	ret=retstr[4]-0x30;
	number=number+ret*100;
	ret=retstr[5]-0x30;
	number=number+ret*10;
	ret=retstr[6]-0x30;
	number=number+ret;
}

// --- Преобразование числа в строку ---
void ToStr() {
	uint32_t i;
	i=number/1000000;
	number=number-i*1000000;
	retstr[0] = i + 0x30;
	i=number/100000;
	number=number-i*100000;
	retstr[1] = i + 0x30;
	i=number/10000;
	number=number-i*10000;
	retstr[2] = i + 0x30;
	i=number/1000;
	number=number-i*1000;
	retstr[3] = i + 0x30;
	i=number/100;
	number=number-i*100;
	retstr[4] = i + 0x30;
	i=number/10;
	number=number-i*10;
	retstr[5] = i + 0x30;
	retstr[6] = number + 0x30;
}
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Float to String ?

Сообщение ARV »

а, извините, что у вас за проект, что библиотека вам "медленная"? это на ARM-е с его десятками мегагерц и немеряным ОЗУ?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Float to String ?

Сообщение FireProoF »

Проект прост - вывод показаний температурных датчиков на экран. Конечно на моем МК я могу не задумываться о длине кода и скорости его выполнения. Но я хотел научиться делать это как можно оптимизированне.
Поэтому пока буду обрезать дробную часть температуры и выводить как во втором посту.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
es131245
Потрогал лапой паяльник
Сообщения: 369
Зарегистрирован: Пт фев 01, 2013 21:05:30

Re: Float to String ?

Сообщение es131245 »

Преобразуй float в byte и глянь, не IEEE754 ли там находится ;)
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25235
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Float to String ?

Сообщение КРАМ »

А на хрена, извините, температуру считать во флоатах?
:shock:
32-разрядный МК реализует в ЦЕЛЫХ числах (фиксированная точка) аж 9,5 ДЕСЯТИЧНЫХ разрядов.
Это какую точность-разрешение нужно иметь у датчика температуры? :dont_know:
:))) :))) :)))
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Float to String ?

Сообщение ARV »

КРАМ писал(а):32-разрядный МК реализует в ЦЕЛЫХ числах (фиксированная точка) аж 9,5 ДЕСЯТИЧНЫХ разрядов.
да ARM и софт-float пережует и не поперхнется - о чем вообще речь?! AVR и тот float считает с приемлемой для термометра производительностью, а тут ARM!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25235
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Float to String ?

Сообщение КРАМ »

Причем тут производительность АРМа?
Глупости не нужно делать, даже имея высокую производительность.
Аффтар верно думает, что наличие дробной части у чисел - это и есть флоат...
:tea:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Float to String ?

Сообщение ARV »

я, конечно, не претендую на супергениальность, но с моей точки зрения ARM для того и берут, чтобы получить больше простора за те же деньги - по производительности, объему ОЗУ и ПЗУ вместе с периферией. и все это делаетс ровным счетом только для того, чтобы применять подходы "от большого брата", которые на малоресурсных МК неприменимы. рассуждения по поводу глупостей я считаю "от лукавого", ибо для того и простор, чтобы меньше думать о пути...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25235
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Float to String ?

Сообщение КРАМ »

ARV писал(а):для того и простор, чтобы меньше думать о пути...
Думать нужно ВСЕГДА.
Потому что простор рано или поздно закончится (задачи имеют тенденцию к усложнению и ресурсоемкости), а ума при этом не возникнет.
Привычка писать глупый код - это вторая натура.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Float to String ?

Сообщение ARV »

вторая натура (или даже первая) - это постоянно читать нравоучения. а в остальном - каждому своё.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25235
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Float to String ?

Сообщение КРАМ »

:))) :tea:
Аватара пользователя
Myp3ik
Мучитель микросхем
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Re: Float to String ?

Сообщение Myp3ik »

А что это за датчик температуры такой, который выдает результат во Float :shock: ? :)))
Иван Сусанин - первый полупроводник :solder:
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25235
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Float to String ?

Сообщение КРАМ »

Так тож...
:)))
spongebob
Грызет канифоль
Сообщения: 289
Зарегистрирован: Пт мар 20, 2009 12:25:47
Откуда: Ivanovo
Контактная информация:

Re: Float to String ?

Сообщение spongebob »

Ds18b20 допустим выдает два байта, а из них можно сделать float.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Float to String ?

Сообщение Аlex »

spongebob писал(а):а из них можно сделать float
А зачем ? Чтобы потом, для вывода, переводить обратно ? :)
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: Float to String ?

Сообщение Andrew Martin »

Float может понадобиться ежели датчик температуры аналоговый - можно будет калибровать без внешних круток. А так нужно просто задаться необходимой точностью вывода. Если, например, выводить с точностью до десятых, то нужно просто предварительно умножить float число на 10, а потом перевести в целое, а потом уже в строку.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25235
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Float to String ?

Сообщение КРАМ »

Andrew Martin писал(а):Float может понадобиться ежели
Чушь.
Флоат нужен тогда и только тогда, когда диапазон чисел этого требует
Иначе гораздо компактнее и проще делать вычисления с фиксированной точкой.
Для датчика температуры диапазон чисел вообще укладывается в пару байт даже с учетом всяких пересчетов.
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: Float to String ?

Сообщение Andrew Martin »

Чушь?
Ну-ну :)
Посчитай-ка TRUE RMS по N выборкам из 10ти битного АЦП на целых числах, да c возможностью калибровки константой из EEPROM. Особенно интересно как реализуешь извлечение квадратного корня :)))
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25235
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Float to String ?

Сообщение КРАМ »

Andrew Martin писал(а):Особенно интересно как реализуешь извлечение квадратного корня :)))
Лови:

Код: Выделить всё

;--- SQRT (W1:W0 -> W0)
sqrt:
	mov		# 0x8000, W5
	clr		W6
lp_sq:
	ior		W6, W5, W6
	mul.uu	W6, W6, W2
	sub		W0, W2, W4
	subb		W1, W3, W4
	btss		SR, # C
	sub		W6, W5, W6
	lsr		W5, W5
	bra		NC, lp_sq
	mov		W6, W0
	return
Извлечение квадратного корня из 32 разрядного числа.
:tea:
Вы, любезный не поверите, но я ТОЛЬКО ОДИН РАЗ обратился к флоат, да и то для рекурсивного IIR.
Любой FIR (КИХ) ЛЕГКО считается с фиксированной точкой. Причем скорость вычислений едва ли не на порядок выше, чем у флоата.
Просто нужно коэффициенты окна привести к ЦЕЛЫМ...
:)

Код: Выделить всё

;---------------------------
;--- ФНЧ-17
; прореживание через 7 отсчетов
LPF:
	mov		# buf_calc, W10
;--- фильтр 17 порядка
	mov		# psvoffset(tab_FIR), W8
	clr		B, [W8]+=2, W4, [W10]+=2, W5
	do		# 31, end_LPF
		repeat		# 16
			mac		W4*W5, B, [W8]+=2, W4, [W10]+=2, W5
		mov		# psvoffset(tab_FIR), W8
		mov		[W8++], W4
		sub		W10, # 20, W10
end_LPF:	mov		[W10++], W5
	mov		shift_lpf, W0
	and		# 0b11, W0
	mov		# 8, W1
	sub		W1, W0, W0
	sftac		B, W0
	mov		ACCBH, W0
	btsc		ACCBL, # 15
	inc		W0, W0
	mov		W0, [W7]
	return
;---------------------------
Разрядность аккумулятора 40.
Разрядность массива на входе 16
Разрядность коэффициентов окна 16

ЗЫ. Но это все лирика, ведь речь шла о банальном ТЕРМОМЕТРЕ.
Покажите мне диапазон чисел в термометре, который бы потребовал флоат.
:))) :))) :)))
Там даже дробных чисел нет. В принципе.
Ответить

Вернуться в «ARM»