cpu运行时程序是在flash中还是在RAM呢?

如题所述

我想这是一个很基础的问题.
对于x86的pc机和单片机等嵌入式开发系统程序的存储是截然相反的,
即:x86的pc机cpu在运行的时候程序是存储在ram中的,
而单片机等嵌入式系统则是存于flash中
x86cpu和单片机读取程序的具体途径
pc机在运行程序的时候将程序从外存(硬盘)中,调入到ram中运行,cpu从ram中读取程序和数据
而单片机的程序则是固化在flash中,cpu运行时直接从flash中读取程序,从ram中读取数据
造成这种差别的具体原因分析
x86构架的cpu是基于冯.诺依曼体系的,即数据和程序存储在一起,而且pc机的ram资源相当丰富,从几十m到几百m甚至是几个g,客观上能够承受大量的程序数据.
单片机的构架大多是哈弗体系的,即程序和数据分开存储,而且单片的片内ram资源是相当有限的,内部的ram过大会带来成本的大幅度提高.
单片机的程序能存储在ram中吗
通过上面的分析可得知:单片机的程序能存储于flash中是基于两点考虑,即体系结构和ram资源的多少.因此,在技术不但进步片内ram容量不但增多的今天,ram资源已经不再是制约这种差别的主要因素,而对于体系机构我们只要更改cpu读取程序的方式就可以.
我仔细研究了一下链接脚本,用的是gnu的linux的交叉工具链.地址分配是写在一个ld脚本中的.
他们是这样实现的:
1,将你需要在ram中运行的代码写在单独的一个c文件中,然后在脚本中设置其运行地址与存放地址分开.设置好必要的代码起始和结束的标志变量.
2,在代码中将存放地址处的代码拷贝到运行地址中.
冯.诺依曼体系与哈佛体系的区别
温馨提示:答案为网友推荐,仅供参考
相似回答