Interacting with the linker scripts in the STM32F4 BSP

Mr. Andrei Chichak groups at
Mon Jul 14 22:53:03 UTC 2014

I have a block of parameters that I want to place in FLASH memory at a known location, say the last block of FLASH so that I can read and write it later. (these processors don’t have EEPROM but you can use a page of FLASH as an adequate replacement for internal configuration parameter storage at the cost of halting the bus until the writes complete)

It needs to be on a page boundary, because the FLASH is erased in 2K pages. 

Since gcc doesn’t allow syntax like:

static volatile const PARAM_T fu @ 0x000FF800;
static volatile const PARAM_T fu __attribute__((at(0x000FF800)))
static volatile const PARAM_T fu __at__ 0x000FF800

I have to use the linker script to push the structure to the target location. The STM32F4 BSP has a set of scripts but there is a lot of existing thought that I don’t want to violate.

Is it possible to add a project specific linker script so that I can place a struct at a particular FLASH location without triggering the  .unexpected_sections portion of linkcmds.base? I’ve tried a few things, but the trick escapes me.


Typical lame attempt:

typedef struct {
		uint8_t filler[2048];

static volatile PARAM_PAGE_T flashParamsPage __attribute__((section(".params"))) ;

	PARAM_INT : ORIGIN = 0x000FF800, LENGTH = 2k

	.params : {

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the users mailing list