×

ARM单片机程序内存使用情况的细致讨论分析

消耗积分:1 | 格式:pdf | 大小:0.17 MB | 2019-04-23

xymbmcu

分享资料个

  大家都知道ARM单片机的内部存储空间极其匮乏无论是从Flash还是RAM上,每每给单片机机编程都有一种惜字如金的感觉,工程师们一般会在容量有限的情况下规范其编程习惯简化代码避免冗余,那么首先我们如何知道的程序下载到单片机上到底占用了多少Flash程序运行又会使用多少RAM?

  FLASH中的被占用的空间很好理解,就是等于代码指令+只读数据的值+已初始化变量的值。那么运行时数据占用RAM空间大小==RW Data + ZI Data又作何理解?

  我们都知道,在代码运行机制上单片机不同于PC,单片机的程序通常是在FLASH中直接取指执行,而PC是先把程序拷贝到RAM中再取指执行。

  由上说明单片机的RAM中至少不会存在Code拷贝(除非使用了特殊方法强行使程序拷贝到了RAM中执行,本贴不讨论此情况),

  其次,单片机RAM中也不会存在RO-data拷贝,因为RO-data是只读数据,为了节省RAM空间,这种数据在执行时直接从FLASH中取出使用,无需再复制到RAM。

  那么剩下的 RW Data + ZI Data由于是可读可写的数据,为了能够供程序运行时正常读写,于是就会被放在单片机的RAM中(单片机的FLASH区不能被程序改写)。

  有人可能会问RW-data 与ZI-data都是指的全局变量或者静态变量,那么程序中的局部变量去了哪儿?这里就要向大家澄清一个事实,在C或C++中全局变量或 静态变量在RAM中都有一个特定地址(存在于静态区),而局部变量却没有特定的地址

  因为局部变量存在于栈中(存在于堆栈区),当函数入栈时系统就会在栈顶之上开辟一段内存供给局部变量使用,当函数出栈时该内存就会被释放掉。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !