From f89fd27fa6c599e806772ba44ec987b8583022e0 Mon Sep 17 00:00:00 2001 From: bernie Date: Fri, 18 Feb 2005 11:18:33 +0000 Subject: [PATCH] Fixes for Harvard processors from KSeries. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@372 38d2e660-2303-0410-9eaa-f027e97ec537 --- debug.h | 61 +++++++++++++++-------------------------- drv/kdebug.c | 76 +++++++++------------------------------------------- 2 files changed, 35 insertions(+), 102 deletions(-) diff --git a/debug.h b/debug.h index a7b58177..d6771e8d 100755 --- a/debug.h +++ b/debug.h @@ -17,6 +17,9 @@ /*#* *#* $Log$ + *#* Revision 1.12 2005/02/18 11:18:33 bernie + *#* Fixes for Harvard processors from project_ks. + *#* *#* Revision 1.11 2005/02/16 20:29:48 bernie *#* TRACE(), TRACEMSG(): Reduce code and data footprint. *#* @@ -34,34 +37,6 @@ *#* *#* Revision 1.6 2004/12/08 08:52:00 bernie *#* Save some more RAM on AVR. - *#* - *#* Revision 1.5 2004/12/08 08:04:13 bernie - *#* Doxygen fixes. - *#* - *#* Revision 1.4 2004/12/08 07:29:27 bernie - *#* Fix Doxygen tags. - *#* - *#* Revision 1.3 2004/09/20 03:31:27 bernie - *#* Sanitize for C++. - *#* - *#* Revision 1.2 2004/09/14 21:01:46 bernie - *#* Mark assertions as LIKELY(). - *#* - *#* Revision 1.1 2004/09/14 20:19:47 bernie - *#* Unified debug macros. - *#* - *#* Revision 1.3 2004/09/06 12:11:29 bernie - *#* Merge debug.h with DevLib. - *#* - *#* Revision 1.2 2004/08/13 03:22:07 bernie - *#* Resurrect some debug macros from old projects. - *#* - *#* Revision 1.1 2004/08/12 06:56:35 bernie - *#* Move debug.h from device/ to util/. - *#* - *#* Revision 1.1 2004/08/12 06:52:26 bernie - *#* Factor out a few simple debug macros. - *#* *#*/ #ifndef DEVLIB_DEBUG_H #define DEVLIB_DEBUG_H @@ -95,7 +70,6 @@ #endif #endif #else /* !OS_HOSTED */ - #include #include #endif /* !OS_HOSTED */ @@ -159,6 +133,7 @@ #if OS_HOSTED #include #include + INLINE void kdbg_init(void) { /* nop */ } INLINE void kputchar(char c) { @@ -194,6 +169,9 @@ #define ASSERT_VALID_PTR_OR_NULL(p) ASSERT((((p) == NULL) || ((unsigned long)(p) >= 0x200))) #else /* !OS_HOSTED */ + #include /* CONFIG_KDEBUG_ASSERT_NO_TEXT */ + #include /* CPU_HARVARD */ + /* These are implemented in drv/kdebug.c */ void kdbg_init(void); void kputchar(char c); @@ -206,28 +184,25 @@ 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, ...); + void __trace_P(const char *func); + void __tracemsg_P(const char *func, 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 __trace(func) __trace_P(func) + #define __tracemsg(func, fmt, ...) __tracemsg_P(func, 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 /* !CPU_HARVARD */ void kputs(const char *str); - void kprintf(const char * fmt, ...) FORMAT(__printf__, 1, 2); + 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, ...); + void __trace(const char *func); + void __tracemsg(const char *func, const char *fmt, ...) FORMAT(__printf__, 2, 3); 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); - - #define TRACE __trace(__FUNCTION__) - #define TRACEMSG(msg,...) __tracemsg(__FUNCTION__, msg, ## __VA_ARGS__) #endif /* !CPU_HARVARD */ #ifndef CONFIG_KDEBUG_ASSERT_NO_TEXT @@ -241,6 +216,14 @@ #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__))) + #ifndef CONFIG_KDEBUG_DISABLE_TRACE + #define TRACE __trace(__func__) + #define TRACEMSG(msg,...) __tracemsg(__func__, msg, ## __VA_ARGS__) + #else + #define TRACE do {} while(0) + #define TRACEMSG(...) do {} while(0) + #endif + #endif /* !OS_HOSTED */ /*! diff --git a/drv/kdebug.c b/drv/kdebug.c index a8159022..ee09a747 100755 --- a/drv/kdebug.c +++ b/drv/kdebug.c @@ -15,6 +15,9 @@ /*#* *#* $Log$ + *#* Revision 1.22 2005/02/18 11:18:33 bernie + *#* Fixes for Harvard processors from project_ks. + *#* *#* Revision 1.21 2005/02/16 20:29:48 bernie *#* TRACE(), TRACEMSG(): Reduce code and data footprint. *#* @@ -23,62 +26,6 @@ *#* *#* Revision 1.19 2004/12/31 17:47:45 bernie *#* Rename UNUSED() to UNUSED_ARG(). - *#* - *#* Revision 1.18 2004/12/08 08:52:00 bernie - *#* Save some more RAM on AVR. - *#* - *#* Revision 1.17 2004/10/03 18:41:28 bernie - *#* Restore \version header killed by mistake in previous commit. - *#* - *#* Revision 1.16 2004/10/03 18:40:50 bernie - *#* Use new CPU macros. - *#* - *#* Revision 1.15 2004/09/14 21:03:46 bernie - *#* Use debug.h instead of kdebug.h. - *#* - *#* Revision 1.14 2004/09/06 21:39:56 bernie - *#* Allow partial redefinition of BUS macros. - *#* - *#* Revision 1.13 2004/08/29 22:04:26 bernie - *#* Convert 485 macros to generic BUS macros; - *#* kputchar(): New public function. - *#* - *#* Revision 1.12 2004/08/25 14:12:08 rasky - *#* Aggiornato il comment block dei log RCS - *#* - *#* Revision 1.11 2004/08/24 16:19:08 bernie - *#* kputchar(): New public function; Add missing dummy inlines for \!_DEBUG. - *#* - *#* Revision 1.10 2004/08/04 15:57:50 rasky - *#* Cambiata la putchar per kdebug per DSP56k: la nuova funzione e' quella piu' a basso livello (assembly) - *#* - *#* Revision 1.9 2004/08/02 20:20:29 aleph - *#* Merge from project_ks - *#* - *#* Revision 1.8 2004/07/30 14:26:33 rasky - *#* Semplificato l'output dell'ASSERT - *#* Aggiunta ASSERT2 con stringa di help opzionalmente disattivabile - *#* - *#* Revision 1.7 2004/07/30 14:15:53 rasky - *#* Nuovo supporto unificato per detect della CPU - *#* - *#* Revision 1.6 2004/07/18 21:49:28 bernie - *#* Add ATmega8 support. - *#* - *#* Revision 1.5 2004/06/27 15:20:26 aleph - *#* Change UNUSED() macro to accept two arguments: type and name; - *#* Add macro GNUC_PREREQ to detect GCC version during build; - *#* Some spacing cleanups and typo fix - *#* - *#* Revision 1.4 2004/06/06 18:09:51 bernie - *#* Import DSP56800 changes; Print broken wall bricks in hex. - *#* - *#* Revision 1.3 2004/06/03 11:27:09 bernie - *#* Add dual-license information. - *#* - *#* Revision 1.2 2004/05/23 18:21:53 bernie - *#* Trim CVS logs and cleanup header info. - *#* *#*/ #include @@ -296,7 +243,7 @@ void kputchar(char c) } -void PGM_FUNC(kvprintf)(const char * PGM_ATTR fmt, va_list ap) +static void PGM_FUNC(kvprintf)(const char * PGM_ATTR fmt, va_list ap) { #if CONFIG_PRINTF /* Mask serial TX intr */ @@ -380,18 +327,21 @@ 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) +/* + * Unfortunately, there's no way to get __func__ in + * program memory, so we waste quite a lot of RAM in + * AVR and other Harvard processors. + */ +void PGM_FUNC(__trace)(const char *name) { - PGM_FUNC(kputs)(name); - PGM_FUNC(kputs)(PSTR("()\n")); + PGM_FUNC(kprintf)(PSTR("%s()\n"), name); } -void PGM_FUNC(__tracemsg)(const char * PGM_ATTR name, const char * PGM_ATTR fmt, ...) +void PGM_FUNC(__tracemsg)(const char *name, const char * PGM_ATTR fmt, ...) { va_list ap; - PGM_FUNC(kputs)(name); - PGM_FUNC(kputs)(PSTR("(): ")); + PGM_FUNC(kprintf)(PSTR("%s(): "), name); va_start(ap, fmt); PGM_FUNC(kvprintf)(fmt, ap); va_end(ap); -- 2.25.1