Fix startup code bug in release mode

This commit is contained in:
Mario Hüttel 2020-08-30 19:40:33 +02:00
parent 3dfe59482e
commit 0fd738f37e

View File

@ -18,6 +18,8 @@
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
#include <stdint.h>
/* C++ library init */ /* C++ library init */
# if defined(__cplusplus) # if defined(__cplusplus)
extern "C" { extern "C" {
@ -280,9 +282,22 @@ extern unsigned int __ld_ebss;
extern unsigned int __ld_sheap; extern unsigned int __ld_sheap;
extern unsigned int __ld_eheap; extern unsigned int __ld_eheap;
#ifdef CPACR
#undef CPACR
#endif
#define CPACR (*((volatile uint32_t *)0xE000ED88))
void Reset_Handler(void) { void Reset_Handler(void) {
/* Stack is already initialized by hardware */ /* Stack is already initialized by hardware */
/* The first thing we do here, is to initialize the FPU
* When this code is compiled optimized with hardfpu abi,
* GCC tends to generate FPU instructions for data copying
*/
CPACR |= (0xF << 20);
/* Copy .data section */ /* Copy .data section */
__init_section(&__ld_load_data, &__ld_sdata, &__ld_edata); __init_section(&__ld_load_data, &__ld_sdata, &__ld_edata);
/* Fill bss with zero */ /* Fill bss with zero */