diff options
-rw-r--r-- | nuttx/include/debug.h | 140 | ||||
-rw-r--r-- | nuttx/include/nuttx/compiler.h | 53 | ||||
-rw-r--r-- | nuttx/lib/Makefile | 7 | ||||
-rw-r--r-- | nuttx/lib/lib_dbg.c | 104 | ||||
-rw-r--r-- | nuttx/sched/os_start.c | 44 |
5 files changed, 296 insertions, 52 deletions
diff --git a/nuttx/include/debug.h b/nuttx/include/debug.h index 651b2cbe8..c76c57313 100644 --- a/nuttx/include/debug.h +++ b/nuttx/include/debug.h @@ -1,7 +1,7 @@ -/************************************************************ +/**************************************************************************** * debug.h * - * Copyright (C) 2007 Gregory Nutt. All rights reserved. + * Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -14,7 +14,7 @@ * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. - * 3. Neither the name Gregory Nutt nor the names of its contributors may be + * 3. Neither the name NuttX nor the names of its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. * @@ -31,24 +31,25 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - ************************************************************/ + ****************************************************************************/ #ifndef __DEBUG_H #define __DEBUG_H -/************************************************************ +/**************************************************************************** * Included Files - ************************************************************/ + ****************************************************************************/ #include <nuttx/config.h> +#include <nuttx/compiler.h> -/************************************************************ +/**************************************************************************** * Definitions - ************************************************************/ + ****************************************************************************/ /* Debug macros to runtime filter the opsys debug messages */ -#ifdef __GNUC__ +#ifdef CONFIG_HAVE_FUNCTIONNAME # define EXTRA_FMT "%s: " # define EXTRA_ARG ,__FUNCTION__ #else @@ -56,6 +57,14 @@ # define EXTRA_ARG #endif +/* Debug macros will differ depending upon if the toolchain supports + * macros with a variable number of arguments or not. + */ + +#ifdef CONFIG_CPP_HAVE_VARARGS + +/* Variable argument macros supported */ + #ifdef CONFIG_DEBUG # define dbg(format, arg...) \ lib_rawprintf(EXTRA_FMT format EXTRA_ARG, ##arg) @@ -74,11 +83,13 @@ # define vdbg(x...) # endif -#else +#else /* CONFIG_DEBUG */ + # define dbg(x...) # define lldbg(x...) # define vdbg(x...) -#endif + +#endif /* CONFIG_DEBUG */ /* Subsystem specific debug */ @@ -132,17 +143,88 @@ # define lvdbg(x...) #endif -/************************************************************ +#else /* CONFIG_CPP_HAVE_VARARGS */ + +/* Variable argument macros NOT supported */ + +#ifdef CONFIG_DEBUG +# ifndef CONFIG_ARCH_LOWPUTC +# define lldbg (void) +# endif +# ifndef CONFIG_DEBUG_VERBOSE +# define vdbg (void) +# endif +#else +# define dbg (void) +# define lldbg (void) +# define vdbg (void) +#endif + +/* Subsystem specific debug */ + +#ifdef CONFIG_DEBUG_MM +# define mdbg dbg +# define mlldbg lldbg +# define mvdbg vdbg +#else +# define mdbg (void) +# define mlldbg (void) +# define mvdbg (void) +#endif + +#ifdef CONFIG_DEBUG_SCHED +# define sdbg dbg +# define slldbg lldbg +# define svdbg vdbg +#else +# define sdbg (void) +# define slldbg (void) +# define svdbg (void) +#endif + +#ifdef CONFIG_DEBUG_NET +# define ndbg dbg +# define nlldbg lldbg +# define nvdbg vdbg +#else +# define ndbg (void) +# define nlldbg (void) +# define nvdbg (void) +#endif + +#ifdef CONFIG_DEBUG_FS +# define fdbg dbg +# define flldbg lldbg +# define fvdbg vdbg +#else +# define fdbg (void) +# define flldbg (void) +# define fvdbg (void) +#endif + +#ifdef CONFIG_DEBUG_LIB +# define ldbg dbg +# define llldbg lldbg +# define lvdbg vdbg +#else +# define ldbg (void) +# define llldbg (void) +# define lvdbg (void) +#endif + +#endif /* CONFIG_CPP_HAVE_VARARGS */ + +/**************************************************************************** * Public Type Declarations - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Public Variables - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Public Function Prototypes - ************************************************************/ + ****************************************************************************/ #undef EXTERN #if defined(__cplusplus) @@ -152,12 +234,36 @@ extern "C" { #define EXTERN extern #endif +/* These low-level debug APIs are provided by the NuttX library. If + * the cross-compiler's pre-processor supports a variable number of + * macro arguments, then the macros above will map all debug statements + * on or the other of the following. + */ + EXTERN int lib_rawprintf(const char *format, ...); #ifdef CONFIG_ARCH_LOWPUTC EXTERN int lib_lowprintf(const char *format, ...); #endif +/* If the cross-compiler's pre-processor does not support variable + * length arguments, then these additional APIs will be built. + */ + +#ifndef CONFIG_CPP_HAVE_VARARGS +#ifdef CONFIG_DEBUG +EXTERN int dbg(const char *format, ...); + +# ifdef CONFIG_ARCH_LOWPUTC +EXTERN int lldbg(const char *format, ...); +# endif + +# ifdef CONFIG_DEBUG_VERBOSE +EXTERN int vdbg(const char *format, ...); +#endif +#endif /* CONFIG_DEBUG */ +#endif /* CONFIG_CPP_HAVE_VARARGS */ + #undef EXTERN #if defined(__cplusplus) } diff --git a/nuttx/include/nuttx/compiler.h b/nuttx/include/nuttx/compiler.h index 2ab68b381..318a7f137 100644 --- a/nuttx/include/nuttx/compiler.h +++ b/nuttx/include/nuttx/compiler.h @@ -48,7 +48,17 @@ #ifdef __GNUC__ -/* GCC supports weak symbols which can be used to reduce +/* Pre-processor */ + +# define CONFIG_CPP_HAVE_VARARGS 1 /* Supports variable argument macros */ + +/* Intriniscs */ + +# define CONFIG_HAVE_FUNCTIONNAME 1 /* Has __FUNCTION__ */ + +/* Attributes + * + * GCC supports weak symbols which can be used to reduce * code size because unnecessary "weak" functions can be * excluded from the link. */ @@ -118,11 +128,23 @@ #elif defined(SDCC) -/* Disable warnings for unused function arguments */ +/* Pre-processor */ + +# define CONFIG_CPP_HAVE_VARARGS 1 /* Supports variable argument macros */ + +/* Intriniscs */ + +# define CONFIG_HAVE_FUNCTIONNAME 1 /* Has __FUNCTION__ */ + +/* Pragmas + * + * Disable warnings for unused function arguments */ # pragma disable_warning 85 -/* SDCC does not support weak symbols */ +/* Attributes + * + * SDCC does not support weak symbols */ # undef CONFIG_HAVE_WEAKFUNCTIONS # define weak_alias(name, aliasname) @@ -196,29 +218,40 @@ # undef CONFIG_CAN_PASS_STRUCTS -/* ZiLog-specific definitions ***********************************************/ +/* Zilog-specific definitions ***********************************************/ #elif defined(__ZILOG__) -/* At present, only the ZiLog ZNeo compiler is recognized */ +/* At present, only the Zilog ZNeo compiler is recognized */ # ifndef __ZNEO__ -# warning "Unrecognized ZiLog compiler" +# warning "Unrecognized Zilog compiler" # endif -/* The ZiLog compiler does not support weak symbols */ +/* Pre-processor */ + +# undef CONFIG_CPP_HAVE_VARARGS /* No variable argument macros */ + +/* Intriniscs */ + +# define CONFIG_HAVE_FUNCTIONNAME 1 /* Has __FUNCTION__ */ + +/* Attributes + * + * The Zilog compiler does not support weak symbols + */ # undef CONFIG_HAVE_WEAKFUNCTIONS # define weak_alias(name, aliasname) # define weak_function # define weak_const_function -/* The ZiLog compiler does not support the noreturn or packed attributes */ +/* The Zilog compiler does not support the noreturn or packed attributes */ # define noreturn_function # define packed_struct -/* The ZiLog compiler does not support the reentrant attribute */ +/* The Zilog compiler does not support the reentrant attribute */ # define reentrant_function @@ -241,7 +274,7 @@ # undef CONFIG_PTR_IS_NOT_INT -/* The ZiLog compiler does not support inline functions */ +/* The Zilog compiler does not support inline functions */ # undef CONFIG_HAVE_INLINE # define inline diff --git a/nuttx/lib/Makefile b/nuttx/lib/Makefile index 991666eb7..b2a8f8af0 100644 --- a/nuttx/lib/Makefile +++ b/nuttx/lib/Makefile @@ -51,9 +51,10 @@ STRING_SRCS = lib_memset.c lib_memcpy.c lib_memcmp.c lib_memmove.c \ CTYPE_SRCS = -STDIO_SRCS = lib_printf.c lib_rawprintf.c lib_lowprintf.c lib_sprintf.c lib_snprintf.c \ - lib_libsprintf.c lib_vsprintf.c lib_vsnprintf.c lib_libvsprintf.c \ - lib_memstream.c lib_lowstream.c lib_nullstream.c lib_sscanf.c +STDIO_SRCS = lib_printf.c lib_rawprintf.c lib_lowprintf.c lib_dbg.c \ + lib_sprintf.c lib_snprintf.c lib_libsprintf.c lib_vsprintf.c \ + lib_vsnprintf.c lib_libvsprintf.c lib_memstream.c \ + lib_lowstream.c lib_nullstream.c lib_sscanf.c ifneq ($(CONFIG_NFILE_DESCRIPTORS),0) STDIO_SRCS += lib_rawstream.c diff --git a/nuttx/lib/lib_dbg.c b/nuttx/lib/lib_dbg.c new file mode 100644 index 000000000..7ad2ac9d8 --- /dev/null +++ b/nuttx/lib/lib_dbg.c @@ -0,0 +1,104 @@ +/**************************************************************************** + * lib/lib_dbg.c + * + * Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Compilation Switches + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <sys/types.h> +#include <stdarg.h> +#include <debug.h> + +#include "lib_internal.h" + +/**************************************************************************** + * Global Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: dbg, lldbg, vdbg + * + * Description: + * If the cross-compiler's pre-processor does not support variable + * length arguments, then these additional APIs will be built. + * + ****************************************************************************/ + +#ifndef CONFIG_CPP_HAVE_VARARGS +#ifdef CONFIG_DEBUG +int dbg(const char *format, ...) +{ + va_list ap; + int ret; + + va_start(ap, format); + ret = lib_rawvprintf(format, ap); + va_end(ap); + return ret; +} + +#ifdef CONFIG_ARCH_LOWPUTC +int lldbg(const char *format, ...) +{ + va_list ap; + int ret; + + va_start(ap, format); + ret = lib_lowvprintf(format, ap); + va_end(ap); + return ret; +} +# endif + +#ifdef CONFIG_DEBUG_VERBOSE +int vdbg(const char *format, ...) +{ + va_list ap; + int ret; + + va_start(ap, format); + ret = lib_rawvprintf(format, ap); + va_end(ap); + return ret; +} +#endif +#endif /* CONFIG_DEBUG */ +#endif /* CONFIG_CPP_HAVE_VARARGS */ diff --git a/nuttx/sched/os_start.c b/nuttx/sched/os_start.c index defcc3911..07705b5f4 100644 --- a/nuttx/sched/os_start.c +++ b/nuttx/sched/os_start.c @@ -1,7 +1,7 @@ -/************************************************************ - * os_start.c +/**************************************************************************** + * sched/os_start.c * - * Copyright (C) 2007 Gregory Nutt. All rights reserved. + * Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -14,7 +14,7 @@ * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. - * 3. Neither the name Gregory Nutt nor the names of its contributors may be + * 3. Neither the name NuttX nor the names of its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. * @@ -31,11 +31,11 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Included Files - ************************************************************/ + ****************************************************************************/ #include <sys/types.h> #include <debug.h> @@ -62,19 +62,19 @@ #include "timer_internal.h" #include "irq_internal.h" -/************************************************************ +/**************************************************************************** * Definitions - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Private Type Declarations - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Global Variables - ************************************************************/ + ****************************************************************************/ -/* Task Lists ***********************************************/ +/* Task Lists ***************************************************************/ /* The state of a task is indicated both by the task_state field * of the TCB and by a series of task lists. All of these * tasks lists are declared below. Although it is not always @@ -180,9 +180,9 @@ const tasklist_t g_tasklisttable[NUM_TASK_STATES] = #endif }; -/************************************************************ +/**************************************************************************** * Private Variables - ************************************************************/ + ****************************************************************************/ /* This is the task control block for this thread of execution. * This thread of execution is the idle task. NOTE: the * system boots into the idle task. The idle task spawns @@ -196,20 +196,20 @@ static FAR _TCB g_idletcb; static FAR char g_idlename[] = "Idle Task"; -/************************************************************ +/**************************************************************************** * Private Function Prototypes - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Public Functions - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Name: os_start * Description: This function is called to initialize the * operating system and to spawn the user init thread of * execution - ************************************************************/ + ****************************************************************************/ void os_start(void) { |