你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

CubeIDE下分散加载如何实现

[复制链接]
challenge 发布时间:2020-11-26 11:38
FAE工程师您好,我在使用STM32H750XB搭载了SDRAM存储器。在CubeIDE中如何定义一个数组指定到SDRAM中,我在.ld文件中定义了方法section(".malloc"),如下:
  1.    .malloc :6 F- M7 Z8 V& k, t4 n  ^
  2.   {
    2 Y0 y7 `) t! ]6 q' ]& U  h
  3.     . = ALIGN(4);
    ; p; y. E* i3 D
  4.     __MALLOC_SYMBOLS = .;       /* create a global symbol at ccmram start */" Q( f/ [/ J7 K8 e) c6 m
  5.     *(.malloc), \& @, Q1 X8 E. |7 S8 e% n
  6.     *(.malloc*)+ G8 G/ Z( h9 G
  7.     __MALLOC_SYMBOLS = .;       /* create a global symbol at ccmram end */
    " g7 g1 R$ f: U+ `4 \- D
  8.     . = ALIGN(4);' I% H- x0 T0 B$ E' F$ l# i& U. e, E
  9.     ' I5 t* h# o8 I$ J
  10.   } >MALLOC
复制代码
  1. MEMORY
    + `: Y2 {1 f' C" ?  r+ _0 q7 O
  2. {* b; D8 o4 G4 K$ L# M
  3.   DTCMRAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 128K
    0 k3 H: y* W$ Z4 v+ P( Q
  4.   ITCMRAM    (xrw)    : ORIGIN = 0x00000000,   LENGTH = 64K3 N, |' Q4 X' q6 y
  5.   RAM_D1    (xrw)    : ORIGIN = 0x24000000,   LENGTH = 512K/ d/ d* S5 T3 S4 ^+ Q, z9 _$ Y
  6.   RAM_D2    (xrw)    : ORIGIN = 0x30000000,   LENGTH = 288K
    2 f; ~0 O7 [' u# x3 S/ O7 l! I4 ~6 N
  7.   RAM_D3    (xrw)    : ORIGIN = 0x38000000,   LENGTH = 64K' V& X( L. v. e# [0 o( Q! K
  8.   FLASH    (rx)      : ORIGIN = 0x8000000,   LENGTH = 128K5 Z1 [* g5 \% M* L4 [9 o$ f
  9.   MALLOC   (xrw)     : ORIGIN = 0xc0000000,   LENGTH = 64M
    # p! h( L6 D  p# G4 r# i
  10. }
复制代码
但是在程序中定义全局变量如下:
  1. uint16_t testsram[25000]  __attribute((section(".malloc")));
复制代码
此时程序编译不会报错,但是会产生一个很大的bin文件,像是把数组写到了bin文件中,这是不行的,请问如何实现将指定数组定义在SDRAM中呢。
" w, D2 \! u, J1 q再者,如何编辑.ld文件实现分散加载,将程序下载到外部FLASH W25Q64当中呢,谢谢?- r, x0 I+ B5 h& L1 y, N. W
收藏 1 评论11 发布时间:2020-11-26 11:38

举报

11个回答
李康1202 回答时间:2020-11-26 14:09:20
这里是QSPI的加载过程,详细教程https://www.bilibili.com/video/B ... 8107792149691256998,如果用SPI总线的话需要自己仿写驱动,在CubePro里面有示例工程
官方示例工程.png

通过STM32CubeMX制作外部Flash的烧写驱动.pdf

下载

696.61 KB, 下载次数: 42

External_Loader-main.zip

下载

30.46 KB, 下载次数: 25

yzz163 回答时间:2020-11-26 14:12:32
不错的资料。谢谢。
李康1202 回答时间:2020-11-26 14:27:44
至于生成的文件你可以生成HEX文件,将生成BIN文件的命令勾选掉,
challenge 回答时间:2020-11-26 16:49:47
likang1202 发表于 2020-11-26 14:09' A: X6 W4 f+ R! X4 ^
这里是QSPI的加载过程,详细教程https://www.bilibili.com/video/B ... 8107792149691256998,如果用SPI总线 ...

, Q& S! f; u0 B5 o非常感谢您,那么怎么样实现CubeIDE中定义变量指定在SDRAM中呢?
李康1202 回答时间:2020-11-27 09:48:29
我是这样写的首先LD文件在MEMORY里面添加
! Q/ J$ v! }) V+ f5 o GUI_NUMBYTES_section (xrw)  : ORIGIN = 0xc0600000, LENGTH = 8192K
3 o. R: y2 T. y; ]- }0 M% K% w, m 然后在最后一个大括号前添加  
* u" K6 p1 ^( e5 x: y5 L& w.GUI_NUMBYTES_section : { *(.GUI_NUMBYTES_section) } >GUI_NUMBYTES_section
8 K, D  N0 d2 j* I$ h 在使用时定义长度、申请数组' f7 W* h; J9 E4 Q
#define GUI_NUMBYTES  (1024) *  1*300   // x KByte! m' l. S5 U6 e, Z2 @
U32 aMemory[GUI_NUMBYTES / 4]  __attribute__((__section__(".GUI_NUMBYTES_section")));
& ?1 E4 s+ ~! T* U& J下面是.ld文件
  F% w( D3 P8 w. `- b: v# B) Z+ g, l9 y; _

  L) ?/ E) F3 R$ D- Y5 ]5 h' J  R7 C4 d- ]6 T$ b

STM32F429IGTX_FLASH.rar

下载

2.27 KB, 下载次数: 6

challenge 回答时间:2020-12-2 16:39:58
likang1202 发表于 2020-11-27 09:482 l1 a8 O4 t& _' x" z5 s' Y
我是这样写的首先LD文件在MEMORY里面添加
# i0 b/ X& D* W( ^* y GUI_NUMBYTES_section (xrw)  : ORIGIN = 0xc0600000, LENGTH = ...

* K+ j& A2 x& }+ I4 k, q( [0 W5 R! h还是不行,依然会生成一个很大的bin文件
2 B7 }! ^, ^6 I+ \
李康1202 回答时间:2020-12-3 09:45:35
bin文件大小应该会有3个G,没办法,最好生成hex文件;我理解的bin文件生成是这样的。bin文件的烧写地址是人为设定的,所以从0X08000000到0xC0000000这些地址全被填充数据了,所以说会有这么大的bin文件
challenge 回答时间:2020-12-5 19:54:39
likang1202 发表于 2020-12-3 09:45# _$ f6 [6 w3 K" j5 k4 T
bin文件大小应该会有3个G,没办法,最好生成hex文件;我理解的bin文件生成是这样的。bin文件的烧写地址是人 ...
2 o& T, z. s1 o% m) t
要做在线升级
Dandjinh 回答时间:2020-12-5 21:22:56
  1. SECTION: (NOLOAD). |' o, s( E4 t: Q6 d
  2. {' L" z$ n7 ^& g% i# Q* {; w1 K
  3.   .a1& P/ ~& u6 Q. G9 k: @4 R" k
  4.   .../ b: Z4 n+ U/ K6 ?8 K, `4 y: X8 V
  5. } > SDRAM
复制代码
$ z+ ?4 o! m$ d8 D) a4 [
这样就可以不在bin文件中加入LMA了。
0 \0 v! H# R4 B' e3 W+ {注意,第一次编译先不加NOLOAD,编译过了再加
Kevin_G 回答时间:2020-12-13 09:55:35
资料很好
wits 回答时间:2024-7-11 16:25:22

李康1202 发表于 2020-11-26 14:09
这里是QSPI的加载过程,详细教程https://www.bilibili.com/video/B ... 8107792149691256998,如果用SPI总线 ...

按步骤配置后如果Stm32CubeProgrammer识别不了stldr文件可以看一下

CubeIDE的构建设置里面的MCU GCC Linker的General里面的Discard unused sections选项有没有打开,要关闭后才能识别

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版