Коллеги!
Вопрос по преобразованию чисел с запятой в строку для последующего вывода оной на экран - более чем частый и постоянный!
Но сама суть в том, что каждый приходит к какому-то методу и хранит его у себя в голове!
Мне, как начинающему радиолюбителю столкнувшемуся с программированием 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)
По самому красивому методу сделаю видеоурок для начинающих
Раздел: AVR