2008年(8065)
分类: 服务器与存储
2008-05-07 13:10:05
1.引言
嵌入式系统由嵌入式硬件和固化在硬件平台中的嵌入式软件组成。传统的小规模嵌入式系统,软件多采用前后台的方法,通常应用于实时性要求不高的简单场合;对于复杂的应用场合,较为普遍的做法是给系统配上嵌入式实时(RTOS),这样不仅能够使系统具有良好的实时性能,降低软件编制的工作量,还可以提高整个系统的稳定性。此外,为了简化用户程序,系统通常要提供一些必要的库函数供用户调用。同前后台系统相比,这种实时嵌入式系统增加了系统存储空间的开销。Intel 8051系列及各种兼容的单片机因其极高的性价比、丰富的库函数和长期的技术积累等背景而被广泛应用于各种嵌入式领域中。受传统单片机寻址空间的限制,嵌入式应用中经常需要进行存储空间扩展。本文借鉴传统计算机系统设计中的虚拟存储技术,以8051单片机为例提出一种采用页面分组和虚拟接口技术扩展存储空间的方法。本方法与Keil C编译器具有良好的兼容性。
2 .存储系统的组织
2.1 虚拟存储系统
计算机系统中常采用虚拟存储技术来扩展存储系统容量,页式虚拟存储器是常用的一种组织方法。在这种方法下,整个虚拟地址空间和主存空间均被分成容量相等的若干页,地址变换机构(通常是一个快速地址变换表)建立了虚拟空间到主存空间虚页到实页的映射。页式存储器组织关系如图1。
虚拟存储系统利用计算机CPU中的一组寄存器堆作为页表基址寄存器,如图1(b)所示,它与页表一起给出用户程序地址。实际计算机系统的页式虚拟存储要比这复杂得多,还需考虑未命中时的外部地址变换以及页面替换算法,然而在嵌入式系统中这些都可以简化乃至省去。
2.2 单片机嵌入式系统程序存储区扩展
受虚拟存储系统启发,我们把上述方法作了一些修改以应用于嵌入式系统中。由于系统设计选用的外部程序存储器容量为256k,而一般单片机(如 8051系列)的寻址空间为64k,为简单起见,以64k为一页,将256k虚拟地址分为4页映射到单片机的64k空间。嵌入式系统中地址变换机构可被简化:单片机没有专用的页表基址寄存器,可以通过额外的端口线(如P1.0,P1.1,P1.2等)作为基址指定不同的页面,页表查询可用一个跳转表实现。然而页面切换前后必须保证能够正确访问到跳转表,因此所有64k页面都需要有一个完全相同的代码段用来存放跳转表和中断矢量等公共资源。
为提高存储器利用率可采用图2所示的结构,其中公共段中存放了高32k段之间相互调用所需要
的跳转表。各段相互调用之前应先跳转到公共段,执行页面切换后再跳转到被调用程序的入口,这就实现了18位虚拟地址到16位主存地址的变换。不妨以P1.0,P1.1,P1.2作为页面基址来指定不同的页,相应的跳转表程序结构如下:
ADDR:CLR EA ;关中断
SETB/CLR P1.0 ;切换页面
SETB/CLR P1.1
SETB/CLR P1.2
SETB EA ;开中断
JMP REAL_ADDR ;跳转
在公共段(256k存储芯片的低32k)中存放和提供给用户的其他库函数,其他各段用来存放嵌入式系统的用户程序。采用图2结构的单片机与存储器接口原理图如图3所示。其中A0~A15地址线接法与普通存储器扩展方法相同。
3 存储系统的性能分析
本文基于虚拟存储系统思想实现了嵌入式系统中大容量存储器的扩展。不难看出系统的扩展余地受端口线的限制。由于在同一块芯片中构造图2所示的结构,需要多使用一根端口线,因此对于8051系列使用整个P1口可以将系统的程序虚拟空间扩展至8M字节。数据存储区扩展的最大容量还与程序在编译时所被分成块的数目有关,最大可达16M字节,这在单片机嵌入式系统中已经是足够大了。
程序在调用不同页面的函数时需要额外的软件切换周期,频繁的页面切换会降低系统的性能,因此编译时应仔细选择函数,尽可能将相关的函数分配在同一页中。
数据存储区切换是由硬件实现的,页面切换并不降低系统性能。由于与用户程序数据区相互独立,对用户来说整个64k空间都是可用的,这就增加了的透明性。
4结论
嵌入式系统由于它的专用性和特殊性,系统的软硬件设计都与传统的计算机系统设计方法有所不同。但进行嵌入式系统设计时仍然很有必要借鉴传统计算机系统体系结构成熟的设计方法,“量体裁衣”为我所用。作者在进行嵌入式平台设计时借鉴了传统计算机虚拟存储思想来扩展存储系统,并在实际项目中得以应用,证明这种方法是非常有效的。