aboutsummaryrefslogtreecommitdiff
path: root/src/rtos/rtos_mqx_stackings.c
diff options
context:
space:
mode:
authorMarian Cingel <cingel.marian@gmail.com>2014-10-03 14:15:16 +0200
committerPaul Fertser <fercerpav@gmail.com>2015-03-09 06:29:17 +0000
commitc50047bb418da6a4ed735ca87acee04e7fd2dbe7 (patch)
treeadbb9dac37672dfb80a549d2ba03fe48d17c69d1 /src/rtos/rtos_mqx_stackings.c
parentdab4adb5ec50957a9ebbfa1123a634842cb2f002 (diff)
downloadriscv-openocd-c50047bb418da6a4ed735ca87acee04e7fd2dbe7.zip
riscv-openocd-c50047bb418da6a4ed735ca87acee04e7fd2dbe7.tar.gz
riscv-openocd-c50047bb418da6a4ed735ca87acee04e7fd2dbe7.tar.bz2
rtos: Freescale MQX rtos support
ARMv7E-M (CortexM4) architecture - fix position offset of r2,r3 registers on exception stack - switch 'calloc' arguments - remove prototypes of internal function and typedefs - add NULL check for alloc functions - remove last line of license "Franklin Street, Fifth Floor" because of 'checkpatch' validation - environment: jlink + twrk60n512 Change-Id: I70840ded15b17dd945ca190ce31e2775078da2d9 Signed-off-by: Marian Cingel <cingel.marian@gmail.com> Reviewed-on: http://openocd.zylin.com/2353 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/rtos/rtos_mqx_stackings.c')
-rw-r--r--src/rtos/rtos_mqx_stackings.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/rtos/rtos_mqx_stackings.c b/src/rtos/rtos_mqx_stackings.c
new file mode 100644
index 0000000..8f2d67e
--- /dev/null
+++ b/src/rtos/rtos_mqx_stackings.c
@@ -0,0 +1,81 @@
+/***************************************************************************
+ * Copyright (C) 2014 by Marian Cingel *
+ * cingel.marian@gmail.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc. *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "rtos.h"
+#include "target/armv7m.h"
+
+
+/*
+ * standard exception stack
+ * ( stack base, higher memory address )
+ * - xpsr - 0x48
+ * - pc - 0x44
+ * - lr - 0x40
+ * - r12 - 0x3C
+ * - r3 - 0x38
+ * - r2 - 0x34
+ * - r1 - 0x30
+ * - r0 - 0x2C
+ * extended stack in svc_pending handler
+ * - lr - 0x28
+ * - r11 - 0x24
+ * - r10 - 0x20
+ * - r9 - 0x1C
+ * - r8 - 0x18
+ * - r7 - 0x14
+ * - r6 - 0x10
+ * - r5 - 0x0C
+ * - r4 - 0x08
+ * - BASEPRI - 0x04
+ * - SHPR3 - 0x00 ( contains pend_svc exception priority )
+ * ( stack head, lower address, stored in 'task->STACK_PTR' )
+ */
+
+static const struct stack_register_offset rtos_mqx_arm_v7m_stack_offsets[ARMV7M_NUM_CORE_REGS] = {
+ { 0x2C, 32 }, /* r0 */
+ { 0x30, 32 }, /* r1 */
+ { 0x34, 32 }, /* r2 */
+ { 0x38, 32 }, /* r3 */
+ { 0x08, 32 }, /* r4 */
+ { 0x0C, 32 }, /* r5 */
+ { 0x10, 32 }, /* r6 */
+ { 0x14, 32 }, /* r7 */
+ { 0x18, 32 }, /* r8 */
+ { 0x1C, 32 }, /* r9 */
+ { 0x20, 32 }, /* r10 */
+ { 0x24, 32 }, /* r11 */
+ { 0x3C, 32 }, /* r12 */
+ { -2 , 32 }, /* sp */
+ { 0x28, 32 }, /* lr */
+ { 0x44, 32 }, /* pc */
+ { 0x48, 32 }, /* xPSR */
+};
+
+const struct rtos_register_stacking rtos_mqx_arm_v7m_stacking = {
+ 0x4C, /* stack_registers_size, calculate offset base address */
+ -1, /* stack_growth_direction */
+ ARMV7M_NUM_CORE_REGS, /* num_output_registers */
+ 0, /* stack_alignment */
+ rtos_mqx_arm_v7m_stack_offsets /* register_offsets */
+};
+