diff --git a/Makefile.pseudomodules b/Makefile.pseudomodules index ae55500447..93be127dd7 100644 --- a/Makefile.pseudomodules +++ b/Makefile.pseudomodules @@ -23,6 +23,7 @@ PSEUDOMODULES += schedstatistics PSEUDOMODULES += netif PSEUDOMODULES += saul_default PSEUDOMODULES += saul_gpio +PSEUDOMODULES += printf_float # include variants of the AT86RF2xx drivers as pseudo modules PSEUDOMODULES += at86rf23% diff --git a/cpu/Makefile.include.cortexm_common b/cpu/Makefile.include.cortexm_common index 6537e465ca..be7ec4f4bc 100644 --- a/cpu/Makefile.include.cortexm_common +++ b/cpu/Makefile.include.cortexm_common @@ -95,6 +95,7 @@ include $(RIOTCPU)/cortexm_common/Makefile.include # use the nano-specs of Newlib when available USEMODULE += newlib_nano +export USE_NANO_SPECS = 1 # Avoid overriding the default rule: all: diff --git a/sys/Makefile.include b/sys/Makefile.include index 40844d4350..ae1b736b2d 100644 --- a/sys/Makefile.include +++ b/sys/Makefile.include @@ -63,4 +63,10 @@ ifneq (,$(filter arduino,$(USEMODULE))) include $(RIOTBASE)/sys/arduino/Makefile.include endif +ifneq (,$(filter printf_float,$(USEMODULE))) + ifeq (1,$(USE_NANO_SPECS)) + export LINKFLAGS += -u _printf_float + endif +endif + INCLUDES += -I$(RIOTBASE)/sys/libc/include diff --git a/tests/printf_float/Makefile b/tests/printf_float/Makefile new file mode 100644 index 0000000000..fa6c04a5d2 --- /dev/null +++ b/tests/printf_float/Makefile @@ -0,0 +1,6 @@ +APPLICATION = test_printf_float +include ../Makefile.tests_common + +USEMODULE += printf_float + +include $(RIOTBASE)/Makefile.include diff --git a/tests/printf_float/main.c b/tests/printf_float/main.c new file mode 100644 index 0000000000..6437abfcc5 --- /dev/null +++ b/tests/printf_float/main.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2016 Alexandre Abadie + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief print floating point values test application + * + * This test is supposed to check that floating point values can be + * displayed with printf function. + * + * @author Alexandre Abadie + * + * @} + */ + +#include +#include +#include + +static const char * expected_result = "2016.0"; +static const double floating_point_value = 2016.0317; + +int main(void) +{ + const uint8_t str_len = strlen(expected_result); + char result[str_len]; + snprintf(result, str_len + 1, + "%.f", floating_point_value); + + printf("Value displayed: %s\n", result); + + if (strcmp(result, expected_result) == 0) { + printf("[OK]\n"); + } + else { + printf("[FAILED] Values are not equal:\n" + "actual: %s\n" + "expected: %s\n", result, expected_result); + return 1; + } + + return 0; +}