STM32
直播中

杨丽

7年用户 1331经验值
私信 关注
[问答]

关于CUBEIDE中使用SDRAM定义变量的问题求解

MCU为STM32H743。
因为正在做的项目的数据量比较大,所以要将某些大的数组放到SDRAM中。我在ld文件中的段定义如下图:
MEMORY{  FLASH (rx)     : ORIGIN = 0x08020000, LENGTH = 1920K
  DTCMRAM (xrw)  : ORIGIN = 0x20000000, LENGTH = 128K
  RAM_D1 (xrw)   : ORIGIN = 0x24000000, LENGTH = 512K
  RAM_D2 (xrw)   : ORIGIN = 0x30000000, LENGTH = 288K
  RAM_D3 (xrw)   : ORIGIN = 0x38000000, LENGTH = 64K
  ITCMRAM (xrw)  : ORIGIN = 0x00000000, LENGTH = 64K
  SDRAM (xrw) : ORIGIN = 0xc0000000, LENGTH = 32768K
}
  .SDRAM_Area :  {    . = ALIGN(4);    KEEP(*(.SDRAM_Area))    . = ALIGN(4);  } >SDRAM
所使用的数组定义如下:attribute((section(".SDRAM_Area"))) __IO uint8_t Rx6Buf[1460];编译后,进行debug时出现如下的错误:

请问下各路大神,这是什么原因。



回帖(1)

dplion5

2024-7-5 17:27:51
在CUBEIDE中使用SDRAM定义变量的问题,我们可以按照以下步骤进行操作:

1. 首先,确保你已经正确配置了SDRAM。在STM32H743中,SDRAM通常位于外部存储器,需要在硬件层面进行配置。

2. 在CUBEIDE中,打开你的项目,然后找到链接器脚本文件(通常是.ld文件)。在这个问题中,你已经提供了链接器脚本的一部分。我们需要在该文件中添加SDRAM的段定义。

3. 在链接器脚本中添加SDRAM段定义。假设SDRAM的起始地址为0x60000000,大小为8MB(8 * 1024 * 1024字节),可以添加如下定义:

```
SDRAM (rw) : ORIGIN = 0x60000000, LENGTH = 8M
```

4. 现在,我们需要将大数组放置在SDRAM中。为此,你可以使用`__attribute__((section(".sdr")))`来指定数组应该放置在SDRAM段。例如:

```c
int large_array[1024] __attribute__((section(".sdr")));
```

5. 在你的C源文件中,添加一个宏定义来创建SDRAM段的符号:

```c
#define SDRAM_SECTION __attribute__((section(".sdr")))
```

6. 然后,在你的C源文件中,使用这个宏来定义大数组:

```c
int large_array[1024] SDRAM_SECTION;
```

7. 最后,确保你的项目设置中包含了正确的链接器脚本文件。在CUBEIDE中,可以在项目的“Build”设置中找到“MCU Linker Script File”选项,确保它指向了你修改过的链接器脚本文件。

8. 编译并下载程序到你的STM32H743开发板。如果一切设置正确,大数组将被放置在SDRAM中。

通过以上步骤,你应该能够在CUBEIDE中为STM32H743使用SDRAM定义变量。如果遇到问题,请检查硬件配置、链接器脚本文件以及C源文件中的宏定义和数组声明。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分