找回密码
 注册
查看: 264|回复: 3
打印 上一主题 下一主题

单片机的内存分配详解

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-26 10:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 niubility 于 2022-9-26 13:54 编辑 2 q8 r( Q$ u$ l' Q6 j& t

# u9 P3 a) {! [/ E
对于初学者而言,对单片机的内存分配往往最让人头疼,很多人学了单片机几年 都不知道单片机内部的内存使用情况是如何分配的。要了解 ROM、RAM启动,首先 需要对 链接器 Linker 如何分配内存有一定的了解。

8 @/ ?  n' S2 h3 o  b8 Y
通常,对于栈生长方向向下的单片机,其内存一般模型是:

( i; x8 A! d. {- k
一个进程运行时,所占用的内存,可以分为如下几个部分:
1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。
2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS释放。
3、全局变量、静态变量:初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和和未初始化的静态变量在相邻的的另一块区域。程序结束后由系统自动释放。
4、文字常量:常量字符串就是存放在这里的,程序结束后由系统释放。
5、程序代码:存放函数体的二进制代码。

& Y. |8 S* M3 `, Z0 T3 Z

该用户从未签到

2#
发表于 2022-9-26 13:21 | 只看该作者
code和RO-data存储在flash中,所以两者之和为单片机中flash需要分配给它们的空间大小,不仅它们RW-data和ZI-data存储在sram中,同样两者之和为单片机中sram需要分配给它们的空间大小  _* l$ s5 P9 `) N/ y9 l* b/ Z

% ^9 s, [; M0 o7 i; S" R

该用户从未签到

3#
发表于 2022-9-26 15:00 | 只看该作者
单片机执行程序时,就是执行我们所编制程序的过程。即逐条指令的过程。( _, D. W& p/ ?6 Y
取指令-----分析指令-----执行指令

该用户从未签到

4#
发表于 2022-9-26 15:30 | 只看该作者
全局变量和静态系统需要为其分配内存,一直到程序结束, 才会释放内存局部变量的动态分配,
" b, ?: z9 z! }, v局部变量 随用随从栈中申请,用完(函数调用完毕)就释放。
$ G9 `  ]1 z$ s) |# `0 Q全局变量或静态变量过多,始终占有那块存储区,难以被释放,会压缩RAM可用空间,也不利于代码的封装。4 x# R+ F% X9 ?. I) t0 A
这些都是需要注意的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-5-31 11:27 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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