基于IAR配置GD32使用TCMSRAM指定变量地址空间
概要
最近项目需要基于IAR开发GD32F450ZKT6,此MCU为Cortex-M4带浮点型内核,最高主频200MHz,片上Flash 3MB,片上SRAM 256KB,
片上SRAM分为SRAM0(112KB)、SRAM1(16KB)、SRAM2(64KB)、TCMSRAM(64KB)4块组成,SRAM0、SRAM1、SRAM2定义在
0x2000_0000~0x2002_FFFF 192KB连续空间,TCMSRAM紧密耦合SRAM定义在0x1000_0000~0x1000_FFFF空间,其工程集成了
FREERTOS、LWIP协议栈、DSP LIB、以及TIM PWM输出、TIM输入捕获测量信号频率、外部引脚中断、USART、SPI通讯以及
FFT数据处理等,0x2000_0000~0x2002_FFFF 192KB的片上SRAM已见底,急需使用TCMSRAM的64KB空间。
配置流程
整个配置是现在.icf文件中定义TCMSRAM的起始地址、结束地址、Size大小,
define symbol region_RAM1_start = 0x10000000;
define symbol region_RAM1_end = 0x1000FFFF;
define region RAM1_region = mem:[from region_RAM1_start to region_RAM1_end];
place in RAM1_region { section .sram };
然后在工程中使用下列命令可定义一组数组:
#pragma default_variable_attributes = @ “.sram” //启用指定
float fft_inputV[FFT_LENGTH2]; //fft输入数组
float fft_outputV[FFT_LENGTH]; //fft输出数组
float fft_inputI[FFT_LENGTH2];
float fft_outputI[FFT_LENGTH];
#pragma default_variable_attributes = //退出指定
打开工程Options —>linker,编辑.icf文件
代码中定义一组数组
编译生成的MAP文件
下图显示相关变量定义到了TCMSRAM所在空间
如图所示代表TCMSRAM使用成功