如何计算程序占用的ROM和RAM空间大小?

baidumcu 2009-10-18 08:30:05
一直对怎么去计算程序占用的ROM和RAM空间大小不解,而且做项目的时候一般需要估算一下程序可能需要占用空间大小才好选取用多大ROM和RAM空间的MCU来做,举个简单的程序吧:程序功能实现LED闪烁:
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp;
sbit LED=P2^3;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
while(1)
{
LED=~LED;
delay(10);
}
}
这段程序占用单片机空间大小是怎么计算的呢?是不是这样:
定义了一个uchar的全局变量,占用1个字节,delay(uint z)形参(16位)定义不占用ROM,但运行时占用2字节的RAM,delay函数内部定义了两个uint(16位)的变量,占用2字节ROM,那是不是可以这样理解这段程序编译后占用单片机的ROM大小为:
ROM = 3Byte+ 引用头文件占用的ROM大小
运行时程序占用RAM大小:
RAM = ?不知道该怎么计算
不知道实际是怎么计算的,希望得到帮助,困惑好久了,谢谢!
...全文
2772 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidumcu 2009-10-19
  • 打赏
  • 举报
回复
谢谢了,明白!
skynet000 2009-10-19
  • 打赏
  • 举报
回复
这个一般根据经验了。选大一点比较好。

你定义全局变量的话,是既要占用RAM空间也要ROM空间。而且是程序运行中始终占用的。
函数内部的局部变量和形参只占RAM空间,但是是暂时的,进入函数的时候申请,退出函数就消掉。所以只要RAM的空间够用就可以了。
CODE是指代码空间,应该也是ROM空间吧。
从List文件来看。Idate、data、bdate的加起来就是你ram的占空间了大小。Code就是你的ROM占空间大小

先抄一段网络上的说明给你,不过具体可能要看你的MCU的型号。如果是C51的,应该都差不多。
Cx51编译器对片内的RAM提供了三种存储器类型标识符:data,idata,bdata。data地址范围为:0x00~0x7F,位于data空间的变量以直接寻址方式操作,速度最快;idata地址范围为:0x00~0xFF,位于idata空间的变量一寄存器间接寻址方式操作,速度略慢于data空间;bdata地址范围为:0x20~0x2F,位于bdata空间的变量除了可以进行直接寻址或间接寻址外,还可以进行位操作。片外数据RAM简称XRAM,

Cx51提供了两个存储器类型标识符:xdata,pdata,xdata空间地址范围为:0x0000~0xFFFF,位于xdata空间的变量以MOVX@DPTR方式寻址,可以操作整个64K地址范围的变量,不过这种方式比较慢,pdata空间又称为片外分页XRAM空间,它将地址0x0000~0xFFFF均匀的分为256页,每页的地址都为0x00~0xFF,位于pdata空间的变量以MOVX@R0、MOVX@R1方式寻址。

好多年不搞MCU了,抛砖引玉吧~
lbing7 2009-10-18
  • 打赏
  • 举报
回复
请LZ对应英文还有单片机的体系结构来看你的LIST文件
baidumcu 2009-10-18
  • 打赏
  • 举报
回复
这个是我某段程序编译后lst列表最后一段
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 138 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V6.12 LESSON2_3 07/22/2009 16:41:13 PAGE 2

XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
怎么看的?CODE SIZE = 138 是指代码有138字节?DATA SIZE = 3 指?
到底怎么看的呀,具体占用ROM,RAM怎么看出来的。太菜了,希望回答一下,谢了!
yctou 2009-10-18
  • 打赏
  • 举报
回复

编译后生成一个lst列表文件,在那里找最后的地址是多少,就得到了ROM空间。

里面或许可以看出RAM多少,但我没看过。我用汇编的

27,508

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧