2026 / 07 / 22
FSP链接器脚本中User Section的定义

Question:

链接器脚本(linker script)文件是用来做什么的?

Answer:

RA 系列 FSP 的链接器脚本文件用于在创建程序项目的同时使其满足 RA MCU 的内存资源需求。创建项目时,会根据编译器版本在script文件夹中生成fsp. <文件扩展名>。链接器脚本文件包括一个保存在 Debug 文件夹中名为 memory_regions.<文件扩展名>的文件,该文件中包含每个内存区域的起始地址和大小信息。这可以使通用链接器脚本文件符合多个不同的设备内存规范。

此外,FSP 链接器脚本提供了各种section定义,方便用户通过这些定义将代码/数据保存在他们希望保存的位置。


REGION 定义

Region定义 RA2
Cortex-M23
RA4/RA6
Cortex-M4
RA4/RA6
Cortex-M33
RA8
Cortex-M85
ITCM - - -
DTCM - - -
FLASH
RAM
DATA FLASH
QSPI_FLASH - ✓ 注1 ✓ 注1 -
OSPI_DEVICE_0 - - ✓ 注2 ✓ 注2
OSPI_DEVICE_1 - - ✓ 注2 ✓ 注2
OSPI_DEVICE_0_RAM - - ✓ 注2 ✓ 注2
OSPI_DEVICE_1_RAM - - ✓ 注2 ✓ 注2
SDRAM - ✓(RA6M3) -
OPTION_SETTING_xxx
(Code Flash中的选项设置字段)
✓ 注3 ✓ 注3
OPTION_SETTING_DATA_FLASH_S
(Data Flash中的选项设置字段)
- - -
ID_CODE -

“✓”: 适用,“-”:不适用。

注1: 适用于支持QSPI的产品。
注2: 适用于支持OSPI的产品。
注3: OFS区域位于FLASH区域。


SECTION 定义

  User Section名称 用于将代码/数据放置到特定区域的宏 分配区域 起始地址和结束地址的定义
RAM .code_in_ram BSP_PLACE_IN_SECTION(“.code_in_ram”) RAM区域。
初始数据位于FLASH区域
起始:__Code_In_RAM_Start
结束: __Code_In_RAM_End
ITCM .itcm_data BSP_PLACE_IN_SECTION(“.itcm_data”) ITCM区域。
初始数据位于FLASH区域
起始 : __itcm_data_start__
结束 : __itcm_data_end__

DTCM

.dtcm_data BSP_PLACE_IN_SECTION(“.dtcm_data”) DTCM区域。
初始数据位于FLASH区域
起始: __dtcm_data_start__
结束: __dtcm_data_end__
.dtcm_noinit BSP_PLACE_IN_SECTION(“.dtcm_noinit”) DTCM 区域。
无初始数据
起始: __dtcm_noinit_start
结束 : __dtcm_noinit_end

QSPI

.qspi_flash
.code_in_qspi
BSP_PLACE_IN_SECTION(“.qspi_flash“)BSP_PLACE_IN_SECTION(”.code_in_qspi“) QSPI_FLASH区域。
初始数据会映射到QSPI_FLASH区域并通过调试器下载
起始: __qspi_flash_start__
结束 :__qspi_flash_end__
.qspi_non_retentive BSP_PLACE_IN_SECTION(“.qspi_non_retentive”) QSPI_FLASH区域。
初始数据位于FLASH区域
起始: __qspi_non_retentive_start__
结束: __qspi_non_retentive_end__
初始数据的起始: __qspi_flash_code_addr__

OSPI

.ospi_device_0
.code_in_ospi_device_0
BSP_PLACE_IN_SECTION(“.ospi_device_0”)BSP_PLACE_IN_SECTION(“.code_in_ospi_device_0”) OSPI_DEVICE_0区域。初始数据映射到OSPI_DEVICE_0区域并通过调试器下载 起始: __ospi_device_0_start__
结束: __ospi_device_0_end__
.ospi_device_0_non_retentive BSP_PLACE_IN_SECTION(“.ospi_device_0_non_retentive”) OSPI_DEVICE_0区域。初始数据位于FLASH区域 起始: __ospi_device_0_non_retentive_start__
结束: __ospi_device_0_non_retentive_end__
初始数据的起始: __ospi_device_0_code_addr__
.ospi_device_0_no_load BSP_PLACE_IN_SECTION(“.ospi_device_0_no_load”) OSPI_DEVICE_0区域。无初始数据 起始: __ospi_device_0_start__
结束:  __ospi_device_0_end__
.ospi_device_1
.code_in_ospi_device_1
BSP_PLACE_IN_SECTION(“.ospi_device_1”)BSP_PLACE_IN_SECTION(“.code_in_ospi_device_1”) OSPI_DEVICE_0区域。初始数据映射到OSPI_DEVICE_1区域并通过调试器下载 起始: __ospi_device_1_start__
结束: __ospi_device_1_end__
.ospi_device_1_non_retentive BSP_PLACE_IN_SECTION(“.ospi_device_1_non_retentive”) OSPI_DEVICE_1区域。初始数据位于FLASH区域 起始 : __ospi_device_1_non_retentive_start__
结束:
__ospi_device_1_non_retentive_end__
初始数据的起始: __ospi_device_1_code_addr__
.ospi_device_1_no_load BSP_PLACE_IN_SECTION(“.ospi_device_1_no_load”) OSPI_DEVICE_1区域。无初始数据 起始 : __ospi_device_1_start__
结束:  __ospi_device_1_end__
Data flash .data_flash BSP_PLACE_IN_SECTION(“.data_flash”) DATA_FLASH区域。
初始数据映射到OSPI_DATA_FLASH_1区域并通过调试器下载
起始: __Data_Flash_Start
结束: __Data_Flash_End
SDRAM .sdram
.frame
BSP_place_in_section(“.sdram”)BSP_place_in_section(“.frame”) SDRAM区域。
初始数据应放置在非易失性区域,并由用户应用程序将其复制到SRAM区域
开始: __SDRAM_Start
结束: __SDRAM_End


注意:本文是基于FSP v5.0.0编写的。链接器脚本的具体内容可能会因FSP版本而异。

文件下载
隐私条款

一、接受条款 使用者(也称"您")在访问或使用本网站及其服务时,即已经表示同意并不加修改地接受本《用户协议》、本网站的《隐私声明》、《法律声明》以及其关或相链接的网页和网站的条件和条款的规定。我们强烈建议:在您阅读和接受本《用户协议》时,也应阅读并接受本《用户协议》中所提到《隐私声明》、《法律声明》及其相关或相链接网页或网站所包含的资料,因为《隐私声明》、《法律声明》及其它相关网页或网站可能包含对您适用的进一步规定。(请注意:点击划有底线的词句即可链接到上述《隐私声明》、《法律声明》及其它相关或相链接的网页和网站。

 

二、使用者的资格要求 在本网站中"使用者"指的是浏览、阅读、使用本网站信息或服务的任何个人或组织。本网站的服务仅适用于根据相关法律的规定具有签订有约束力的合同的个人或组织并仅由其使用。本网站的服务不向18周岁以下的个人使用者提供,也不向临时被本网站中止或取消使用者资格的使用者提供。如果使用者不符合本条规定,请停止使用本网站或本网站的服务。

样品
申请

应用
资源

微信