TRACE(), TRACEMSG(): Reduce code and data footprint.
authorbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 16 Feb 2005 20:29:48 +0000 (20:29 +0000)
committerbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 16 Feb 2005 20:29:48 +0000 (20:29 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@370 38d2e660-2303-0410-9eaa-f027e97ec537

debug.h
drv/kdebug.c

diff --git a/debug.h b/debug.h
index be38e357cf2f707e835ed90cdc3247588bb002a2..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.
@@ -17,6 +17,9 @@
 
 /*#*
  *#* $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.
  *#*
                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 */
 
index 0b62ea65d1f63bc9bf7ebc47f916adbfa831b08f..a8159022c061159c5bcdca5ba930672f1f61eaef 100755 (executable)
@@ -1,9 +1,9 @@
 /*!
  * \file
  * <!--
- * Copyright 2003, 2004 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 2003, 2004, 2005 Develer S.r.l. (http://www.develer.com/)
  * Copyright 2000, 2001, 2002 Bernardo Innocenti <bernie@codewiz.org>
- * This file is part of DevLib - See devlib/README for information.
+ * This file is part of DevLib - See README.devlib for information.
  * -->
  *
  * \brief General pourpose debug support for embedded systems (implementation).
@@ -15,6 +15,9 @@
 
 /*#*
  *#* $Log$
+ *#* Revision 1.21  2005/02/16 20:29:48  bernie
+ *#* TRACE(), TRACEMSG(): Reduce code and data footprint.
+ *#*
  *#* Revision 1.20  2005/01/25 08:36:40  bernie
  *#* kputnum(): Export.
  *#*
@@ -293,19 +296,14 @@ void kputchar(char c)
 }
 
 
-void PGM_FUNC(kprintf)(const char * PGM_ATTR fmt, ...)
+void PGM_FUNC(kvprintf)(const char * PGM_ATTR fmt, va_list ap)
 {
-
 #if CONFIG_PRINTF
-       va_list ap;
-
        /* Mask serial TX intr */
        kdbg_irqsave_t irqsave;
        KDBG_MASK_IRQ(irqsave);
 
-       va_start(ap, fmt);
        PGM_FUNC(_formatted_write)(fmt, __kputchar, 0, ap);
-       va_end(ap);
 
        /* Restore serial TX intr */
        KDBG_RESTORE_IRQ(irqsave);
@@ -315,6 +313,14 @@ void PGM_FUNC(kprintf)(const char * PGM_ATTR fmt, ...)
 #endif /* CONFIG_PRINTF */
 }
 
+void PGM_FUNC(kprintf)(const char * PGM_ATTR fmt, ...)
+{
+       va_list ap;
+
+       va_start(ap, fmt);
+       PGM_FUNC(kvprintf)(fmt, ap);
+       va_end(ap);
+}
 
 void PGM_FUNC(kputs)(const char * PGM_ATTR str)
 {
@@ -374,6 +380,22 @@ int PGM_FUNC(__assert)(const char * PGM_ATTR cond, const char * PGM_ATTR file, i
        return 1;
 }
 
+void PGM_FUNC(__trace)(const char * PGM_ATTR name)
+{
+       PGM_FUNC(kputs)(name);
+       PGM_FUNC(kputs)(PSTR("()\n"));
+}
+
+void PGM_FUNC(__tracemsg)(const char * PGM_ATTR name, const char * PGM_ATTR fmt, ...)
+{
+       va_list ap;
+
+       PGM_FUNC(kputs)(name);
+       PGM_FUNC(kputs)(PSTR("(): "));
+       va_start(ap, fmt);
+       PGM_FUNC(kvprintf)(fmt, ap);
+       va_end(ap);
+}
 
 int PGM_FUNC(__invalid_ptr)(void *value, const char * PGM_ATTR name, const char * PGM_ATTR file, int line)
 {