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?
2024-11-25 11:38 PM
It's a Linker Script so technically neither.
The '.' here being the current output pointer of the data being written to each section as the Linker collects them from the contributing Object files.