2024-11-25 08:35 PM
I read the "STM32WB09KEVX_FLASH.ld" of STM32WB09KE, could anyone tell me what's the meaning of these period sign in this file?
/*******************************************************************************
* STM32WB09 generic linker file for GCC
* Main linker variables to control it are:
*
* MEMORY_FLASH_APP_SIZE: define the size of the application in case not all the flash is needed.
* Default value is: 508KB when no OTA firmware upgrade is supported
*
* MEMORY_FLASH_APP_OFFSET: define the offset of the application.
* Default value is: 0 offset
*
* MEMORY_RAM_APP_OFFSET: define the offset in RAM from which variables can be
* allocated.
*
*******************************************************************************/
/*******************************************************************************
* Memory Definitions
*******************************************************************************/
/*
STM32WB09 memory map
+-----------------------+ 0x2000FFFF
| RAM (64K) |
+-----------------------+ 0x20000000
| |
| |
+-----------------------+ 0x100BFFFF
| |
| FLASH (512K) |
+-----------------------+ 0x10040000
| |
+-----------------------| 0x100017FF
| ROM (6K) |
+-----------------------+ 0x10000000
*/
_MEMORY_RAM_BEGIN_ = 0x20000000;
_MEMORY_RAM_SIZE_ = 0x10000; /* 64KB */
_MEMORY_RAM_END_ = 0x2000FFFF;
_MEMORY_FLASH_BEGIN_ = 0x10040000;
_MEMORY_FLASH_SIZE_ = 0x80000; /* 512KB */
_MEMORY_FLASH_END_ = 0x100BFFFF;
_MEMORY_ROM_BEGIN_ = 0x10000000;
_MEMORY_ROM_SIZE_ = 0x01800; /* 6KB */
_MEMORY_ROM_END_ = 0x100017FF;
/* Reserved for BTLE stack non volatile memory */
FLASH_NVM_DATASIZE = (4*1024);
MEMORY_FLASH_APP_OFFSET = DEFINED(MEMORY_FLASH_APP_OFFSET) ? (MEMORY_FLASH_APP_OFFSET) : (0) ;
MEMORY_FLASH_APP_SIZE = DEFINED(MEMORY_FLASH_APP_SIZE) ? (MEMORY_FLASH_APP_SIZE) : (_MEMORY_FLASH_SIZE_ - FLASH_NVM_DATASIZE - MEMORY_FLASH_APP_OFFSET);
/* Entry Point */
ENTRY(Reset_Handler)
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0x0; /* required amount of heap */
_Min_Stack_Size = 0xC00; /* required amount of stack */
/* Specify the memory areas */
MEMORY
{
RAM (xrw) : ORIGIN = _MEMORY_RAM_BEGIN_, LENGTH = _MEMORY_RAM_SIZE_
FLASH (rx) : ORIGIN = _MEMORY_FLASH_BEGIN_ + MEMORY_FLASH_APP_OFFSET, LENGTH = MEMORY_FLASH_APP_SIZE
REGION_NVM (rx) : ORIGIN = _MEMORY_FLASH_END_ + 1 - FLASH_NVM_DATASIZE, LENGTH = FLASH_NVM_DATASIZE
REGION_ROM (rx) : ORIGIN = _MEMORY_ROM_BEGIN_, LENGTH = _MEMORY_ROM_SIZE_
}
/* Define output sections */
SECTIONS
{
/* The startup code goes first into FLASH */
.intvec (ORIGIN(FLASH)) :
{
. = ALIGN(4);
KEEP(*(.intvec)) /* Startup code */
. = ALIGN(4);
} >FLASH
/* The program code and other data goes into FLASH */
.text :
{
. = ALIGN(4);
KEEP(*(TAG_OTA_START))
KEEP(*(.cmd_call_table))
*(.text) /* .text sections (code) */
*(.text*) /* .text* sections (code) */
*(i.*) /* i.* sections (code) */
*(.constdata)
*(.glue_7) /* glue arm to thumb code */
*(.glue_7t) /* glue thumb to arm code */
. = ALIGN(4);
_etext = .;
} >FLASH
/* Constant data goes into FLASH */
.rodata :
{
. = ALIGN(4);
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
. = ALIGN(4);
} >FLASH
.ARM.extab (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
{
*(.ARM.extab*)
} >FLASH
.ARM (READONLY) : /* The READONLY keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
{
__exidx_start = .;
*(.ARM.exidx*)
__exidx_end = .;
} >FLASH
/* used by the startup to initialize data */
_sidata = LOADADDR(.data);
/* RAM preamble, uninitialized */
.ram_preamble 0x20000004 (NOLOAD) :
{
KEEP(*(.ram_vr))
} >RAM
/* RAM preamble, unininitialized */
.ram_preamble_2 0x20000034 (NOLOAD) :
{
KEEP(*(.crash_info_ram_vr))
} >RAM
/* Uninitialized data section */
.bss.blueRAM 0x200000C0 :
{
. = ALIGN(4);
_sbssblue = .; /* define a global symbol at .bss.blueRAM start */
KEEP(*(.bss.__blue_RAM))
. = ALIGN(4);
_ebssblue = .; /* define a global symbol at .bss.blueRAM end */
} >RAM
.bss DEFINED(MEMORY_RAM_APP_OFFSET) ? (ORIGIN(RAM) + MEMORY_RAM_APP_OFFSET) : . :
{
. = ALIGN(4);
_sbss = .; /* define a global symbol at bss start */
*(.bss)
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .; /* define a global symbol at bss end */
} >RAM
/* Initialized data sections goes into RAM, load LMA copy after code */
.data :
{
. = ALIGN(4);
_sdata = .; /* create a global symbol at data start */
*(.data) /* .data sections */
*(.data*) /* .data* sections */
. = ALIGN(4);
_edata = .; /* define a global symbol at data end */
} >RAM AT> FLASH
/* Data section that will not be initialized to any value. */
.noinit (NOLOAD):
{
. = ALIGN(4);
*(.noinit)
. = ALIGN(4);
} >RAM
.ota_region_end :
{
. = ALIGN(4);
KEEP(*(TAG_OTA_END))
. = ALIGN(4);
} >FLASH
.heap (NOLOAD):
{
. = ALIGN(4);
PROVIDE ( end = . );
PROVIDE ( _end = . );
. = . + _Min_Heap_Size;
. = ALIGN(4);
} >RAM
.stack (ORIGIN(RAM) + LENGTH(RAM) - _Min_Stack_Size) (NOLOAD) :
{
. = ALIGN(4);
. = . + _Min_Stack_Size;
. = ALIGN(4);
_estack = .; /* define a global symbol at stack end */
. = ALIGN(4);
} > RAM
.rom_info (NOLOAD) :
{
. = ALIGN(4);
KEEP(*(.rom_info))
. = ALIGN(4);
} >REGION_ROM
/* Remove information from the standard libraries */
/DISCARD/ :
{
libc.a ( * )
libm.a ( * )
libgcc.a ( * )
}
.ARM.attributes 0 : { *(.ARM.attributes) }
}
is it mixture of any assembly language and C?