[STM32F1] STM32 如何将变量定义到外部RAM

[复制链接]
 楼主| lizye 发表于 2022-3-2 23:23 | 显示全部楼层 |阅读模式
STM32 如何将变量定义到外部RAM
jiahy 发表于 2022-3-2 23:24 | 显示全部楼层
10多年,我一直搞这类项目,有开机应答,输入,码的发送,码的读取,等等,
 楼主| lizye 发表于 2022-3-2 23:26 | 显示全部楼层
正点原子探索者的STM32F407开发板,配置有1M的SRAM
本想基于例程的ucos+LWIP实验“网络实验8 NETCONN_TCP 客户端.rar”,加上老项目任务就OK,但多次编译编译失败;
查找问题:居然是ucos+LWIP例程中用到外部RAM和内存管理,使原本很充裕的192k的ram(老项目用一半不到),一下所
剩无几,稍加变量就编译出错。
做了个实验,定义一个全局变量test[6000]就能编译OK,test[7000]就出错.
由于旧工程都是采用这种定义方式,而且很多不同类型的变量,
该怎么实现将这些变量定义到外部ram里面,简化移植难度呢?
juventus9554 发表于 2022-3-2 23:30 | 显示全部楼层
把 #program 语句加在程序中、变量定义之前的位置
jiajs 发表于 2022-3-2 23:34 | 显示全部楼层
用强制指定地址, __at() 可以把变量放到外部 SRAM 中。
zwll 发表于 2022-3-2 23:37 | 显示全部楼层

你也可以修改编译器的配置,增加 SRAM 空间,在 MDK 的工程属性Target标签
huangchui 发表于 2022-3-2 23:41 | 显示全部楼层
试试把变量和堆栈分配到外部SRAM, 那就把 0X68000000  设置成 default
xxrs 发表于 2022-3-2 23:43 | 显示全部楼层
变量是什么变量,是子函数内部局部变量;还是主函数中的局部变量,或是全局变量?
wyjie 发表于 2022-3-2 23:44 | 显示全部楼层
要定义在外部空间的变量,必须的定义之前,把外部RAM初始化好。最好自己修改启动文件,把外部RAM挂上,使程序中能正常访问。
zhenykun 发表于 2022-3-2 23:46 | 显示全部楼层
如果是子函数内部的局部变量,则只要在执行前,把外部RAM初始化好就可以。
dingy 发表于 2022-3-2 23:48 | 显示全部楼层
这里说的初始化是指,得把与外部RAM连接是IO,设置成外部总线模式。
heweibig 发表于 2022-3-2 23:50 | 显示全部楼层
程序中定义变量时指定地址也是必须的
llljh 发表于 2022-3-2 23:52 | 显示全部楼层
需要外接一篇ram吗
 楼主| lizye 发表于 2022-3-2 23:55 | 显示全部楼层
唉,还是没有什么结果,算了,多谢大家啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

852

主题

9757

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

852

主题

9757

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部