Added FAST_RAM_INITIALIZED (#5733)

* Added FAST_RAM_INITIALIZED for those who really want it

* Added the white crow of KISSFCV2F7

* Made initialized data LMAs robust

* Fixed indirection when initializing fast memory
This commit is contained in:
Andrey Mironov 2018-04-21 16:04:07 +03:00 committed by GitHub
parent 8e152f3259
commit f18448e8dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 65 additions and 9 deletions

View File

@ -265,10 +265,18 @@ void init(void)
{
#ifdef USE_ITCM_RAM
/* Load functions into ITCM RAM */
extern unsigned char tcm_code_start;
extern unsigned char tcm_code_end;
extern unsigned char tcm_code;
memcpy(&tcm_code_start, &tcm_code, (int)(&tcm_code_end - &tcm_code_start));
extern uint8_t tcm_code_start;
extern uint8_t tcm_code_end;
extern uint8_t tcm_code;
memcpy(&tcm_code_start, &tcm_code, (size_t) (&tcm_code_end - &tcm_code_start));
#endif
#ifdef USE_FAST_RAM
/* Load FAST_RAM_INITIALIZED variable intializers into FAST RAM */
extern uint8_t _sfastram_data;
extern uint8_t _efastram_data;
extern uint8_t _sfastram_idata;
memcpy(&_sfastram_data, &_sfastram_idata, (size_t) (&_efastram_data - &_sfastram_data));
#endif
#ifdef USE_HAL_DRIVER

View File

@ -158,7 +158,7 @@ void pidResetITerm(void)
}
}
static FAST_RAM float itermAccelerator = 1.0f;
static FAST_RAM_INITIALIZED float itermAccelerator = 1.0f;
void pidSetItermAccelerator(float newItermAccelerator)
{

View File

@ -136,7 +136,7 @@ SECTIONS
} >FLASH
/* used by the startup to initialize data */
_sidata = .;
_sidata = LOADADDR(.data);
/* Initialized data sections goes into RAM, load LMA copy after code */
.data :
@ -182,6 +182,21 @@ SECTIONS
__sram2_end__ = _esram2;
} >SRAM2
/* used during startup to initialized fastram_data */
_sfastram_idata = LOADADDR(.fastram_data);
/* Initialized FAST_RAM section for unsuspecting developers */
.fastram_data :
{
. = ALIGN(4);
_sfastram_data = .; /* create a global symbol at data start */
*(.fastram_data) /* .data sections */
*(.fastram_data*) /* .data* sections */
. = ALIGN(4);
_efastram_data = .; /* define a global symbol at data end */
} >FASTRAM AT> FLASH
. = ALIGN(4);
.fastram_bss (NOLOAD) :
{

View File

@ -92,15 +92,17 @@
#endif
#ifdef USE_ITCM_RAM
#define FAST_CODE __attribute__((section(".tcm_code")))
#define FAST_CODE __attribute__((section(".tcm_code")))
#else
#define FAST_CODE
#endif // USE_ITCM_RAM
#ifdef USE_FAST_RAM
#define FAST_RAM __attribute__ ((section(".fastram_bss"), aligned(4)))
#define FAST_RAM_INITIALIZED __attribute__ ((section(".fastram_data"), aligned(4)))
#else
#define FAST_RAM
#define FAST_RAM_INITIALIZED
#endif // USE_FAST_RAM
#ifdef STM32F4

View File

@ -93,7 +93,7 @@ SECTIONS
} >FLASH AT >AXIM_FLASH
/* used by the startup to initialize data */
_sidata = .;
_sidata = LOADADDR(.data);
/* Initialized data sections goes into RAM, load LMA copy after code */
.data :
@ -139,6 +139,21 @@ SECTIONS
__sram2_end__ = _esram2;
} >SRAM2
/* used during startup to initialized fastram_data */
_sfastram_idata = LOADADDR(.fastram_data);
/* Initialized FAST_RAM section for unsuspecting developers */
.fastram_data :
{
. = ALIGN(4);
_sfastram_data = .; /* create a global symbol at data start */
*(.fastram_data) /* .data sections */
*(.fastram_data*) /* .data* sections */
. = ALIGN(4);
_efastram_data = .; /* define a global symbol at data end */
} >FASTRAM AT> FLASH
. = ALIGN(4);
.fastram_bss (NOLOAD) :
{

View File

@ -106,7 +106,7 @@ SECTIONS
} >FLASH
/* used by the startup to initialize data */
_sidata = .;
_sidata = LOADADDR(.data);
/* Initialized data sections goes into RAM, load LMA copy after code */
.data :
@ -136,6 +136,22 @@ SECTIONS
__bss_end__ = _ebss;
} >RAM
/* used during startup to initialized fastram_data */
_sfastram_idata = LOADADDR(.fastram_data);
/* Initialized FAST_RAM section for unsuspecting developers */
.fastram_data :
{
. = ALIGN(4);
_sfastram_data = .; /* create a global symbol at data start */
*(.fastram_data) /* .data sections */
*(.fastram_data*) /* .data* sections */
. = ALIGN(4);
_efastram_data = .; /* define a global symbol at data end */
} >FASTRAM AT> FLASH
. = ALIGN(4);
.fastram_bss (NOLOAD) :
{
__fastram_bss_start__ = .;