硬汉嵌入式论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: eric2013
收起左侧

[SDRAM] 【原创】像使用内部SRAM一样定义使用STM32H7的外部SDRAM,含MDK和IAR两版

  [复制链接]

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2023-9-9 15:23:47 | 显示全部楼层
thanks for hiang
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2025-1-6 12:04:26 | 显示全部楼层
shzdf123 发表于 2021-12-1 10:04
RW_SDRAM 0xd0000000 UNINIT 0x02000000  {  ; RW data
        .ANY (+ZI)
        *(.bss.SDRAM)

sct分散加载文件中那个名字也需要改为 .bss.SDRAM
官方那个帖子有说明的。
回复

使用道具 举报

8

主题

31

回帖

55

积分

初级会员

积分
55
发表于 2025-3-2 23:00:31 | 显示全部楼层
eric2013 发表于 2021-2-10 18:34
SDRAM那个比较特殊,用于AC6的,这个里面的zero_init不起作用了,被AC6忽略,所以会进硬件异常。
__attr ...

硬汉哥,我SDRAM的size最高只能给到1024KB,再给高点就会像楼上的朋友一样会出现上电直接进入硬报错中断了,这问题可能会是哪里啊,想半天想不到,卡了一整天了
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-4-11 18:06:05 | 显示全部楼层
使用V6编译器 时   
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-4-11 18:07:34 | 显示全部楼层
AC6  编译器时
   RW_IRAM5 0XC0000000 UNINIT 0x02000000 {  ; RW data - 32768KB SDRAM4(0x38000000)    .ANY(+ZI)  
   *(.bss.SDRAM)
  }
__attribute__((section (".bss.SDRAM")))  uint16_t  testsram[250000] ;               
加载文件 使用.bss.SDRAM 就可以了
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2025-12-5 16:28:56 | 显示全部楼层
missfox 发表于 2020-7-8 17:57
原来关键在zero_init上

请教下:zero_init不是让定义变量的时候顺便初始化为0么?我的为什么加上,初始化的值不赋值的时候,打印出来还是随机数呢?
回复

使用道具 举报

6

主题

162

回帖

180

积分

初级会员

积分
180
发表于 2025-12-5 18:19:33 | 显示全部楼层
yan4080310 发表于 2025-12-5 16:28
请教下:zero_init不是让定义变量的时候顺便初始化为0么?我的为什么加上,初始化的值不赋值的时候,打印 ...

AC5 用的是 zero_init,AC6 用的是 .bss
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120451
QQ
 楼主| 发表于 2025-12-6 10:27:40 | 显示全部楼层
yan4080310 发表于 2025-12-5 16:28
请教下:zero_init不是让定义变量的时候顺便初始化为0么?我的为什么加上,初始化的值不赋值的时候,打印 ...

我这里的目的是不初始化SDRAM,因为SDRAM硬件还没有初始化,就给SDRAM变量设置初始值会异常
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2025-12-8 14:43:20 | 显示全部楼层
eric2013 发表于 2025-12-6 10:27
我这里的目的是不初始化SDRAM,因为SDRAM硬件还没有初始化,就给SDRAM变量设置初始值会异常

明白了!那如果要初始化SDRAM,只能在大循环开始前,利用for循环赋0值吗?不能像内部的ram那样直接定义就是赋0值吗?还有个问题是,有办法在局部变量中用到大数组、大堆栈的时候,自动就分配到外部SDRAM中吗?
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120451
QQ
 楼主| 发表于 2025-12-9 10:49:48 | 显示全部楼层
yan4080310 发表于 2025-12-8 14:43
明白了!那如果要初始化SDRAM,只能在大循环开始前,利用for循环赋0值吗?不能像内部的ram那样直接定义就 ...

1、可以,不过得提前初始化,比如MDK,要在__main函数前就初始化好。
2、局部变量使用动态内存比较方便。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-1-11 04:27 , Processed in 0.071347 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表