diff options
author | Marian Cingel <cingel.marian@gmail.com> | 2014-10-03 14:15:16 +0200 |
---|---|---|
committer | Paul Fertser <fercerpav@gmail.com> | 2015-03-09 06:29:17 +0000 |
commit | c50047bb418da6a4ed735ca87acee04e7fd2dbe7 (patch) | |
tree | adbb9dac37672dfb80a549d2ba03fe48d17c69d1 /src/rtos/rtos_mqx_stackings.c | |
parent | dab4adb5ec50957a9ebbfa1123a634842cb2f002 (diff) | |
download | riscv-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.c | 81 |
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 */ +}; + |