基于虚拟存储嵌入式存储系统的设计方法

发布者:神雕最新更新时间:2021-01-29 来源: eefocus关键字:虚拟存储  嵌入式  存储系统 手机看文章 扫描二维码
随时随地手机看文章

简介:本文借鉴传统计算机系统设计中的虚拟存储技术,以8051单片机为例提出一种采用页面分组和虚拟接口技术扩展存储空间的方法。本方法与Keil C编译器具有良好的兼容性。


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地址线接法与普通存储器扩展方法相同。

以上考虑了复位时页面应切换到公共代码区。


Keil C51编译器是单片机开发应用中非常流行的一种高效编译器,它支持上述页面分组技术。


2.3.单片机嵌入式系统数据存储区扩展

嵌入式系统中引入操作系统需要增加一定的数据存储器开销,必要时仍可以采用分页技术扩展数据存储区容量。


引入操作系统以后,数据区有两种组织方法,比较简单的一种方法是操作系统与用户程序共用一个数据区,编译器将整个程序一起编译,不必区分是系统程序还是用户程序。但这样对用户来说操作系统变得不透明了,而且不良的用户程序可能会破坏系统的数据区,导致整个系统崩溃。


相对应的另一种方法是给操作系统与用户程序分别分配独立的数据区,譬如将128k 数据存储器给操作系统和用户程序各分配64k。不幸地是,当操作系统与用户程序一起编译时,编译器会自动给它们分配不同的地址,这样即使存储器物理上是分开的,操作系统与用户程序的数据区还是无法地址复用,这极大地浪费了地址空间;而且对传统的单片机, Keil C 编译器最大只支持64k数据区,幸运地是,这个矛盾可以通过采用虚拟接口的方法加以解决。


为此,将公共代码段中的程序单独编译,并且在链接、定位目标代码时,给操作系统和公共库函数的每个函数在0x0000~0x7FFFH内分别指定一个固定的首地址。鉴于用户程序可能调用这些函数,需要为这些函数分别编写一个相同类型的同名伪函数,每个伪函数仅包含一条到真实函数(入口地址已知)的转移指令,所有这些函数都存放在一个被称为虚拟接口的头文件中。虚拟接口文件与用户程序一起编译,完成用户程序与操作系统两次编译的接口。显然这种方法仅占用了用户区的极少量代码空间,而丝毫没有浪费用户数据区,同时又实现了地址复用。


公共代码段和操作系统的数据区特殊的对应关系(见图4),很容易通过P2端口线来指定。由单片机外部程序区访问时序(图 5)可知,PSEN的上升沿后数据总线A0~A7上开始出现指令或指令操作数,此时的地址线A15指示当前访问的是公共代码段(对应数据区高64k)还是其他程序段(对应数据区低64k),因此在PSEN上升沿锁存地址线A15,用它可以选择不同的数据存储器空间。

3、存储系统的性能分析

本文基于虚拟存储系统思想实现了嵌入式系统中大容量存储器的扩展。不难看出系统的扩展余地受端口线的限制。由于在同一块芯片中构造图2所示的结构,需要多使用一根端口线,因此对于8051系列使用整个P1口可以将系统的程序虚拟空间扩展至8M字节。数据存储区扩展的最大容量还与程序在编译时所被分成块的数目有关,最大可达16M字节,这在单片机嵌入式系统中已经是足够大了。


程序在调用不同页面的函数时需要额外的软件切换周期,频繁的页面切换会降低系统的性能,因此编译时应仔细选择函数,尽可能将相关的函数分配在同一页中。


数据存储区切换是由硬件实现的,页面切换并不降低系统性能。由于操作系统与用户程序数据区相互独立,对用户来说整个64k空间都是可用的,这就增加了操作系统的透明性。


4、结论

嵌入式系统由于它的专用性和特殊性,系统的软硬件设计都与传统的计算机系统设计方法有所不同。但进行嵌入式系统设计时仍然很有必要借鉴传统计算机系统体系结构成熟的设计方法,“量体裁衣”为我所用。作者在进行嵌入式平台设计时借鉴了传统计算机虚拟存储思想来扩展存储系统,并在实际项目中得以应用,证明这种方法是非常有效的。


关键字:虚拟存储  嵌入式  存储系统 引用地址:基于虚拟存储嵌入式存储系统的设计方法

上一篇:变压器温度智能监控仪
下一篇:STC单片机如何实现运行中自定义下载

推荐阅读最新更新时间:2024-11-05 02:01

EN 50155认证嵌入式电脑在车辆控制系统中的应用
  项目简介   西班牙某运输公司需要建立一个车队的控制管理系统,该系统需要在车辆上安装一个强大的工业计算机,来连接不同的远程设备,从而实现多种应用。工业计算机必须是EN50155标准认证,能应对颠簸的运行环境,并为车辆提供稳定的数据通讯。此外,还提供立即可用的平台,帮助工程师开发相关应用。因为要在车辆上安装一个全新的系统,因此客户对工业计算机的要求非常高,以满足系统需求。   系统需求   强大的工业计算机,支持多个接口,可连接各种设备   支持多个数字输入通道,用于报警、里程表和音频控制   兼容EN50155认证,适用于车辆应用   产品必须符合EN50155T3class温度要求   易于使用的
[嵌入式]
三种嵌入式操作系统的分析与比较
摘要:提要三种常用的嵌入式操作系统——Palm OS、Windows CE、Linux;在此基础上、分析、比较这三种嵌入式操作系统,给出它们之间的异同点及各自的适用范围。 关键词:嵌入式系统 嵌入式操作系统 Palm OS Windows CE Linux 1 嵌入式系统与嵌入式操作系统 1.1 嵌入式系统 嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。 嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力
[应用]
Silicon Laboratories为32位嵌入式设计简化数字D类音频开发
高性能模拟与混合信号IC领导厂商Silicon Laboratories (芯科实验室有限公司, NASDAQ: SLAB)今日宣布推出具有成本效益、基于USB的D类ToolStick评估套件,使开发人员可以在基于Silicon Labs特性丰富的SiM3U1xx Precision32 TM 单片机(MCU)的32位嵌入式设计中添加数字D类音频功能。新型D类ToolStick套件演示如何经济方便的把个人医疗装置、健身器材、高档玩具、小家电等消费类电子产品上的常见“蜂鸣器/呼叫器”报警声音,升级为更先进的语音提示、音乐、声音片段,甚至音频流。 Silicon Labs高集成度SiM3U1xx MCU非常适合数字化D类功率放大
[嵌入式]
Silicon Laboratories为32位<font color='red'>嵌入式</font>设计简化数字D类音频开发
基于嵌入式系统的GPRS设计
嵌入式系统就是一个具有特定功能或用途的计算机软硬件结合体,或指装入另一个设备并且控制该设备的专用计算机系统。嵌入式系统的最大特点是其具有目的性和针对性,即每一套嵌入式系统的开发都有其特殊的应用场合与特定功能。嵌入式系统包含硬件和软件两部分:硬件架构以嵌入式处理器为中心,配置存储器、I/O设备、通信模块等;软件部分以软件开发平台为核心,向上提供应用编程接口API,向下屏蔽具体硬件特性的板级支持包BSP。嵌入式系统中,软件和硬件紧密配合,协调工作,共同完成系统预定的功能。   GPRS是General Packet Radio Service的简称,即通用无线分组业务。它是基于现在运行的GSM基础上发展的数据业务,类似于固定交换
[工业控制]
基于<font color='red'>嵌入式</font>系统的GPRS设计
华清远见荣获2010年度中国本土嵌入式系统十佳企业
近日,“2010年度中国本土嵌入式系统十佳企业”名单正式对外公布,北京华清远见科技信息有限公司荣膺该奖项,并在此成为唯一获得这一奖项的培训机构,与华清远见同时获得该荣誉的包括:广州广州致远电子有限公司(周立功公司)、上海海尔集成电路有限公司、北京合众达等9家业内知名企业,这也是华清远见继2008年度获得此殊荣之后,在两年一届的评选活动中再次获得该荣誉。 “中国本土嵌入式系统十佳企业”评选活动由中国科技核心期刊《电子产品世界》杂志社主办,旨在展示中国本土嵌入式系统企业风采,表彰其中的表现优异者,将其推荐给中国的电子工程界,借此带动国内嵌入式系统业的整体进步与发展。此活动得到了中国计算机学会嵌入式系统专业委员会(微机专业
[嵌入式]
一个技术老总真实故事,从月工资300元到至今身家千万
从一台收录机到电子工程师之路 我叫李家庆,七十年代未出生于粤西的一个小山村。上小学的时候,家里先是有了一台收录机。我感觉非常神奇,特别是对收音广播功能,一直想不明白为什么拉上一杆天线,打开收音机,就会传来人声…每晚6点,就和小伙伴们守在收音机跟前,伴随着“前文再续,书接上一回”开始沉迷于”讲古” 的世界,直到“欲知后事如何,请听下回分解”,还舍不得散去…… 后来家里又有了一台二手的14寸黑白电视机。每晚又伴随着“人间大炮,一级准备”……,挤满屋的小伙伴。山里信号经常不好,我就经常跑到屋顶,为了找到一个清晰的图像的位置,不断调整天线。那时候,尽管还没有听过无线电这些东西,但是这个神奇的东西就埋伏在心里。 再后来,随
[嵌入式]
Timesys为Tensilica处理器提供嵌入式Linux
  Tensilica和嵌入式Linux软件解决方案供应商Timesys日前宣布,针对Tensilica钻石标准232L处理器提供LinuxLink订阅服务。LinuxLink订阅服务为开发者提供专为Tensilica232L钻石标准处理器测试和集成的全套嵌入式Linux平台,包括Linux 2.625Kernel、232L专用设备驱动、基于GNU uClibc的工具链及数百个预先汇编的软件包。通过Timesys的TimeStorm开发环境及技术支持,LinuxLink订阅者能快速定制和测试基于针对应用优化的Tensilica 232L处理器的嵌入式Linux平台。   Tensilica市场副总裁Steve Roddy表示,“
[新品]
Linux嵌入式 -- Bootloader , Uboo
1. Bootloader作用 PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成。BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交给引导程序。引导程序的主要任务是将内核从硬盘上读到内存中,然后跳转到内核的入口点去运行,即启动操作系统。 简单地说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。 系统加电或复位后,所有的CPU通常都从CPU制造商预先安排地址开始执行。比如,S3C2410在复位后从地址0x00000000起开始执行。而嵌入式
[单片机]
Linux<font color='red'>嵌入式</font> -- Bootloader , Uboo
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved