如何计算程序占用的ROM和RAM空间大小?
(2012-06-28 13:06:39)
标签:
杂谈 |
分类: MCU |
#include
#include
#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 = ?不知道该怎么计算
不知道实际是怎么计算的,希望得到帮助,困惑好久了,谢谢!
这个是我某段程序编译后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怎么看出来的。太菜了,希望回答一下,谢了!
请LZ对应英文还有单片机的体系结构来看你的LIST文件
你定义全局变量的话,是既要占用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了,抛砖引玉吧~
刚找到相关资料,共享下: