summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/armv7-a/arm_assert.c
diff options
context:
space:
mode:
Diffstat (limited to 'nuttx/arch/arm/src/armv7-a/arm_assert.c')
-rw-r--r--nuttx/arch/arm/src/armv7-a/arm_assert.c28
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()