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

CubeIDE下分散加载如何实现

[复制链接]
challenge 发布时间:2020-11-26 11:38
FAE工程师您好,我在使用STM32H750XB搭载了SDRAM存储器。在CubeIDE中如何定义一个数组指定到SDRAM中,我在.ld文件中定义了方法section(".malloc"),如下:
  1.    .malloc :
    : P4 X& V7 [3 ]
  2.   {4 W% w+ }% U' Z$ H5 y( R
  3.     . = ALIGN(4);+ E$ ^7 r1 Z2 {; n# I
  4.     __MALLOC_SYMBOLS = .;       /* create a global symbol at ccmram start */
    - ~. e9 R" `" |$ t; ~
  5.     *(.malloc)
    # Z+ A* Z8 H3 _' c6 p6 w6 Q
  6.     *(.malloc*). J2 x: t% s" O9 ~4 U: i' [
  7.     __MALLOC_SYMBOLS = .;       /* create a global symbol at ccmram end */
    3 t. t6 ~4 ~) G# d  \; F
  8.     . = ALIGN(4);6 |0 R& R( o5 y2 b8 W% G* E7 D
  9.     ( U6 c0 c$ V* ]; f/ T. B4 c
  10.   } >MALLOC
复制代码
  1. MEMORY
    5 R4 e6 ^& U' l$ N) ?# n
  2. {, C$ }/ x# X  F  ^, @4 W: B
  3.   DTCMRAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 128K, u# C! X5 K$ G9 _& d% u9 H$ }
  4.   ITCMRAM    (xrw)    : ORIGIN = 0x00000000,   LENGTH = 64K
    0 U4 `- @/ B! `0 I  y( w
  5.   RAM_D1    (xrw)    : ORIGIN = 0x24000000,   LENGTH = 512K
    9 o4 C9 }+ F  u- K: T1 g8 z
  6.   RAM_D2    (xrw)    : ORIGIN = 0x30000000,   LENGTH = 288K
    1 E) `2 x1 G1 j- T# q8 r) _6 l
  7.   RAM_D3    (xrw)    : ORIGIN = 0x38000000,   LENGTH = 64K
    + z) Q4 L- H! I- T
  8.   FLASH    (rx)      : ORIGIN = 0x8000000,   LENGTH = 128K7 v$ o( w  o! b. k% P$ P% w
  9.   MALLOC   (xrw)     : ORIGIN = 0xc0000000,   LENGTH = 64M
    ! T4 |% B3 C9 r. J) U8 P8 n
  10. }
复制代码
但是在程序中定义全局变量如下:
  1. uint16_t testsram[25000]  __attribute((section(".malloc")));
复制代码
此时程序编译不会报错,但是会产生一个很大的bin文件,像是把数组写到了bin文件中,这是不行的,请问如何实现将指定数组定义在SDRAM中呢。
5 \5 A9 B/ p/ l' g; e0 R再者,如何编辑.ld文件实现分散加载,将程序下载到外部FLASH W25Q64当中呢,谢谢?1 C- Z& I( x9 l7 i
收藏 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
1 _2 _% y1 l! y3 H3 c  O这里是QSPI的加载过程,详细教程https://www.bilibili.com/video/B ... 8107792149691256998,如果用SPI总线 ...
0 t) c: g7 a* ?" X4 ~8 o$ D
非常感谢您,那么怎么样实现CubeIDE中定义变量指定在SDRAM中呢?
李康1202 回答时间:2020-11-27 09:48:29
我是这样写的首先LD文件在MEMORY里面添加 " i: v* L' \" l6 F) m
GUI_NUMBYTES_section (xrw)  : ORIGIN = 0xc0600000, LENGTH = 8192K
: q* P$ n; G  q# F% m 然后在最后一个大括号前添加  
" ~9 R9 L4 E; ?/ l0 r.GUI_NUMBYTES_section : { *(.GUI_NUMBYTES_section) } >GUI_NUMBYTES_section / _3 i2 c6 G3 |7 [+ b
在使用时定义长度、申请数组4 n; Y4 M; y. J- k7 F4 Q7 j% ]3 f
#define GUI_NUMBYTES  (1024) *  1*300   // x KByte4 s8 Q, s, i4 }  }
U32 aMemory[GUI_NUMBYTES / 4]  __attribute__((__section__(".GUI_NUMBYTES_section")));
2 p+ X! w( K# V& I9 k下面是.ld文件
" ^- T' n5 @0 f' s1 m1 v) E+ K3 Q( M2 p8 U/ c" N
$ w: M  T6 L- a9 u8 ~
& I0 R/ B' [6 W/ i' ]5 ?1 F) L

STM32F429IGTX_FLASH.rar

下载

2.27 KB, 下载次数: 6

challenge 回答时间:2020-12-2 16:39:58
likang1202 发表于 2020-11-27 09:48$ t. ~$ \! o6 p$ ]$ Q7 k
我是这样写的首先LD文件在MEMORY里面添加 4 ~6 o$ G9 B7 r3 T
GUI_NUMBYTES_section (xrw)  : ORIGIN = 0xc0600000, LENGTH = ...

' X# o. j+ ^  L* x) B还是不行,依然会生成一个很大的bin文件
- m. k, [" g9 r3 E' A8 d
李康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
6 Q( i" W! C3 ~3 L. ybin文件大小应该会有3个G,没办法,最好生成hex文件;我理解的bin文件生成是这样的。bin文件的烧写地址是人 ...

; n, \7 v9 R) x1 H2 j; N要做在线升级
Dandjinh 回答时间:2020-12-5 21:22:56
  1. SECTION: (NOLOAD)6 v5 w+ U/ t+ t$ N7 D# j1 S
  2. {6 S1 [* _2 F! N! I
  3.   .a1( w* R- ~2 p9 c5 |& z3 u
  4.   ...
    6 J0 M3 s& B! D3 \1 m: S
  5. } > SDRAM
复制代码
' ?9 J: j+ }0 g$ s  x( C4 ]$ R' M
这样就可以不在bin文件中加入LMA了。6 I6 L- c4 v5 b, e7 _: w7 M, i. s, z
注意,第一次编译先不加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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版