From 78dc2db2ba7e14a44f00fc07dd37f3323fcaf251 Mon Sep 17 00:00:00 2001 From: Damien George Date: Thu, 9 Mar 2023 13:56:23 +1100 Subject: [PATCH] py/mpconfig: Provide config option for internal printf printer. The C-level printf is usually used for internal debugging prints, and a port/board may want to redirect this somewhere other than stdout. Signed-off-by: Damien George --- py/mpconfig.h | 5 +++++ shared/libc/printf.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/py/mpconfig.h b/py/mpconfig.h index 564580c02d..db9c623f49 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -904,6 +904,11 @@ typedef double mp_float_t; #define MICROPY_USE_INTERNAL_PRINTF (1) #endif +// The mp_print_t printer used for printf output when MICROPY_USE_INTERNAL_PRINTF is enabled +#ifndef MICROPY_INTERNAL_PRINTF_PRINTER +#define MICROPY_INTERNAL_PRINTF_PRINTER (&mp_plat_print) +#endif + // Support for internal scheduler #ifndef MICROPY_ENABLE_SCHEDULER #define MICROPY_ENABLE_SCHEDULER (MICROPY_CONFIG_ROM_LEVEL_AT_LEAST_EXTRA_FEATURES) diff --git a/shared/libc/printf.c b/shared/libc/printf.c index e8db2b999c..6b5373188f 100644 --- a/shared/libc/printf.c +++ b/shared/libc/printf.c @@ -60,13 +60,13 @@ int snprintf(char *str, size_t size, const char *fmt, ...); int printf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); - int ret = mp_vprintf(&mp_plat_print, fmt, ap); + int ret = mp_vprintf(MICROPY_INTERNAL_PRINTF_PRINTER, fmt, ap); va_end(ap); return ret; } int vprintf(const char *fmt, va_list ap) { - return mp_vprintf(&mp_plat_print, fmt, ap); + return mp_vprintf(MICROPY_INTERNAL_PRINTF_PRINTER, fmt, ap); } // need this because gcc optimises printf("%c", c) -> putchar(c), and printf("a") -> putchar('a')