嵌入式系统/存储
在嵌入式系统中,存储资源是非常宝贵的。一些芯片,尤其是超大规模集成电路(VLSI)和低端微处理器可能仅有很少的板载内存(On-board RAM)。RAM直接建于芯片内部,因此无法扩展。除了RAM之外,嵌入式系统还有非易失性存储,如小型磁盘,闪存(Flash),或者额外的存储卡。
一旦系统构建完成,存储的硬件更改将极为困难。嵌入式系统存储升级的成本,可能远远超出系统的构建成本。例如,为增加系统内存和Flash,将微控制器由Mega8改为Mega128,则芯片成本从4¥上升到18¥;同时,印刷电路板也要根据新的封装而大规模调整;供电等相关系统也不得不随之做出调整;程序也需要部分重写。因此,工程师必须清楚系统拥有的存储资源是否能够应对其承担的任务,并在程序开发过程中,将存储资源作为重要的参考。
存储通常被分成不同的几部分,以执行不同的功能。
寻址
编辑存储的每个字节,处理器的每个输入输出位,都有一个唯一的地址。通过地址,处理器可以从存储中读取、写入数据,能够控制输入输出。
嵌入式系统中共有4种典型的寻址区域(Addressable area),每一种都用不同的技术实现:
- EEPROM程序存储,也就是芯片的ROM部分。这部分存储着编写的程序,即使在掉电的情况下,也不会丢失。当程序运行时,存储数据可以被修改;而在无断电状态下,数据会一直保持。ROM中的数据很少修改,甚至不变。
- Flash程序存储,另一种ROM,采用与EEPROM不同的技术原理。
- RAM,存放正在运行的程序和数据。初始数据从ROM中读取;在掉电之后,所有内容都会消失。
- 输入输出,控制着微处理器/微控制器的端口输入输出。
这里我们重点讨论存储的寻址。
很多流行的微控制器,比如8051,AVR,PIC,均采用“哈佛结构”。这和通用计算机所采用的“冯·诺伊曼结构”是不同的。
分页和队列
编辑通常,应用软件会不断地增长。古老的处理器,例如火星漫游者Sojourner搭载的具有16位地址寄存器的8085处理器,能直接访问的位置为65 536个。若全部用做内存寻址,处理器也仅仅能访问65KB内存;事实上还有很多地址被分配给其它物理设备,因此可用内存非常少。为此,必须利用“分页”(Paging)硬件使不可直接访问内存的数据与可直接访问内存进行交换,这样实际使用内存范围便扩展了,处理器就可以使用更多的内存。早期的PIC处理器有两组完全独立的寄存器,一个用来交换ROM中的数据,一个用来交换RAM中的数据。