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

Float,Double -> String (avr-gcc)

Добавлено: Вс фев 09, 2014 22:46:03
kobzar
Коллеги!
Вопрос по преобразованию чисел с запятой в строку для последующего вывода оной на экран - более чем частый и постоянный!
Но сама суть в том, что каждый приходит к какому-то методу и хранит его у себя в голове!
Мне, как начинающему радиолюбителю столкнувшемуся с программированием AVR микроконтроллеров, очень сложно на данном
этапе самостоятельно выбрать верный вариант и думаю что я не один...
Так давай те же поделимся опытом? Обсудим методы и варианты?

Прежде всего стоит ли использовать double или float вобще?
(Читал что сильно они тупят камушек...)
Стоит ли использовать встроенные функции, такие как:
dtostrf dtostre (и какая между ними разница?)
sprintf
itoa
Какой отдать предпочтение и почему?

На данный момент у меня два варианта:
1. Набросать свою функцию в которой используя INT и остаток от деления получить значение умноженное на 1000
а потом вывести запятую при помощи sprintf
(как по мне безсмысленный метод)
2. Использовать dtostrf

Проэкт у меня простой, код получается красивый

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

void out_data(uint8_t x, uint8_t y , char text[], uint8_t adc_data, double k){
	unsigned char bufer[5];
	double data = readADC(adc_data)*k;
	dtostrf(data, 5, 2, bufer);
	LcdGotoXYFont(x,y);
	LcdStr(FONT_1X,(unsigned char*)text);
	LcdGotoXYFont(x+strlen(text),y);
	LcdStr(FONT_1X, bufer);
	
}
Так все работает но при компиляции получаю варнинг

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

Warning	1	implicit declaration of function 'dtostrf' [-Wimplicit-function-declaration]
Тут понятно - необходим инклуд -

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

#include <stdlib.h>
Добавляем, компилим - опять варнинг

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

Warning	1	pointer targets in passing argument 4 of 'dtostrf' differ in signedness [-Wpointer-sign]	
При этом - в обоих вариантах код рабочий! В протеусе все отображается! В железе не пробовал еще!
Вопрос - в чем ошибка? Что я упускаю?
(Пользуюсь AVR Studio 4 и 6)

По самому красивому методу сделаю видеоурок для начинающих :)

Re: Float,Double -> String (avr-gcc)

Добавлено: Вт фев 11, 2014 20:12:17
kobzar
Все гениальное просто !
Варнинг был получен по собственной невнимательности
нужно же было использовать не
unsigned char bufer[5];
а
char bufer[5];