Float to String ?
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Float to String ?
Здравствуйте! Задался вопросом вывода на дисплей значений переменных. Везде советуют использовать sprintf(), но она тянет за собой кучу обвязки и медленная. Нашел такую статью, где протестированны другие методы конвертации. Пытаюсь содрать my_ftoa(), но возникла проблема...Не суть.
Хочу спросить у Вас: "Кто чем пользуется? Может есть решение попроще?".
P.S. stm32f103 + keil
Хочу спросить у Вас: "Кто чем пользуется? Может есть решение попроще?".
P.S. stm32f103 + keil
- Реклама
Re: Float to String ?
Может из этого что-то сделаете.
Код: Выделить всё
// --- Преобразование строки в число ---
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 ?
а, извините, что у вас за проект, что библиотека вам "медленная"? это на ARM-е с его десятками мегагерц и немеряным ОЗУ?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Float to String ?
Проект прост - вывод показаний температурных датчиков на экран. Конечно на моем МК я могу не задумываться о длине кода и скорости его выполнения. Но я хотел научиться делать это как можно оптимизированне.
Поэтому пока буду обрезать дробную часть температуры и выводить как во втором посту.
Поэтому пока буду обрезать дробную часть температуры и выводить как во втором посту.
Re: Float to String ?
Преобразуй float в byte и глянь, не IEEE754 ли там находится 
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25235
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Float to String ?
А на хрена, извините, температуру считать во флоатах?
32-разрядный МК реализует в ЦЕЛЫХ числах (фиксированная точка) аж 9,5 ДЕСЯТИЧНЫХ разрядов.
Это какую точность-разрешение нужно иметь у датчика температуры?

32-разрядный МК реализует в ЦЕЛЫХ числах (фиксированная точка) аж 9,5 ДЕСЯТИЧНЫХ разрядов.
Это какую точность-разрешение нужно иметь у датчика температуры?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Float to String ?
да ARM и софт-float пережует и не поперхнется - о чем вообще речь?! AVR и тот float считает с приемлемой для термометра производительностью, а тут ARM!КРАМ писал(а):32-разрядный МК реализует в ЦЕЛЫХ числах (фиксированная точка) аж 9,5 ДЕСЯТИЧНЫХ разрядов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- КРАМ
- Друг Кота
- Сообщения: 25235
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Float to String ?
Причем тут производительность АРМа?
Глупости не нужно делать, даже имея высокую производительность.
Аффтар верно думает, что наличие дробной части у чисел - это и есть флоат...

Глупости не нужно делать, даже имея высокую производительность.
Аффтар верно думает, что наличие дробной части у чисел - это и есть флоат...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Float to String ?
я, конечно, не претендую на супергениальность, но с моей точки зрения ARM для того и берут, чтобы получить больше простора за те же деньги - по производительности, объему ОЗУ и ПЗУ вместе с периферией. и все это делаетс ровным счетом только для того, чтобы применять подходы "от большого брата", которые на малоресурсных МК неприменимы. рассуждения по поводу глупостей я считаю "от лукавого", ибо для того и простор, чтобы меньше думать о пути...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- КРАМ
- Друг Кота
- Сообщения: 25235
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Float to String ?
Думать нужно ВСЕГДА.ARV писал(а):для того и простор, чтобы меньше думать о пути...
Потому что простор рано или поздно закончится (задачи имеют тенденцию к усложнению и ресурсоемкости), а ума при этом не возникнет.
Привычка писать глупый код - это вторая натура.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Float to String ?
вторая натура (или даже первая) - это постоянно читать нравоучения. а в остальном - каждому своё.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Float to String ?
А что это за датчик температуры такой, который выдает результат во Float
? 
Иван Сусанин - первый полупроводник 
- КРАМ
- Друг Кота
- Сообщения: 25235
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Float to String ?
Так тож...

-
spongebob
- Грызет канифоль
- Сообщения: 289
- Зарегистрирован: Пт мар 20, 2009 12:25:47
- Откуда: Ivanovo
- Контактная информация:
Re: Float to String ?
Ds18b20 допустим выдает два байта, а из них можно сделать float.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Float to String ?
А зачем ? Чтобы потом, для вывода, переводить обратно ?spongebob писал(а):а из них можно сделать float
- Andrew Martin
- Вымогатель припоя
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Re: Float to String ?
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 ?
Чушь?
Ну-ну
Посчитай-ка TRUE RMS по N выборкам из 10ти битного АЦП на целых числах, да c возможностью калибровки константой из EEPROM. Особенно интересно как реализуешь извлечение квадратного корня
Ну-ну
Посчитай-ка 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
Вы, любезный не поверите, но я ТОЛЬКО ОДИН РАЗ обратился к флоат, да и то для рекурсивного 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
;---------------------------Разрядность массива на входе 16
Разрядность коэффициентов окна 16
ЗЫ. Но это все лирика, ведь речь шла о банальном ТЕРМОМЕТРЕ.
Покажите мне диапазон чисел в термометре, который бы потребовал флоат.
Там даже дробных чисел нет. В принципе.


