From 12c3d9e4169cb5f27fdf1027c306821742029121 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sun, 26 Jun 2016 18:30:32 +0000 Subject: [PATCH] Stack initialization workaround. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9668 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/common/startup/ARMCMx/compilers/GCC/crt0_v6m.S | 15 +++++++++++++++ os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/os/common/startup/ARMCMx/compilers/GCC/crt0_v6m.S b/os/common/startup/ARMCMx/compilers/GCC/crt0_v6m.S index 643783bc8..a5053e4d5 100644 --- a/os/common/startup/ARMCMx/compilers/GCC/crt0_v6m.S +++ b/os/common/startup/ARMCMx/compilers/GCC/crt0_v6m.S @@ -45,6 +45,15 @@ /* Module pre-compile time settings. */ /*===========================================================================*/ +/** + * @brief Enforces initialization of MSP. + * @note This is required if the boot process is not reliable for whatever + * reason (bad ROMs, bad bootloaders, bad debuggers=. + */ +#if !defined(CRT0_VTOR_INIT) || defined(__DOXYGEN__) +#define CRT0_FORCE_MSP_INIT TRUE +#endif + /** * @brief VTOR special register initialization. * @details VTOR is initialized to point to the vectors table. @@ -142,6 +151,12 @@ Reset_Handler: /* Interrupts are globally masked initially.*/ cpsid i +#if CRT0_FORCE_MSP_INIT == TRUE + /* MSP stack pointers initialization.*/ + ldr r0, =__main_stack_end__ + msr MSP, r0 +#endif + /* PSP stack pointers initialization.*/ ldr r0, =__process_stack_end__ msr PSP, r0 diff --git a/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S b/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S index 3abfc1813..2a92768f3 100644 --- a/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S +++ b/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S @@ -180,6 +180,12 @@ Reset_Handler: /* Interrupts are globally masked initially.*/ cpsid i +#if CRT0_FORCE_MSP_INIT == TRUE + /* MSP stack pointers initialization.*/ + ldr r0, =__main_stack_end__ + msr MSP, r0 +#endif + /* PSP stack pointers initialization.*/ ldr r0, =__process_stack_end__ msr PSP, r0