diff options
Diffstat (limited to 'nuttx/arch/arm/src/armv7-a/arm_assert.c')
-rw-r--r-- | nuttx/arch/arm/src/armv7-a/arm_assert.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/nuttx/arch/arm/src/armv7-a/arm_assert.c b/nuttx/arch/arm/src/armv7-a/arm_assert.c index 09ed223f2..2085b7050 100644 --- a/nuttx/arch/arm/src/armv7-a/arm_assert.c +++ b/nuttx/arch/arm/src/armv7-a/arm_assert.c @@ -1,7 +1,7 @@ /**************************************************************************** * arch/arm/src/armv7-a/arm_assert.c * - * Copyright (C) 2013 Gregory Nutt. All rights reserved. + * Copyright (C) 2013-2014 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <gnutt@nuttx.org> * * Redistribution and use in source and binary forms, with or without @@ -46,6 +46,8 @@ #include <nuttx/irq.h> #include <nuttx/arch.h> +#include <nuttx/usb/usbdev_trace.h> + #include <arch/board/board.h> #include "up_arch.h" @@ -55,6 +57,11 @@ /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +/* USB trace dumping */ + +#ifndef CONFIG_USBDEV_TRACE +# undef CONFIG_ARCH_USBDUMP +#endif /* Output debug info if stack dump is selected -- even if * debug is not selected. @@ -155,6 +162,18 @@ static inline void up_registerdump(void) #endif /**************************************************************************** + * Name: assert_tracecallback + ****************************************************************************/ + +#ifdef CONFIG_ARCH_USBDUMP +static int assert_tracecallback(struct usbtrace_s *trace, void *arg) +{ + usbtrace_trprintf((trprintf_t)lowsyslog, trace->event, trace->value); + return 0; +} +#endif + +/**************************************************************************** * Name: up_dumpstate ****************************************************************************/ @@ -207,6 +226,7 @@ static void up_dumpstate(void) lldbg("ERROR: Stack pointer is not within interrupt stack\n"); } } + if (sp <= istackbase && sp > istackbase - istacksize) { /* Yes.. dump the interrupt stack */ @@ -253,6 +273,12 @@ static void up_dumpstate(void) /* Then dump the registers (if available) */ up_registerdump(); + +#ifdef CONFIG_ARCH_USBDUMP + /* Dump USB trace data */ + + (void)usbtrace_enumerate(assert_tracecallback, NULL); +#endif } #else # define up_dumpstate() |