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

CubeIDE下分散加载如何实现

[复制链接]
challenge 发布时间:2020-11-26 11:38
FAE工程师您好,我在使用STM32H750XB搭载了SDRAM存储器。在CubeIDE中如何定义一个数组指定到SDRAM中,我在.ld文件中定义了方法section(".malloc"),如下:
  1.    .malloc :
    # N2 F: w0 t2 f
  2.   {# J/ u, n. E& A6 ]. d/ F
  3.     . = ALIGN(4);
    , i* R' A/ R7 U
  4.     __MALLOC_SYMBOLS = .;       /* create a global symbol at ccmram start */. U& p7 q# t# w. ~/ c' z
  5.     *(.malloc)
    $ z' v+ t/ I9 |4 \  p% r
  6.     *(.malloc*)
    % _' {# e" O' E% Q% [( \# L/ {
  7.     __MALLOC_SYMBOLS = .;       /* create a global symbol at ccmram end */
    9 m! r$ d, d5 X
  8.     . = ALIGN(4);4 }" V9 L1 a4 X) p
  9.     6 n9 X+ ?3 r: r- o4 h8 t0 {$ c2 M# D
  10.   } >MALLOC
复制代码
  1. MEMORY$ P1 `7 a& _/ c
  2. {/ P" V1 |9 c3 ~# _$ v
  3.   DTCMRAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 128K
    % M" \: `) F: ^: F4 I
  4.   ITCMRAM    (xrw)    : ORIGIN = 0x00000000,   LENGTH = 64K& {+ G% ~: |0 s3 {
  5.   RAM_D1    (xrw)    : ORIGIN = 0x24000000,   LENGTH = 512K
    , G% f; g# R0 V
  6.   RAM_D2    (xrw)    : ORIGIN = 0x30000000,   LENGTH = 288K9 g2 \+ l, z$ O1 L
  7.   RAM_D3    (xrw)    : ORIGIN = 0x38000000,   LENGTH = 64K9 t2 |6 E7 i: O# k+ y9 F
  8.   FLASH    (rx)      : ORIGIN = 0x8000000,   LENGTH = 128K
    ( Q% |9 K7 T: _% ]
  9.   MALLOC   (xrw)     : ORIGIN = 0xc0000000,   LENGTH = 64M
    0 W0 T4 G: U+ a
  10. }
复制代码
但是在程序中定义全局变量如下:
  1. 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
收藏 1 评论10 发布时间:2020-11-26 11:38

举报

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

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

下载

696.61 KB, 下载次数: 39

External_Loader-main.zip

下载

30.46 KB, 下载次数: 18

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:095 A$ i' N3 }, v/ y, _. W: x
这里是QSPI的加载过程,详细教程https://www.bilibili.com/video/B ... 8107792149691256998,如果用SPI总线 ...

, L' x$ M6 [2 \( u. ~6 e  g非常感谢您,那么怎么样实现CubeIDE中定义变量指定在SDRAM中呢?
李康1202 回答时间:2020-11-27 09:48:29
我是这样写的首先LD文件在MEMORY里面添加 9 ]- S/ m" p! A1 E# Z
GUI_NUMBYTES_section (xrw)  : ORIGIN = 0xc0600000, LENGTH = 8192K
2 V2 i* H! L5 r! _ 然后在最后一个大括号前添加  
% o3 j( H" c2 q.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

0 ^/ t  Q5 Z  ^
8 ~" z" J) [5 {, J, x3 e

STM32F429IGTX_FLASH.rar

下载

2.27 KB, 下载次数: 6

challenge 回答时间:2020-12-2 16:39:58
likang1202 发表于 2020-11-27 09:48. k9 O6 M3 N6 ^4 F  w& x4 E& A7 v* ~
我是这样写的首先LD文件在MEMORY里面添加 : Y: Z7 D( l3 O, k+ w' D/ p2 H
GUI_NUMBYTES_section (xrw)  : ORIGIN = 0xc0600000, LENGTH = ...
  g# [- ~  m. S5 e( f) k+ ~" {
还是不行,依然会生成一个很大的bin文件) [+ |+ r- @& A, U  j& F
李康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
5 ?" v! l) D) O# N0 f1 D& xbin文件大小应该会有3个G,没办法,最好生成hex文件;我理解的bin文件生成是这样的。bin文件的烧写地址是人 ...

" I% T) P5 x, w  y要做在线升级
Dandjinh 回答时间:2020-12-5 21:22:56
  1. SECTION: (NOLOAD)" [9 n% b  V, s1 M8 d
  2. {! y& z1 D5 ^0 g( g1 z2 R
  3.   .a1' l. ?) q! L$ K" z
  4.   ...$ Q% f: a( I: P9 C/ X, r
  5. } > SDRAM
复制代码
. d( j6 r8 L; \( `4 k5 p
这样就可以不在bin文件中加入LMA了。
5 H0 i$ J. ]! U4 W* e0 V5 c' M4 P注意,第一次编译先不加NOLOAD,编译过了再加
Kevin_G 回答时间:2020-12-13 09:55:35
资料很好

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版