/*!
* \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.
*#*
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 */
/*!
* \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).
/*#*
*#* $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.
*#*
}
-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);
#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)
{
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)
{