TRACE(), TRACEMSG(): Reduce code and data footprint.
[bertos.git] / debug.h
diff --git a/debug.h b/debug.h
index fab45824467f3bcf4e6bfde67beae65936217483..a7b58177e9d5d5990611d4dca8cd7c6e98f418c0 100755 (executable)
--- a/debug.h
+++ b/debug.h
@@ -1,8 +1,8 @@
 /*!
  * \file
  * <!--
- * Copyright 2003, 2004 Develer S.r.l. (http://www.develer.com/)
- * This file is part of DevLib - See devlib/README for information.
+ * Copyright 2003, 2004, 2005 Develer S.r.l. (http://www.develer.com/)
+ * This file is part of DevLib - See README.devlib for information.
  * -->
  *
  * \brief Simple debug facilities for hosted and embedded C/C++ applications.
 
 /*#*
  *#* $Log$
+ *#* Revision 1.11  2005/02/16 20:29:48  bernie
+ *#* TRACE(), TRACEMSG(): Reduce code and data footprint.
+ *#*
+ *#* Revision 1.10  2005/02/09 21:50:28  bernie
+ *#* Declare dummy ASSERT* macros as ((void)0) to work around a warning I can't remember any more.
+ *#*
+ *#* Revision 1.9  2005/01/25 08:36:40  bernie
+ *#* kputnum(): Export.
+ *#*
+ *#* Revision 1.8  2005/01/11 18:08:08  aleph
+ *#* Add empty kdump definition for debug off
+ *#*
  *#* Revision 1.7  2004/12/31 17:43:09  bernie
  *#* Use UNUSED_ARG instead of obsolete UNUSED macro.
  *#*
                /* These are implemented in drv/kdebug.c */
                void kdbg_init(void);
                void kputchar(char c);
+               int kputnum(int num);
                void kdump(const void *buf, size_t len);
                void __init_wall(long *wall, int size);
 
-               #ifdef __AVR__
-                       #include <avr/pgmspace.h>
+               #if CPU_HARVARD
+                       #include <mware/pgm.h>
                        void kputs_P(const char *PROGMEM str);
                        void kprintf_P(const char *PROGMEM fmt, ...) FORMAT(__printf__, 1, 2);
                        int __assert_P(const char *PROGMEM cond, const char *PROGMEM file, int line);
+                       void __trace_P(const char *PROGMEM name);
+                       void __tracemsg_P(const char *PROGMEM name, const char *PROGMEM fmt, ...);
                        int __invalid_ptr_P(void *p, const char *PROGMEM name, const char *PROGMEM file, int line);
                        int __check_wall_P(long *wall, int size, const char * PGM_ATTR name, const char * PGM_ATTR file, int line);
                        #define kputs(str)  kputs_P(PSTR(str))
                        #define kprintf(fmt, ...)  kprintf_P(PSTR(fmt) ,## __VA_ARGS__)
                        #define __assert(cond, file, line)  __assert_P(PSTR(cond), PSTR(file), (line))
+                       #define __trace(name)  __trace_P(PSTR(name))
+                       #define __tracemsg(name, fmt, ...)  __trace_P(PSTR(name), PSTR(fmt), ## __VA_ARGS__)
                        #define __invalid_ptr(p, name, file, line)  __invalid_ptr_P((p), PSTR(name), PSTR(file), (line))
                        #define __check_wall(wall, size, name, file, line)  __check_wall_P(wall, size, PSTR(name), PSTR(file), (line))
-               #else /* !__AVR__ */
+               #else /* !CPU_HARVARD */
                        void kputs(const char *str);
                        void kprintf(const char * fmt, ...) FORMAT(__printf__, 1, 2);
                        int __assert(const char *cond, const char *file, int line);
+                       void __trace(const char *name);
+                       void __tracemsg(const char *name, const char *fmt, ...);
                        int __invalid_ptr(void *p, const char *name, const char *file, int line);
                        int __check_wall(long *wall, int size, const char *name, const char *file, int line);
-               #endif /* !__AVR__ */
+
+                       #define TRACE  __trace(__FUNCTION__)
+                       #define TRACEMSG(msg,...) __tracemsg(__FUNCTION__, msg, ## __VA_ARGS__)
+               #endif /* !CPU_HARVARD */
 
                #ifndef CONFIG_KDEBUG_ASSERT_NO_TEXT
                        #define ASSERT(x)         ((void)(LIKELY(x) ? 0 : __assert(#x, THIS_FILE, __LINE__)))
 
                #define ASSERT_VALID_PTR(p)         ((void)(LIKELY((p) >= 0x200) ? 0 : __invalid_ptr(p, #p, THIS_FILE, __LINE__)))
                #define ASSERT_VALID_PTR_OR_NULL(p) ((void)(LIKELY((p == NULL) || ((p) >= 0x200)) ? 0 : __invalid_ptr((p), #p, THIS_FILE, __LINE__)))
-               #define TRACE                       kprintf("%s()\n", __FUNCTION__)
-               #define TRACEMSG(msg,...)           kprintf("%s(): " msg "\n", __FUNCTION__, ## __VA_ARGS__)
 
        #endif /* !OS_HOSTED */
 
 
        #define DB(x)  /* nothing */
        #ifndef ASSERT
-               #define ASSERT(x)  do {} while (0)
+               #define ASSERT(x)  ((void)0)
        #endif /* ASSERT */
-       #define ASSERT2(x, help)             do {} while (0)
-       #define ASSERT_VALID_PTR(p)          do {} while (0)
-       #define ASSERT_VALID_PTR_OR_NULL(p)  do {} while (0)
-       #define ASSERT_VALID_OBJ(_t, _o)     do {} while (0)
+       #define ASSERT2(x, help)             ((void)0)
+       #define ASSERT_VALID_PTR(p)          ((void)0)
+       #define ASSERT_VALID_PTR_OR_NULL(p)  ((void)0)
+       #define ASSERT_VALID_OBJ(_t, _o)     ((void)0)
        #define TRACE                        do {} while (0)
        #define TRACEMSG(x,...)              do {} while (0)
 
 
        INLINE void kdbg_init(void) { /* nop */ }
        INLINE void kputchar(UNUSED_ARG(char, c)) { /* nop */ }
+       INLINE int kputnum(UNUSED_ARG(int, num)) { return 0; }
        INLINE void kputs(UNUSED_ARG(const char *, str)) { /* nop */ }
+       INLINE void kdump(UNUSED_ARG(const void *, buf), UNUSED_ARG(size_t, len)) { /* nop */ }
+
        #ifdef __cplusplus
                /* G++ can't inline functions with variable arguments... */
                #define kprintf(fmt,...) do { (void)(fmt); } while(0)