FAE工程师您好,我在使用STM32H750XB搭载了SDRAM存储器。在CubeIDE中如何定义一个数组指定到SDRAM中,我在.ld文件中定义了方法section(".malloc"),如下:- .malloc :
# N2 F: w0 t2 f - {# J/ u, n. E& A6 ]. d/ F
- . = ALIGN(4);
, i* R' A/ R7 U - __MALLOC_SYMBOLS = .; /* create a global symbol at ccmram start */. U& p7 q# t# w. ~/ c' z
- *(.malloc)
$ z' v+ t/ I9 |4 \ p% r - *(.malloc*)
% _' {# e" O' E% Q% [( \# L/ { - __MALLOC_SYMBOLS = .; /* create a global symbol at ccmram end */
9 m! r$ d, d5 X - . = ALIGN(4);4 }" V9 L1 a4 X) p
- 6 n9 X+ ?3 r: r- o4 h8 t0 {$ c2 M# D
- } >MALLOC
复制代码- MEMORY$ P1 `7 a& _/ c
- {/ P" V1 |9 c3 ~# _$ v
- DTCMRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
% M" \: `) F: ^: F4 I - ITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64K& {+ G% ~: |0 s3 {
- RAM_D1 (xrw) : ORIGIN = 0x24000000, LENGTH = 512K
, G% f; g# R0 V - RAM_D2 (xrw) : ORIGIN = 0x30000000, LENGTH = 288K9 g2 \+ l, z$ O1 L
- RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64K9 t2 |6 E7 i: O# k+ y9 F
- FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 128K
( Q% |9 K7 T: _% ] - MALLOC (xrw) : ORIGIN = 0xc0000000, LENGTH = 64M
0 W0 T4 G: U+ a - }
复制代码 但是在程序中定义全局变量如下:- uint16_t testsram[25000] __attribute((section(".malloc")));
复制代码 此时程序编译不会报错,但是会产生一个很大的bin文件,像是把数组写到了bin文件中,这是不行的,请问如何实现将指定数组定义在SDRAM中呢。
5 @+ b9 H+ e9 t( I1 ]! i2 B再者,如何编辑.ld文件实现分散加载,将程序下载到外部FLASH W25Q64当中呢,谢谢?* A+ N: [# Q( b# @1 x& n% C
|
éè¿STM32CubeMXå¶ä½å¤é¨Flashçç§å驱å¨.pdf
2020-11-26 13:52 上传
点击文件名下载附件
696.61 KB, 下载次数: 39
External_Loader-main.zip
2020-11-26 14:10 上传
点击文件名下载附件
30.46 KB, 下载次数: 18
非常感谢您,那么怎么样实现CubeIDE中定义变量指定在SDRAM中呢?
GUI_NUMBYTES_section (xrw) : ORIGIN = 0xc0600000, LENGTH = 8192K
然后在最后一个大括号前添加
.GUI_NUMBYTES_section : { *(.GUI_NUMBYTES_section) } >GUI_NUMBYTES_section ! n$ u0 T* ^1 p& d9 _( b
在使用时定义长度、申请数组: [. J* g9 [1 e+ n/ A9 G$ Z
#define GUI_NUMBYTES (1024) * 1*300 // x KByte4 U7 N; Y$ m" o. j1 s
U32 aMemory[GUI_NUMBYTES / 4] __attribute__((__section__(".GUI_NUMBYTES_section")));) r3 _7 L' x- X* H
下面是.ld文件4 K$ l4 ?9 t0 w2 t3 [
6 J g2 e6 s$ V; q
STM32F429IGTX_FLASH.rar
2020-11-27 09:50 上传
点击文件名下载附件
2.27 KB, 下载次数: 6
还是不行,依然会生成一个很大的bin文件) [+ |+ r- @& A, U j& F
要做在线升级
这样就可以不在bin文件中加入LMA了。
注意,第一次编译先不加NOLOAD,编译过了再加