From da22a4a1f7684fe8d82e2b769ca91049f87765e6 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Wed, 22 Jun 2022 10:45:33 +0200 Subject: [PATCH] Having dtostrf on AVR available should enable support for %f. This fixes #7. --- src/dtostrf.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/dtostrf.c diff --git a/src/dtostrf.c b/src/dtostrf.c new file mode 100644 index 0000000..27b2920 --- /dev/null +++ b/src/dtostrf.c @@ -0,0 +1,40 @@ +/* + dtostrf - Emulation for dtostrf function from avr-libc + Copyright (c) 2016 Arduino LLC. All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// This is a default implementation for dtostrf function. +// This file should be used if the standard lib doesn't provide an +// implementation of dtostrf. + +// Create a file called "dtostrf.c" with the following include: +// #include "api/deprecated-avr-comp/avr/dtostrf.c.impl" + +#if defined(ARDUINO_ARCH_AVR) + +#include + +char *dtostrf (double val, signed char width, unsigned char prec, char *sout) { + asm(".global _printf_float"); + + char fmt[20]; + sprintf(fmt, "%%%d.%df", width, prec); + sprintf(sout, fmt, val); + return sout; +} + +#endif /* ARDUINO_ARCH_AVR */