X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fkdebug.c;fp=drv%2Fkdebug.c;h=0000000000000000000000000000000000000000;hb=791e167e053bdd9250d34a9a5ccae6ccde4d6679;hp=c461b7281cbf2b496ef374119748fbdd082318d4;hpb=faf2f6bfd5933ff75e6cc01e3d48f9277f731d8f;p=bertos.git diff --git a/drv/kdebug.c b/drv/kdebug.c deleted file mode 100644 index c461b728..00000000 --- a/drv/kdebug.c +++ /dev/null @@ -1,289 +0,0 @@ -/** - * \file - * - * - * \brief General pourpose debug support for embedded systems (implementation). - * - * \version $Id$ - * \author Bernardo Innocenti - * \author Stefano Fedrigo - */ - -#include -#include -#include - -#include /* for BV() */ -#include - -#include -#warning what about these? -//#include /* for CLOCK_FREQ */ -//#include /* Required for bus macros overrides */ - -#include /* for _formatted_write() */ -#include - -#ifdef _DEBUG - -#if CPU_HARVARD && !defined(_PROGMEM) - #error This module build correctly only in program memory! -#endif - - -#if OS_HOSTED - #include - #define KDBG_WAIT_READY() do { /*nop*/ } while(0) - #define KDBG_WRITE_CHAR(c) putc((c), stderr) - #define KDBG_MASK_IRQ(old) do { (void)(old); } while(0) - #define KDBG_RESTORE_IRQ(old) do { /*nop*/ } while(0) - typedef char kdbg_irqsave_t; /* unused */ - - #define kdbg_hw_init() do {} while (0) ///< Not needed - - #if CONFIG_KDEBUG_PORT == 666 - #error BITBANG debug console missing for this platform - #endif -#else - #include CPU_CSOURCE(kdebug) -#endif - - -void kdbg_init(void) -{ - /* Init debug hw */ - kdbg_hw_init(); - kputs("\n\n*** BeRTOS DBG START ***\n"); -} - - -/** - * Output one character to the debug console - */ -static void __kputchar(char c, UNUSED_ARG(void *, unused)) -{ - /* Poll while serial buffer is still busy */ - KDBG_WAIT_READY(); - - /* Send '\n' as '\r\n' for dumb terminals */ - if (c == '\n') - { - KDBG_WRITE_CHAR('\r'); - KDBG_WAIT_READY(); - } - - KDBG_WRITE_CHAR(c); -} - - -void kputchar(char c) -{ - /* Mask serial TX intr */ - kdbg_irqsave_t irqsave; - KDBG_MASK_IRQ(irqsave); - - __kputchar(c, 0); - - /* Restore serial TX intr */ - KDBG_RESTORE_IRQ(irqsave); -} - - -static void PGM_FUNC(kvprintf)(const char * PGM_ATTR fmt, va_list ap) -{ -#if CONFIG_PRINTF - /* Mask serial TX intr */ - kdbg_irqsave_t irqsave; - KDBG_MASK_IRQ(irqsave); - - PGM_FUNC(_formatted_write)(fmt, __kputchar, 0, ap); - - /* Restore serial TX intr */ - KDBG_RESTORE_IRQ(irqsave); -#else - /* A better than nothing printf() surrogate. */ - PGM_FUNC(kputs)(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) -{ - char c; - - /* Mask serial TX intr */ - kdbg_irqsave_t irqsave; - KDBG_MASK_IRQ(irqsave); - - while ((c = PGM_READ_CHAR(str++))) - __kputchar(c, 0); - - KDBG_RESTORE_IRQ(irqsave); -} - - -/** - * Cheap function to print small integers without using printf(). - */ -int kputnum(int num) -{ - int output_len = 0; - int divisor = 10000; - int digit; - - do - { - digit = num / divisor; - num %= divisor; - - if (digit || output_len || divisor == 1) - { - kputchar(digit + '0'); - ++output_len; - } - } - while (divisor /= 10); - - return output_len; -} - - -static void klocation(const char * PGM_ATTR file, int line) -{ - PGM_FUNC(kputs)(file); - kputchar(':'); - kputnum(line); - PGM_FUNC(kputs)(PGM_STR(": ")); -} - -int PGM_FUNC(__assert)(const char * PGM_ATTR cond, const char * PGM_ATTR file, int line) -{ - klocation(file, line); - PGM_FUNC(kputs)(PGM_STR("Assertion failed: ")); - PGM_FUNC(kputs)(cond); - kputchar('\n'); - BREAKPOINT; - return 1; -} - -/* - * 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(kprintf)(PGM_STR("%s()\n"), name); -} - -void PGM_FUNC(__tracemsg)(const char *name, const char * PGM_ATTR fmt, ...) -{ - va_list ap; - - PGM_FUNC(kprintf)(PGM_STR("%s(): "), name); - va_start(ap, fmt); - PGM_FUNC(kvprintf)(fmt, ap); - va_end(ap); - kputchar('\n'); -} - -int PGM_FUNC(__invalid_ptr)(void *value, const char * PGM_ATTR name, const char * PGM_ATTR file, int line) -{ - klocation(file, line); - PGM_FUNC(kputs)(PGM_STR("Invalid ptr: ")); - PGM_FUNC(kputs)(name); - #if CONFIG_PRINTF - PGM_FUNC(kprintf)(PGM_STR(" = 0x%p\n"), value); - #else - (void)value; - kputchar('\n'); - #endif - return 1; -} - - -void __init_wall(long *wall, int size) -{ - while(size--) - *wall++ = WALL_VALUE; -} - - -int PGM_FUNC(__check_wall)(long *wall, int size, const char * PGM_ATTR name, const char * PGM_ATTR file, int line) -{ - int i, fail = 0; - - for (i = 0; i < size; i++) - { - if (wall[i] != WALL_VALUE) - { - klocation(file, line); - PGM_FUNC(kputs)(PGM_STR("Wall broken: ")); - PGM_FUNC(kputs)(name); - #if CONFIG_PRINTF - PGM_FUNC(kprintf)(PGM_STR("[%d] (0x%p) = 0x%lx\n"), i, wall + i, wall[i]); - #else - kputchar('\n'); - #endif - fail = 1; - } - } - - return fail; -} - - -#if CONFIG_PRINTF - -/** - * Dump binary data in hex - */ -void kdump(const void *_buf, size_t len) -{ - const unsigned char *buf = (const unsigned char *)_buf; - - while (len--) - kprintf("%02X", *buf++); - kputchar('\n'); -} - -#endif /* CONFIG_PRINTF */ - -#endif /* _DEBUG */