想把大数组定义到外部SDRAM的绝对地址处,结果编译发现warning:'at' attribute directive ignored
,
也就是说无法在RTthreadStudio中使用`_attribute((at(地址)))`这种绝对定位方式,
请问如何操作才能将数组定义到外部SDRAM呢(非动态分配方式)?
网上自己查阅了一下,有说用_attribute_((section(“块名”)))
,
但好像要修改lds文件,对于lds文件并不是很了解,
请问具体该如何操作,还是说有其他方式?
请大家帮帮忙,谢谢!
举个栗子,
rtt-studio 用的是 GCC 编译器, 所以前面增加 GNUC
下面描述就是将 ADC 的数组指定到某个区域去,这个区域的指定,需要修改链接文件 lds。
这样还不够,在修改一下
这样就可以了,楼主赶紧去试试吧。
另外也可以参考一下 ART-Pi 以太网描述符的方法。
内部 SRAM
STM32H7x3 器件具有:
多达 864 KB 的系统 SRAM
128 KB 的数据 TCM RAM
64 KB 的指令 TCM RAM
4 K 字节的备份 SRAM
嵌入式系统 SRAM 最多可分为五个块:
AXI SRAM(D1 域):
– 映射到地址 0x2400 0000 的 AXI SRAM,可供除 BDMA 外的所有系统主设备通过
D1 域 AXI 总线矩阵访问
AHB SRAM(D2 域):
– 映射到地址 0x3000 0000 的 AHB SRAM1,可供除 BDMA 外的所有系统主设备通 DMA1 DMA2 可以访问AHB
过 D2 域 AHB 矩阵访问
– 映射到地址 0x3002 0000 的 AHB SRAM2,可供除 BDMA 外的所有系统主设备通 DMA1 DMA2 可以访问AHB
过 D2 域 AHB 矩阵访问
– 映射到地址 0x3004 0000 的 AHB SRAM3,可供除 BDMA 外的所有系统主设备通 DMA1 DMA2 可以访问AHB
过 D2 域 AHB 矩阵访问
AHB SRAM(D3 域):
– 映射到地址 0x3800 0000 的 AHB SRAM4,可供大多数系统主设备通过 D3 域 AHB BDMA DMA1 DMA2 可以访问AHB
1、增加一个新的“可用存储区域” 在link.lds中
直接使用RTT的编辑器 不可修改文本 直接添加的(只添加了ADCArraySection (rw) : ORIGIN =0x30020000,LENGTH =128k) 缺少必要的描述
使用文本编辑器 在外部打开 添加以下内容
在 MEMORY 中 添加
ADCArraySection (rw) : ORIGIN =0x30020000,LENGTH =128k
在 SECTIONS 中 添加
2、在定义ADC存放数据的数组时,需要使用 __attribute__
参数进行描述rt_uint16_t pData[4]__attribute__((section(".ADCArraySection"))) = { 0 };
至此 就可以将数组定位到DMA可以访问的位置了
这样的读到的地址是
之前有错误的时候是