From 7e5e5361bf5cb88ae7d47c6f05254fd86a02c57c Mon Sep 17 00:00:00 2001 From: deepikabhavnani Date: Fri, 4 Jan 2019 16:45:09 -0600 Subject: [PATCH] Use mbed_error_printf instead of debug for ISR friendly prints Internally in sleep tracing `debug` was used for trace prints, but all sleep API's are ISR safe and used in interrupts. This resulted in hardfaults / errors. Solution is to use `mbed_error_printf` instead for printing on UART --- hal/mbed_sleep_manager.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/hal/mbed_sleep_manager.c b/hal/mbed_sleep_manager.c index c512e44ef7f..492a4ab018c 100644 --- a/hal/mbed_sleep_manager.c +++ b/hal/mbed_sleep_manager.c @@ -20,14 +20,13 @@ #include "platform/mbed_critical.h" #include "sleep_api.h" #include "platform/mbed_error.h" -#include "platform/mbed_debug.h" #include "platform/mbed_stats.h" #include "us_ticker_api.h" #include "lp_ticker_api.h" #include #include #include "platform/mbed_stats.h" - +#include "platform/mbed_interface.h" #if DEVICE_SLEEP @@ -105,14 +104,14 @@ static sleep_statistic_t *sleep_tracker_add(const char *const filename) } } - debug("No free indexes left to use in mbed sleep tracker.\r\n"); + mbed_error_printf("No free indexes left to use in mbed sleep tracker.\r\n"); return NULL; } static void sleep_tracker_print_stats(void) { - debug("Sleep locks held:\r\n"); + mbed_error_printf("Sleep locks held:\r\n"); for (int i = 0; i < STATISTIC_COUNT; ++i) { if (sleep_stats[i].count == 0) { continue; @@ -122,8 +121,8 @@ static void sleep_tracker_print_stats(void) return; } - debug("[id: %s, count: %u]\r\n", sleep_stats[i].identifier, - sleep_stats[i].count); + mbed_error_printf("[id: %s, count: %u]\r\n", sleep_stats[i].identifier, + sleep_stats[i].count); } } @@ -138,7 +137,7 @@ void sleep_tracker_lock(const char *const filename, int line) core_util_atomic_incr_u8(&stat->count, 1); - debug("LOCK: %s, ln: %i, lock count: %u\r\n", filename, line, deep_sleep_lock); + mbed_error_printf("LOCK: %s, ln: %i, lock count: %u\r\n", filename, line, deep_sleep_lock); } void sleep_tracker_unlock(const char *const filename, int line) @@ -147,13 +146,13 @@ void sleep_tracker_unlock(const char *const filename, int line) // Entry for this driver does not exist, something went wrong. if (stat == NULL) { - debug("Unlocking sleep for driver that was not previously locked: %s, ln: %i\r\n", filename, line); + mbed_error_printf("Unlocking sleep for driver that was not previously locked: %s, ln: %i\r\n", filename, line); return; } core_util_atomic_decr_u8(&stat->count, 1); - debug("UNLOCK: %s, ln: %i, lock count: %u\r\n", filename, line, deep_sleep_lock); + mbed_error_printf("UNLOCK: %s, ln: %i, lock count: %u\r\n", filename, line, deep_sleep_lock); } #endif // MBED_SLEEP_TRACING_ENABLED