单片机内存(ram)、flash、与数据存储和启动过程说明

1 电脑程序运行过程与单片机的区别

由于电脑中的程序是存储在磁盘中的,而磁盘的读取速度非常慢,因此我们不可能从磁盘中直接读取当前要执行的代码,这样必然导致程序阻塞。好在,电脑的内存非常大,所以在程序执行之前,先把整个代码copy到内存中,然后CPU从内存中读取一条条指令,并运行。

为了合理利用和规划内存资源,除了操作系统的内存管理外,最重要的是内存的分段。对每一个进程,操作系统都会为其分配一片内存,同时将其分段为代码段、数据段、堆栈段等等,不同的段具有不同的属性,比如代码段一般是只读的,如下图所示。(参考博客:https://blog.csdn.net/iostream1001001/article/details/77112455)
在这里插入图片描述
单片机首先没有磁盘,其次内存非常小,显然这种方式运行程序是不可能的。但好的一点是,单片机的代码是保存在flash中,相当于电脑的固态硬盘或ROM,CPU读取flash的速度虽然慢于内存,但依然是非常快的。因此我们不需要将代码搬移到内存中,直接从flash中读取就行了。

因此单片机的程序执行过程是,根据flash中的代码为函数分配堆栈和静态存储区,然后CPU读取flash中的指令,并读写内存中的数据进行运算。下面转载博客https://blog.csdn.net/sinat_30146065/article/details/82221179来详细说明。

注意:应该不是所有单片机都是这个启动过程,经验证,msp430f6638运行过程中程序是存储在ram中的,而不是直接从flash取指令。实验过程如下:
msp430f6638的代码保存在首地址为0x80

猜你喜欢

转载自blog.csdn.net/qq_45467083/article/details/103831990