X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcfg%2Fdebug.h;h=257682933d3fcf7576e79e8f2d68c79ab05e5066;hb=d86a921be38f9dfe999bfd36bc3a8e76a2ad929f;hp=0c8bfec09e75effc8d830d6acd853ffd36d9f9e4;hpb=4cc44c9888a0336b9d01121ec0b7ad95f4a76195;p=bertos.git diff --git a/bertos/cfg/debug.h b/bertos/cfg/debug.h index 0c8bfec0..25768293 100644 --- a/bertos/cfg/debug.h +++ b/bertos/cfg/debug.h @@ -30,14 +30,23 @@ * * --> * + * \defgroup debug Debugging facilities and macros + * \ingroup core + * \{ + * * \brief Simple debug facilities for hosted and embedded C/C++ applications. * * Debug output goes to stderr in hosted applications. * Freestanding (AKA embedded) applications use \c drv/kdebug.c to output * diagnostic messages to a serial terminal or a JTAG debugger. * - * \version $Id$ * \author Bernie Innocenti + * + * $WIZ$ module_name = "debug" + * $WIZ$ module_configuration = "bertos/cfg/cfg_debug.h" + * $WIZ$ DEBUG = 1 + * $WIZ$ module_depends = "formatwr" + * $WIZ$ module_supports = "not atmega103" */ #ifndef BERTOS_DEBUG_H @@ -129,7 +138,7 @@ void __init_wall(long *wall, int size); #if CPU_HARVARD - #include + #include void kputs_P(const char *PROGMEM str); void kprintf_P(const char *PROGMEM fmt, ...) FORMAT(__printf__, 1, 2); int __bassert_P(const char *PROGMEM cond, const char *PROGMEM file, int line); @@ -155,7 +164,13 @@ #endif /* !CPU_HARVARD */ #if !CONFIG_KDEBUG_ASSERT_NO_TEXT + /** + * Assert a pre-condition on code. + */ #define ASSERT(x) ((void)(LIKELY(x) ? 0 : __bassert(#x, THIS_FILE, __LINE__))) + /** + * Assert a pre-condition and give explanation message when assert fails + */ #define ASSERT2(x, help) ((void)(LIKELY(x) ? 0 : __bassert(help " (" #x ")", THIS_FILE, __LINE__))) #else #define ASSERT(x) ((void)(LIKELY(x) ? 0 : __bassert("", THIS_FILE, __LINE__))) @@ -168,15 +183,24 @@ * The assumption here is that valid pointers never point to low * memory regions. This helps catching pointers taken from * struct/class memebers when the struct pointer was NULL. + * + * \see ASSERT_VALID_PTR_OR_NULL() */ - #define ASSERT_VALID_PTR(p) ((void)(LIKELY((p) >= 0x200) ? 0 : __invalid_ptr(p, #p, THIS_FILE, __LINE__))) + #define ASSERT_VALID_PTR(p) ((void)(LIKELY((void *)(p) >= (void *)CPU_RAM_START) \ + ? 0 : __invalid_ptr(p, #p, THIS_FILE, __LINE__))) /** * Check that the given pointer is not pointing to invalid memory. * + * \note The check for invalid memory is architecture specific and + * conservative. The current implementation only checks against + * a lower bound. + * * \see ASSERT_VALID_PTR() */ - #define ASSERT_VALID_PTR_OR_NULL(p) ((void)(LIKELY((p == NULL) || ((p) >= 0x200)) ? 0 : __invalid_ptr((p), #p, THIS_FILE, __LINE__))) + #define ASSERT_VALID_PTR_OR_NULL(p) ((void)(LIKELY((p == NULL) \ + || ((void *)(p) >= (void *)CPU_RAM_START)) \ + ? 0 : __invalid_ptr((p), #p, THIS_FILE, __LINE__))) #if !CONFIG_KDEBUG_DISABLE_TRACE #define TRACE __trace(__func__) @@ -310,4 +334,6 @@ #endif /* _DEBUG */ +/** \} */ // defgroup debug + #endif /* BERTOS_DEBUG_H */