From 8ab16b6af041ffd756c66e05bfc3068064dcda06 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Tue, 29 Dec 2015 20:44:55 +0200 Subject: [PATCH] esp8266: Add custom _assert() function. Enabling standard assert() (by removing -DNDEBUG) produces non-bootable binary (because all messages go to .rodata which silently overflows). So, for once-off debugging, have a custom _assert(). --- esp8266/esp_mphal.c | 8 ++++++++ esp8266/mpconfigport.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/esp8266/esp_mphal.c b/esp8266/esp_mphal.c index 1a46c5f243..cc0eb3eae1 100644 --- a/esp8266/esp_mphal.c +++ b/esp8266/esp_mphal.c @@ -30,6 +30,8 @@ #include "uart.h" #include "esp_mphal.h" #include "user_interface.h" +#include "py/obj.h" +#include "py/mpstate.h" extern void ets_wdt_disable(void); extern void wdt_feed(void); @@ -98,3 +100,9 @@ void mp_hal_delay_ms(uint32_t delay) { void mp_hal_set_interrupt_char(int c) { // TODO } + +void __assert_func(const char *file, int line, const char *func, const char *expr) { + printf("assert:%s:%d:%s: %s\n", file, line, func, expr); + nlr_raise(mp_obj_new_exception_msg(&mp_type_AssertionError, + "C-level assert")); +} diff --git a/esp8266/mpconfigport.h b/esp8266/mpconfigport.h index 1f823c02e9..1f7ab09e27 100644 --- a/esp8266/mpconfigport.h +++ b/esp8266/mpconfigport.h @@ -113,3 +113,5 @@ extern const struct _mp_obj_module_t mp_module_machine; #define MICROPY_HW_BOARD_NAME "ESP module" #define MICROPY_HW_MCU_NAME "ESP8266" #define MICROPY_PY_SYS_PLATFORM "ESP8266" + +#define _assert(expr) ((expr) ? (void)0 : __assert_func(__FILE__, __LINE__, __func__, #expr))