一、单片机的存储空间 = RAM + FLASH(ROM),那么什么是RAM?什么是FLASH? RAM : 一种可读可写的存储单元,掉电后存储数据清除,读写速度快。RAM在单片机运行时,是内部各种寄存器、全局变量(先存放在FLASH中,上电初始化后会将其拷贝至RAM中)、堆栈(程序运行过程中申明的局部变量、产生中断或者函数调用时用来保存现场的数据)等的载体。
FLASH:一种只能读取的存储单元,掉电后存储数据保留,读取速度慢。FLASH在单片机运行时,是程序指令、常量、中断向量表、BOOT引导代码、EEPROM等的载体。二、ROM和FLASH的区别 传统的ROM是在芯片出厂一次写入以后就不能更改了,但随着应用环境的逐渐变化,以及技术的不断创新,ROM可以支持多次电擦除,擦除后可重复写入的功能,这样使得FLASH就成为了广泛意义上的EEPROM。方便了广大的程序员的操作,例如可以通过BOOT对单片机里的应用程序进行刷新,以及对内部存储数据的在线更改等功能。 三、冯诺依曼结构与哈弗结构区别 冯诺依曼结构常见用于PC机上,程序和数据在没有运行的时候,存放在硬盘中;当程序需要运行时,会将全部程序从硬盘复制到RAM中去,从RAM里去执行,由于RAM高速的读写,从而程序运行速度加快。哈弗结构常见用于嵌入式系统上,由于单片机其RAM大小有限,将全部程序复制到RAM中去运行难以实现,所以运行的时候程序放在FLASH中,变量数据存放在RAM中,所以CPU从Flash中取程序指令,RAM中获取数据。当然在嵌入式系统中,有些对代码执行速率有严格要求或者执行地址有严格要求的地方,也是可以将小规模的程序复制到RAM中去执行。这里推荐51单片机作为入门必学
四、单片机上电后对存储空间的操作 当你写好了你的单片机代码会经过如下步骤: 预处理:展开头文件/宏替换/去掉注释/条件编译编译: 检查语法,生成汇编汇编: 汇编代码转换机器码 链接: 链接到一起生成可执行程序最后,就可以生成一个可以烧录的Hex文件啦,这个HEX文件里包含了你整个程序里的所有内容,你的程序逻辑、所申明的局部变量、全局变量、常量等等等等都会会变成一堆由01构成的二进制信息,这些信息使得单片机可以按照用户的定义去运行。
从单片机复位上电的那一刻开始,PC指针清零,指向0000H地址,此时单片机会产生一个复位中断,PC指针会跳转至中断向量表复位中断里存放的入口函数地址(常见的一般是工程的引导程序,执行MAIN函数之前执行的汇编代码),一般引导程序里主要是:1、对堆栈进行初始化,设置长度还有分配地址2、对于没有赋值的全局变量,则在RAM中分配一个地址出来,对于已经分配初值的全局变量,在RAM中分配一个地址出来之后,将ROM中的初始值拷贝到对应的地址中去。 3、主函数的跳转
初始化前
初始化后
|