This is an automated email from Gerrit. Christian Gudrian ([email protected]) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/2354
-- gerrit commit f019657392d2a0cfb56e68926788d20269ce1a81 Author: Christian Gudrian <[email protected]> Date: Fri Oct 24 23:22:40 2014 +0200 Added FPU support for ChibiOS/RT When an enabled FPU is detected we now use an appropriate stacking. Change-Id: I1b0f43ec22e1c55c4f10e2ffa97d4aaa77bca5ee Signed-off-by: Christian Gudrian <[email protected]> diff --git a/src/rtos/ChibiOS.c b/src/rtos/ChibiOS.c index 46fdca3..54ae907 100644 --- a/src/rtos/ChibiOS.c +++ b/src/rtos/ChibiOS.c @@ -253,11 +253,9 @@ static int ChibiOS_update_stacking(struct rtos *rtos) /* Check if CP10 and CP11 are set to full access. * In ChibiOS this is done in ResetHandler() in crt0.c */ if (cpacr & 0x00F00000) { - /* Found target with enabled FPU */ - /* FIXME: Need to figure out how to specify the FPU registers */ - LOG_ERROR("ChibiOS ARM v7m targets with enabled FPU " - " are NOT supported"); - return -1; + LOG_DEBUG("Enabled FPU detected."); + param->stacking_info = &rtos_chibios_arm_v7m_stacking_w_fpu; + return 0; } } diff --git a/src/rtos/rtos_chibios_stackings.c b/src/rtos/rtos_chibios_stackings.c index 0b5d063..ed48561 100644 --- a/src/rtos/rtos_chibios_stackings.c +++ b/src/rtos/rtos_chibios_stackings.c @@ -55,3 +55,31 @@ const struct rtos_register_stacking rtos_chibios_arm_v7m_stacking = { 0, /* stack_alignment */ rtos_chibios_arm_v7m_stack_offsets /* register_offsets */ }; + +static const struct stack_register_offset rtos_chibios_arm_v7m_stack_offsets_w_fpu[ARMV7M_NUM_CORE_REGS] = { + { -1, 32 }, /* r0 */ + { -1, 32 }, /* r1 */ + { -1, 32 }, /* r2 */ + { -1, 32 }, /* r3 */ + { 0x40, 32 }, /* r4 */ + { 0x44, 32 }, /* r5 */ + { 0x48, 32 }, /* r6 */ + { 0x4c, 32 }, /* r7 */ + { 0x50, 32 }, /* r8 */ + { 0x54, 32 }, /* r9 */ + { 0x58, 32 }, /* r10 */ + { 0x5c, 32 }, /* r11 */ + { -1, 32 }, /* r12 */ + { -2, 32 }, /* sp */ + { -1, 32 }, /* lr */ + { 0x60, 32 }, /* pc */ + { -1, 32 }, /* xPSR */ +}; + +const struct rtos_register_stacking rtos_chibios_arm_v7m_stacking_w_fpu = { + 0x64, /* stack_registers_size */ + -1, /* stack_growth_direction */ + ARMV7M_NUM_CORE_REGS, /* num_output_registers */ + 0, /* stack_alignment */ + rtos_chibios_arm_v7m_stack_offsets_w_fpu /* register_offsets */ +}; diff --git a/src/rtos/rtos_chibios_stackings.h b/src/rtos/rtos_chibios_stackings.h index b5eea64..8ba2a6c 100644 --- a/src/rtos/rtos_chibios_stackings.h +++ b/src/rtos/rtos_chibios_stackings.h @@ -28,5 +28,6 @@ #include "rtos.h" extern const struct rtos_register_stacking rtos_chibios_arm_v7m_stacking; +extern const struct rtos_register_stacking rtos_chibios_arm_v7m_stacking_w_fpu; #endif /* ifndef INCLUDED_RTOS_CHIBIOS_STACKINGS_H_ */ -- ------------------------------------------------------------------------------ _______________________________________________ OpenOCD-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openocd-devel
