打印
[APM32F1]

在APM32F103xE的SDRAM上申请动态内存、定义全局变量

[复制链接]
1078|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

1 概述
APM32F103xE能外接SDRAM,使用SDRAM解决内部SRAM不够的应用场景问题,比如因为内部堆空间不够导致动态内存申请识别,无法定义大的全局变量数组。
当然读写SDRAM的速度是比读取内部SRAM慢的,尤其是频率大于48MHz时,访问SDRAM时会有频率限制,但是访问SRAM时没有频率限制,就是系统时钟的频率。
因此,动态申请的内存、定义的全局变量一般情况下是占用空间大、且对速度要求不高的场合。
本篇文章中涉及到的分散加载文件、map文件、堆、栈、ZIZW等概念可以到网上查找,以下主要记录了实现的方法、并验证该方法是可行的。
当然应该还有其它的方法,可以提出来一款探讨探讨。

2 自定义分散加载文件,SDRAM中既可以定义堆空间、也可以定义全局变量空间2.1 Keil工程配置2.1.1 Target配置
按照工程默认配置,不做修改。
2.1.2 Linker配置
1)在选择“Use Memory Layout from Target Dialog”的情况下完成编译,生成*.sct文件才能编辑,否则需要自行创建*.sct文件。(这也是一种偷懒的方法)

2.2 结合应用代码修改分散加载文件、定义堆大小
1)分散加载文件定义如下:

2)对应的代码如下
使用 __attribute__ 把定义的全局变量定义在SDRAM中,其中SDRAM_RW_ZI和分散加载文件中的名称对应上。
__attribute__只能用于全局变量、函数,因此局部变量是定义在内部SRAM中。
*.s文件中设置的堆大小如下

3)编译后关于变量的map文件如下
map文件分析,HEAP的起始地址是0x60000000,部分RWData定义在起始地址为0x60100000的内存空间中


2.3 代码运行现象
(1)   按照默认情况下定义的全局、局部变量在内部SRAM中
(2)   malloc申请内存空间在SDRAM开辟的堆中
(3)   通过 __attribute__ 修饰定义的全局变量在SDRAM中
(4)   通过 __attribute__ 修饰的静态变量在SDRAM中
大致示意图如下:

以下是串口输出程序中定义的变量地址、改写的数值



使用特权

评论回复
沙发
robertesth| | 2022-7-4 15:41 | 只看该作者
这个可以参考正点原子的。  

使用特权

评论回复
板凳
modesty3jonah| | 2022-7-4 16:01 | 只看该作者
这个第一次这么操作。  

使用特权

评论回复
地板
mnynt121| | 2022-7-4 16:34 | 只看该作者
在环境设置的吗   

使用特权

评论回复
5
averyleigh| | 2022-7-5 15:24 | 只看该作者
不是alloc吗?  

使用特权

评论回复
6
timfordlare| | 2022-7-8 10:18 | 只看该作者
为什么要给结构体指针申请动态内存

使用特权

评论回复
7
gygp| | 2022-7-8 15:31 | 只看该作者
单片机的C语言,用得上动态分配内存不

使用特权

评论回复
8
burgessmaggie| | 2022-7-8 16:23 | 只看该作者
如何申请释放动态内存

使用特权

评论回复
9
hudi008| | 2022-7-9 14:53 | 只看该作者
静态内存 动态内存 ??

使用特权

评论回复
10
minzisc| | 2022-7-9 16:19 | 只看该作者
内存申请后,如何判断成功与否?

使用特权

评论回复
11
hudi008| | 2022-7-9 17:57 | 只看该作者
c语言申请的动态内存怎么调用?

使用特权

评论回复
12
deliahouse887| | 2022-7-9 18:49 | 只看该作者
(char *)malloc(sizeof(char) * num);

使用特权

评论回复
13
MessageRing| | 2022-10-4 20:57 | 只看该作者
结构体为啥要动态内存?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:极海半导体
简介:珠海极海半导体有限公司是一家致力于开发工业级/车规级微控制器、模拟与混合信号IC及系统级芯片的集成电路设计型企业。极海团队拥有20年集成电路设计经验和嵌入式系统开发能力,可为客户提供核心可靠的芯片产品及方案,实现准确感应、安全传输和实时控制,助力客户在智慧家居、高端消费电子、工业控制、汽车电子、智慧能源以及通信设施等领域的拓展创新。

29

主题

68

帖子

0

粉丝