单片机的存储空间 - 草稿

2017-01-26  本文已影响0人  jonah_king

单片机从硬件上来说,只有两种空间:ROM和RAM!

也就是说,你程序里的所有东西,不是放在RAM里,就是放在ROM里。

ROM的属性是read only(只读),只能用来读取,无法修改,其实也可以修改,只是需要特殊方法,这里不谈!

RAM的属性是read+write(读写)

这个区域有可能是间断的,更是分段的。主要有数据段+堆+栈+通用寄存器+特殊功能寄存器等

所以编译器根据只读或者读写的属性将程序划分为

1、ROM区(也就是单片机的FLASH区)

我们都了解,rom是只读的,所以里面的内容也是只读的。

1.1、软件的代码段(code)

1.2、数据常量(const修饰)就是放在这里的。

1.3、数据段,定义的数据,

2、RAM区

ram区域读写的,掉电易失的。

那么问题来了,刚上电复位时,ram区肯定是空的,那么访问全局变量时,数是怎么变得?

如果我们仔细看一下启动代码,就是main至少得东西,我们就能知道了。这里我们首先要明白两个概念。程序的运行视图和加载视图。

请大家想一个例子,你电脑上的应用程序,没有运行的时候,是不是只在硬盘上,点击运行后就跑到了内存里运行起来了。

单片机也是一样,你写完程序,编译成功,生bin或hex或者lmage文件,把他烧录到片子里。

这个时候你程序的应用信息肯定全被包含在了烧录文件里(要不然程序怎么能正常运行),同时这个烧录文件是不可能包含ram区域的数据的(这时候还没有上电),这个状态下的程序叫加载视图,就是烧录程序时,程序看上去的样子!

还有一个叫运行视图,就

2.1、数据段(data)

BSS(未初始化的全局变量+未初始化静态变量)

Data初始化的全局变量+初始化的静态变量

2.2、STATCK(栈)

(1)、函数传递参数较多时;

(2)、中断发生时,用于保存和恢复中断现场。

2.3、HEAP(堆)

Malloc函数申请的空间(需要了解操作系统内核和链表)

2.4、SFR(通用寄存器,R1,R2。。。。。R15等)

(1)传递函数参数(个数较少时)使用

(2)中间变量使用

(3)寻址等等(查看汇编的寻址方式等)

2.5、SFR特殊功能寄存器(AD,UART,PWM等)

(1)设置芯片工作状态,操作外设。

上一篇下一篇

猜你喜欢

热点阅读