看穿单片机第二节:存储器模型
扫描二维码
随时随地手机看文章
存储器模型
存储器对于整个计算机系统来说是至关重要的:供CPU执行的程序指令、程序运行过程中的变量和数据……,它们都要以存储器作为载体。所以在实际的应用和开发中,人们总是希望单片机芯片的RAM和ROM容量能尽量大一些。这样就可以存储更多的代码指令,运行规模更大更为复杂的程序。另外,存储器本身的读写速度也就成为了CPU性能的最大瓶颈之一。更为形象的描述如图1.9所示。
图1.9 CPU从存储器取指令以及进行变量、数据的存储
ROM,即只读存储器,也就是说在它上面存储的内容是无法被CPU直接修改的。(通常只能使用专用的烧录器来修改其中的数据,不过现在一些新型的单片机芯片已经可以在CPU运行过程中去修改ROM数据了,这种技术被称为“IAP”)所以,ROM通常被用来固化存储程序指令代码和一些无需修改的数据,比如字模字库、常数等等。
RAM与ROM不同,它是可读可写的,因此被称为随机读写存储器。CPU在运行过程中,可以对RAM中的任何数据进行读写修改操作。这就是C语言中赋值语句在底层得以实现的物理基础,比如“int a; a=0”,就是将RAM中的某一个存储单元写入了一个数值0。但如果是“code int a; a=0”的话,编译的时候就一定会报错。(code关键字在51单片机C语言中是用来说明“变量”的位置在ROM中,同样的定义在ARM上使用const)而且,RAM比ROM在读写速度上要快得多,所以CPU在运行程序的时候,通常都会把一些代码指令拷贝到RAM中来,尤其是那些会被频繁执行的部分(这就是C语言中的.text段,即代码段)。但是RAM通常比ROM要昂贵的多(关于这一点大家应该有宏观的感知,一个U盘16G才10块钱,但是电脑内存条却要好几百),这也就是生产厂商为什么在单片机芯片中对于RAM的配比显得很吝啬,而对于ROM则略显慷慨的原因。
为了更好地讲解后面的内容,对于存储器大家必须明确一点,它也算是一个常识:它是由很多的地址连续的存储单元构成的,如图1.10所示。
图1.10 存储器是由地址连续的存储单元构成
总体来说,存储器就是一个指令和数据的容器,它与CPU相互依存,这才使得整个计算机系统得以正常运作。此时一个极其重要的问题便应运而生:CPU是如何精准地从存储器中取出指令和数据的,又是如何将数据写入到存储器中的?这一问题说起来简单,但它却引申出了一个关键的技术—“总线”!