aboutsummaryrefslogtreecommitdiff
path: root/Debug
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2012-08-04 15:12:36 -0700
committerpx4dev <px4@purgatory.org>2012-08-04 15:12:36 -0700
commit8a365179eafdf3aea98e60ab9f5882b200d4c759 (patch)
tree4f38d6d4cd80bd0b6e22e2bb534c3f117ce44e56 /Debug
downloadpx4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.tar.gz
px4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.tar.bz2
px4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.zip
Fresh import of the PX4 firmware sources.
Diffstat (limited to 'Debug')
-rw-r--r--Debug/NuttX211
-rw-r--r--Debug/NuttX_BMP6
-rw-r--r--Debug/memdump11
-rw-r--r--Debug/stm32f4x.cfg64
4 files changed, 292 insertions, 0 deletions
diff --git a/Debug/NuttX b/Debug/NuttX
new file mode 100644
index 000000000..46ba3d1ff
--- /dev/null
+++ b/Debug/NuttX
@@ -0,0 +1,211 @@
+#
+# Generic GDB macros for working with NuttX
+#
+
+echo Loading NuttX GDB macros. Use 'help nuttx' for more information.\n
+
+define nuttx
+ echo Use 'help nuttx' for more information.\n
+end
+
+document nuttx
+. Various macros for working with NuttX.
+.
+. showheap
+. Prints the contents of the malloc heap(s).
+. showtasks
+. Prints a list of all tasks.
+. showtask <address>
+. Prints information about the task at <address>
+.
+. Use 'help <macro>' for more specific help.
+end
+
+################################################################################
+# Heap display
+################################################################################
+
+define _showheap
+ set $index = $arg0
+ if (sizeof(struct mm_allocnode_s) == 4)
+ set $MM_ALLOC_BIT = 0x8000
+ else
+ set $MM_ALLOC_BIT = 0x80000000
+ end
+ printf "HEAP %d %p - %p\n", $index, g_heapstart[$index], g_heapend[$index]
+ printf "ptr size\n"
+ set $node = (char *)g_heapstart[$index] + sizeof(struct mm_allocnode_s)
+ while $node < g_heapend[$index]
+ printf " %p", $node
+ set $nodestruct = (struct mm_allocnode_s *)$node
+ printf " %u", $nodestruct->size
+ if !($nodestruct->preceding & $MM_ALLOC_BIT)
+ printf " FREE"
+ end
+ if ($nodestruct->size > g_heapsize) || (($node + $nodestruct->size) > g_heapend[$index])
+ printf " (BAD SIZE)"
+ end
+ printf "\n"
+ set $node = $node + $nodestruct->size
+ end
+end
+
+define showheap
+ set $nheaps = sizeof(g_heapstart) / sizeof(g_heapstart[0])
+ printf "Printing %d heaps\n", $nheaps
+ set $heapindex = (int)0
+ while $heapindex < $nheaps
+ showheap $heapindex
+ set $heapindex = $heapindex + 1
+ end
+end
+
+document showheap
+. showheap
+. Prints the contents of the malloc heap(s).
+end
+
+################################################################################
+# Task display
+################################################################################
+
+define _showtask_oneline
+ set $task = (struct _TCB *)$arg0
+ printf " %p %.2d %.3d %s\n", $task, $task->pid, $task->sched_priority, $task->name
+end
+
+define _showtasklist
+ set $queue = (dq_queue_t *)$arg0
+ set $cursor = (dq_entry_t *)$queue->head
+
+ if $cursor != 0
+ printf " TCB PID PRI\n"
+ else
+ printf " <none>\n"
+ end
+
+ while $cursor != 0
+
+ _showtask_oneline $cursor
+
+ if $cursor == $queue->tail
+ set $cursor = 0
+ else
+ set $next = $cursor->flink
+
+ if $next->blink != $cursor
+ printf "task linkage corrupt\n"
+ set $cursor = 0
+ else
+ set $cursor = $next
+ end
+ end
+ end
+end
+
+#
+# Print task registers for a NuttX v7em target with FPU enabled.
+#
+define _showtaskregs_v7em
+ set $task = (struct _TCB *)$arg0
+ set $regs = (uint32_t *)&($task->xcp.regs[0])
+
+ printf " r0: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", $regs[27], $regs[28], $regs[29], $regs[30], $regs[2], $regs[3], $regs[4], $regs[5]
+ printf " r8: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", $regs[6], $regs[7], $regs[8], $regs[9], $regs[31], $regs[0], $regs[32], $regs[33]
+ printf " XPSR 0x%08x EXC_RETURN 0x%08x PRIMASK 0x%08x\n", $regs[34], $regs[10], $regs[1]
+end
+
+#
+# Print current registers for a NuttX v7em target with FPU enabled.
+#
+define _showcurrentregs_v7em
+ printf " r0: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", $r0, $r1, $r2, $r3, $r4, $r5, $r6, $r7
+ printf " r8: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", $r8, $r9, $r10, $r11, $r12, $r13, $r14, $r15
+ printf " XPSR 0x%08x\n", $xpsr
+end
+
+#
+# Print details of a semaphore
+#
+define _showsemaphore
+ printf "count %d ", $arg0->semcount
+ if $arg0->hlist.holder != 0
+ set $_task = (struct _TCB *)$arg0->hlist.holder
+ printf "held by %s", $_task->name
+ end
+ printf "\n"
+end
+
+define showtask
+ set $task = (struct _TCB *)$arg0
+
+ printf "%p %.2d ", $task, $task->pid
+ _showtaskstate $task
+ printf " %s\n", $task->name
+ set $stack_free = 0
+ while ($stack_free < $task->adj_stack_size) && *(uint8_t *)($task->stack_alloc_ptr + $stack_free)
+ set $stack_free = $stack_free + 1
+ end
+ printf" stack 0x%08x-0x%08x (%d) %d free\n", $task->stack_alloc_ptr, $task->adj_stack_ptr, $task->adj_stack_size, $stack_free
+
+ if $task->task_state == TSTATE_WAIT_SEM
+ printf " waiting on %p ", $task->waitsem
+ _showsemaphore $task->waitsem
+ end
+
+ if $task->task_state != TSTATE_TASK_RUNNING
+ _showtaskregs_v7em $task
+ else
+ _showcurrentregs_v7em
+ end
+
+ # XXX print registers here
+end
+
+document showtask
+. showtask <TCB pointer>
+. Print details of a task.
+end
+
+define _showtaskstate
+ if $arg0->task_state == TSTATE_TASK_INVALID
+ printf "INVALID"
+ end
+ if $arg0->task_state == TSTATE_TASK_PENDING
+ printf "PENDING"
+ end
+ if $arg0->task_state == TSTATE_TASK_READYTORUN
+ printf "READYTORUN"
+ end
+ if $arg0->task_state == TSTATE_TASK_RUNNING
+ printf "RUNNING"
+ end
+ if $arg0->task_state == TSTATE_TASK_INACTIVE
+ printf "INACTIVE"
+ end
+ if $arg0->task_state == TSTATE_WAIT_SEM
+ printf "WAIT_SEM"
+ end
+ if $arg0->task_state == TSTATE_WAIT_SIG
+ printf "WAIT_SIG"
+ end
+ if $arg0->task_state > TSTATE_WAIT_SIG
+ printf "%d", $arg0->task_state
+ end
+end
+
+define showtasks
+ printf "PENDING\n"
+ _showtasklist &g_pendingtasks
+ printf "RUNNABLE\n"
+ _showtasklist &g_readytorun
+ printf "WAITING\n"
+ _showtasklist &g_waitingforsemaphore
+ printf "INACTIVE\n"
+ _showtasklist &g_inactivetasks
+end
+
+document showtasks
+. showtasks
+. Print a list of all tasks in the system, separated into their respective queues.
+end
diff --git a/Debug/NuttX_BMP b/Debug/NuttX_BMP
new file mode 100644
index 000000000..013fa4436
--- /dev/null
+++ b/Debug/NuttX_BMP
@@ -0,0 +1,6 @@
+#
+# Setup macros for the BlackMagic debug probe and NuttX.
+#
+
+mon swdp_scan
+attach 1
diff --git a/Debug/memdump b/Debug/memdump
new file mode 100644
index 000000000..703c4ed8b
--- /dev/null
+++ b/Debug/memdump
@@ -0,0 +1,11 @@
+define f4_memdump
+ shell mkdir -p /tmp/dump
+ printf "Dumping CCSRAM to /tmp/dump/ccsram\n"
+ dump memory /tmp/dump/ccsram 0x10000000 0x10010000
+ printf "Dumping SRAM to /tmp/dump/sram\n"
+ dump memory /tmp/dump/sram 0x20000000 0x20020000
+end
+
+document f4_memdump
+Dumps the STM32F4 memory to files in /tmp/dump.
+end
diff --git a/Debug/stm32f4x.cfg b/Debug/stm32f4x.cfg
new file mode 100644
index 000000000..28bfcfbbb
--- /dev/null
+++ b/Debug/stm32f4x.cfg
@@ -0,0 +1,64 @@
+# script for stm32f2xxx
+
+if { [info exists CHIPNAME] } {
+ set _CHIPNAME $CHIPNAME
+} else {
+ set _CHIPNAME stm32f4xxx
+}
+
+if { [info exists ENDIAN] } {
+ set _ENDIAN $ENDIAN
+} else {
+ set _ENDIAN little
+}
+
+# Work-area is a space in RAM used for flash programming
+# By default use 64kB
+if { [info exists WORKAREASIZE] } {
+ set _WORKAREASIZE $WORKAREASIZE
+} else {
+ set _WORKAREASIZE 0x10000
+}
+
+# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz
+#
+# Since we may be running of an RC oscilator, we crank down the speed a
+# bit more to be on the safe side. Perhaps superstition, but if are
+# running off a crystal, we can run closer to the limit. Note
+# that there can be a pretty wide band where things are more or less stable.
+jtag_khz 1000
+
+jtag_nsrst_delay 100
+jtag_ntrst_delay 100
+
+#jtag scan chain
+if { [info exists CPUTAPID ] } {
+ set _CPUTAPID $CPUTAPID
+} else {
+ # See STM Document RM0033
+ # Section 32.6.3 - corresponds to Cortex-M3 r2p0
+ set _CPUTAPID 0x4ba00477
+}
+jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
+
+if { [info exists BSTAPID ] } {
+ set _BSTAPID $BSTAPID
+} else {
+ # See STM Document RM0033
+ # Section 32.6.2
+ #
+ set _BSTAPID 0x06413041
+}
+jtag newtap $_CHIPNAME bs -irlen 5 -expected-id $_BSTAPID
+
+set _TARGETNAME $_CHIPNAME.cpu
+target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME -rtos auto
+
+$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
+
+set _FLASHNAME $_CHIPNAME.flash
+flash bank $_FLASHNAME stm32f2x 0 0 0 0 $_TARGETNAME
+
+# if srst is not fitted use SYSRESETREQ to
+# perform a soft reset
+cortex_m3 reset_config sysresetreq