你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
stm32f207外部SRAM自动分配问题?
[复制链接]
winamp123
提问时间:2013-9-26 21:49 /
STM32接了512K外部SRAM。可以MDK编译器不认这块内存,因为当我定义一块大的ZI区内存时,编译老报错,提示存储空间不够,(内部SRAM已经用完), 如:
uint8_t test[1024*30];
请问是MDK设置问题吗?如何让编译器识别外部SRAM,此时外部SRAM初始化放在哪里?
是否只能通过指定地址来访问?
赞
0
收藏
0
评论
10
分享
发布时间:2013-9-26 21:49
举报
请先
登录
后回复
10个回答
fengye5340
回答时间:2013-9-27 09:31:46
a0a.1 0b0c
回复:stm32f207外部SRAM自动分配问题?
STM32外置SRAM时,除了FSMC配置外,还要在MDK里面的编译选项中进行设置,如图:
这里要根据配置好的地址写入起始地址和大小。
对外部SRAM的初始化,要放在内部RAM中进行的。最好的方法就是参考ST的官网例程。里面有具体的例子
赞
0
评论
回复
支持
反对
winamp123
回答时间:2013-9-27 14:21:23
a0a.1 0b0c
RE:stm32f207外部SRAM自动分配问题?
谢谢楼上的建议。我这样设置过了,编译是能通过。但是有一个问题,如果设置在RAM1,系统会自动把堆栈设置在RAM1地址,而此时外部SRAM还没有初始化,内部数据是无效的值。这样会导致函数返回时,堆栈出错。
请问有什么办法解决这个问题
赞
0
评论
回复
支持
反对
狼
回答时间:2013-9-27 16:01:36
a0a.1 0b0c
RE:stm32f207外部SRAM自动分配问题?
这个还需要用程序初始化外部RAM吧
赞
0
评论
回复
支持
反对
fengye5340
回答时间:2013-9-27 16:26:15
a0a.1 0b0c
回复:stm32f207外部SRAM自动分配问题?
这个问题你试试下面的方法吧:
1、MDK里面设置好这个
2--找到 main(). 右键点击出来 otpin for file "main.c"后,做如下设置:
第一项选择内部的IRAM1,后面的数据选择 你的外扩RAM1。
再设置的过程中,要记得把外扩的内存初始化,最好放到systeminit()这个函数中。
赞
0
评论
回复
支持
反对
winamp123
回答时间:2013-9-27 16:26:54
a0a.1 0b0c
RE:stm32f207外部SRAM自动分配问题?
当然需要程序初始化外部SRAM。问题是在初始化之前,系统已经用了外部SRAM做堆栈了。怎样避免这种情况?
赞
0
评论
回复
支持
反对
fengye5340
回答时间:2013-9-27 17:09:53
a0a.1 0b0c
回复:stm32f207外部SRAM自动分配问题?
回复第 6 楼 于2013-09-27 16:26:54发表:
当然需要程序初始化外部SRAM。问题是在初始化之前,系统已经用了外部SRAM做堆栈了。怎样避免这种情况?
堆栈要用内部的RAM,不要用外部的,外部的SRAM只是用来存储一些临时变量,建议你把工程文件发上来看看
赞
0
评论
回复
支持
反对
dzc2001
回答时间:2013-9-28 23:26:47
a0a.1 0b0c
RE:stm32f207外部SRAM自动分配问题?
外部SRAM用的时候都是将变量啥的用attribute定义到指定的地址段(S外部SRAM)。
你在哪里看到的堆栈定义到外部SRAM了?
赞
0
评论
回复
支持
反对
wkuang
回答时间:2013-10-6 17:00:29
a0a.1 0b0c
RE:stm32f207外部SRAM自动分配问题?
需要使用MDK界面进行设置,才可以使用外部RAM。
MDK设置后,可以生成一个scatter file, 编译器使用scatter file去进行编译,生成.out文件,指定代码段和数据段存放的位置,存储域和执行域的位置。
楼主也可以自己写一个scatter file,指定代码存放的位置, 全局变量和代码的存储位置。
具体可参考arm编译器手册的分散加载模块
补充一点,楼主最好手动对zi域清零,对外部存储器清零,已免代码跑飞了
赞
0
评论
回复
支持
反对
nyszx
回答时间:2013-12-9 18:10:11
a0a.1 0b0c
回复:stm32f207外部SRAM自动分配问题?
回复第 5 楼 于2013-09-27 16:26:15发表:
这个问题你试试下面的方法吧:
1、MDK里面设置好这个
2--找到 main(). 右键点击出来 otpin for file "main.c"后,做如下设置:
第一项选择内部的IRAM1,后面的数据选择 你的外扩RAM1。
再设置的过程中,要记得把外扩的内存初始化,最好放到systeminit()这个函数中。
求助,我怎么找不到otpin for file "main.c",在哪里啊~
赞
0
评论
回复
支持
反对
ifreecoding
回答时间:2013-12-10 10:51:42
a0a.1 0b0c
RE:stm32f207外部SRAM自动分配问题?
我使用的是keil4,外部sram我没用过,但内部的sram可以通过sct文件来设置,下面是我的配置,具体工程可以在我的博客下载,blog.sina.com.cn/ifreecoding
,;本程序使用延迟函数DEV_DelayMs模拟程序运行时间, STM32芯片FLASH预取指缓冲
;会根据地址不同影响指令执行速度, 为保证DEV_DelayMs函数执行时间稳定, 通过
;本链接文件将DEV_DelayMs函数所编译的unoptimize.o文件固定在指定的地址
LR_IROM1 0x08000000 0x00039000 { ; load region size_region
ER_IROM1 0x08000000 0x00039000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x0000C000 { ; RW data
.ANY (+RW +ZI)
}
}
;如果你使用的STM32芯片不支持256K字节, 加载程序时会出错, 请将下面的代码全
;部删除即可, 但本程序的执行结果可能会受影响
LR_IROM2 0x08039004 0x00006FFC { ; load region size_region
ER_IROM2 0x08039004 0x00006FFC { ; load address = execution address
unoptimize.o
}
}
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
回复:stm32f207外部SRAM自动分配问题?
这里要根据配置好的地址写入起始地址和大小。
对外部SRAM的初始化,要放在内部RAM中进行的。最好的方法就是参考ST的官网例程。里面有具体的例子
RE:stm32f207外部SRAM自动分配问题?
请问有什么办法解决这个问题
RE:stm32f207外部SRAM自动分配问题?
回复:stm32f207外部SRAM自动分配问题?
1、MDK里面设置好这个
2--找到 main(). 右键点击出来 otpin for file "main.c"后,做如下设置:
第一项选择内部的IRAM1,后面的数据选择 你的外扩RAM1。
再设置的过程中,要记得把外扩的内存初始化,最好放到systeminit()这个函数中。
RE:stm32f207外部SRAM自动分配问题?
回复:stm32f207外部SRAM自动分配问题?
当然需要程序初始化外部SRAM。问题是在初始化之前,系统已经用了外部SRAM做堆栈了。怎样避免这种情况?
堆栈要用内部的RAM,不要用外部的,外部的SRAM只是用来存储一些临时变量,建议你把工程文件发上来看看
RE:stm32f207外部SRAM自动分配问题?
你在哪里看到的堆栈定义到外部SRAM了?
RE:stm32f207外部SRAM自动分配问题?
MDK设置后,可以生成一个scatter file, 编译器使用scatter file去进行编译,生成.out文件,指定代码段和数据段存放的位置,存储域和执行域的位置。
楼主也可以自己写一个scatter file,指定代码存放的位置, 全局变量和代码的存储位置。
具体可参考arm编译器手册的分散加载模块
补充一点,楼主最好手动对zi域清零,对外部存储器清零,已免代码跑飞了
回复:stm32f207外部SRAM自动分配问题?
这个问题你试试下面的方法吧:
1、MDK里面设置好这个
2--找到 main(). 右键点击出来 otpin for file "main.c"后,做如下设置:
第一项选择内部的IRAM1,后面的数据选择 你的外扩RAM1。
再设置的过程中,要记得把外扩的内存初始化,最好放到systeminit()这个函数中。
求助,我怎么找不到otpin for file "main.c",在哪里啊~
RE:stm32f207外部SRAM自动分配问题?
,;本程序使用延迟函数DEV_DelayMs模拟程序运行时间, STM32芯片FLASH预取指缓冲
;会根据地址不同影响指令执行速度, 为保证DEV_DelayMs函数执行时间稳定, 通过
;本链接文件将DEV_DelayMs函数所编译的unoptimize.o文件固定在指定的地址
LR_IROM1 0x08000000 0x00039000 { ; load region size_region
ER_IROM1 0x08000000 0x00039000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x0000C000 { ; RW data
.ANY (+RW +ZI)
}
}
;如果你使用的STM32芯片不支持256K字节, 加载程序时会出错, 请将下面的代码全
;部删除即可, 但本程序的执行结果可能会受影响
LR_IROM2 0x08039004 0x00006FFC { ; load region size_region
ER_IROM2 0x08039004 0x00006FFC { ; load address = execution address
unoptimize.o
}
}