历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2021年01月29日 | 基于虚拟存储嵌入式存储系统的设计方法

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、结论

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


推荐阅读

史海拾趣

GHz Technology ( Microsemi )公司的发展小趣事

对于5G169节日彩灯集成电路,网友可能提出多种问题,以下是一些常见问题及其详细回答:

1. 5G169节日彩灯集成电路的基本工作原理是什么?

回答
5G169节日彩灯集成电路通过交流电输入,经过VDI~VD4桥式整流输出全波脉动直流电,供四路彩灯用电。该电路还包含简单的稳压电路(由Rl、R2、VD5和VD6组成),经过Cl滤波后输出约6V直流电供集成块用电。VD6在这里起隔离作用,使得R2两端能获得6V全波脉动直流电压,其脉动频率为交流电的2倍(即100Hz)。此100Hz信号经R4注入集成块的8脚作为同步信号。电路中还包含正、反向控制开关SB,用于控制彩灯的正向或反向循环。

2. 如何调节5G169节日彩灯的亮灯周期?

回答
5G169节日彩灯的亮灯周期是可调的,但具体调节方式可能因不同型号的集成电路或电路设计而异。通常,亮灯周期的调节可能涉及改变与集成电路相关的电阻、电容或其他元件的值。然而,对于5G169这样的具体型号,如果没有详细的电路设计图或说明书,很难给出确切的调节步骤。一般情况下,可以通过查阅产品手册或联系制造商获取具体的调节方法。

3. 5G169节日彩灯集成电路是否需要外接电源?

回答
是的,5G169节日彩灯集成电路需要外接电源来提供工作所需的电能。通常,这种集成电路会设计为能够接受家庭常用的交流电源(如220V或110V,具体取决于所在地区的电压标准),并通过内部的整流和稳压电路转换为集成电路和彩灯所需的直流电压。

4. 5G169节日彩灯集成电路在使用过程中需要注意哪些事项?

回答
在使用5G169节日彩灯集成电路时,需要注意以下事项:

  • 确保电源电压与集成电路的额定电压相匹配,避免过电压或过电流导致的损坏。
  • 遵循产品手册中的安装和接线指导,确保电路连接正确无误。
  • 注意电路的散热问题,避免长时间在高温环境下使用导致集成电路过热。
  • 定期检查电路连接和元件状态,及时发现并处理可能的问题。
  • 避免在潮湿或腐蚀性环境中使用,以防电路受潮或腐蚀。

5. 5G169节日彩灯集成电路有哪些常见故障及解决方法?

回答
5G169节日彩灯集成电路的常见故障可能包括灯不亮、亮度不均、闪烁异常等。针对这些故障,可以尝试以下解决方法:

  • 检查电源电压是否正常,确保电路得到足够的电能供应。
  • 检查电路连接是否牢固可靠,无短路或断路现象。
  • 检查集成电路的引脚是否接触良好,无虚焊或断裂现象。
  • 如果集成电路损坏,需要更换新的集成电路。
  • 对于亮度不均或闪烁异常的问题,可以尝试调整与集成电路相关的电阻、电容等元件的值,或者检查彩灯本身是否存在问题。

请注意,以上回答基于一般性的集成电路知识和经验,具体情况可能因不同型号的集成电路或电路设计而异。在实际操作中,建议根据具体的产品手册或咨询专业人士进行故障排查和解决。

启臣微(Chip)公司的发展小趣事

在成都启臣微电子股份有限公司成立之初,公司就致力于集成电路及系统产品的设计、生产与销售。面对激烈的市场竞争,启臣微坚持创新,投入大量研发资源,终于在高性能功率管理集成电路领域取得了重大技术突破。这一突破不仅提升了公司的市场竞争力,也为公司赢得了业界的广泛认可。

Easy Braid公司的发展小趣事

作为一家有社会责任感的企业,Easy Braid始终关注环保和公益事业。公司采用环保材料和生产工艺,减少了对环境的污染。此外,Easy Braid还积极参与各种公益活动,为社会做出了积极贡献。这种关注社会责任的企业文化不仅增强了员工的凝聚力和归属感还提升了公司的社会形象和品牌价值。

Everett Charles Technologies (ECT)公司的发展小趣事

1965年,Everett Charles Technologies (ECT) 公司正式成立,标志着其在电子测试系统硬件与软件领域的起点。ECT的创始人凭借对电子技术的深刻理解和市场需求的敏锐洞察,成功开发出了一系列符合工业标准的产品,包括POGO探针、ValuGrid测试治具等。这些产品的推出,不仅奠定了ECT在电子测试领域的基础,也为公司的后续发展提供了强大的动力。

旌芯半导体(GN)公司的发展小趣事

1996年,ECT为了进一步壮大在产业中的主导地位,加入了Dover集团。Dover集团是一家在纽约股票交易所上市的全美500强大企业之一,其业务涵盖工业、工程系统、流体、电子技术等多个领域。加入Dover集团后,ECT得到了更多的资源和支持,实现了跨越式发展。Dover集团的全球布局和丰富资源,为ECT在全球范围内的业务拓展提供了有力保障。

First Switchtech公司的发展小趣事

在电子行业的初期,First Switchtech公司(或类似公司)凭借其在开关技术领域的突破性创新,迅速在市场中崭露头角。公司研发出了一种新型低功耗、高可靠性的电子开关,这一创新不仅解决了当时市场上开关设备能耗高、故障率大的问题,还极大地提升了产品的整体性能。随着这一技术的广泛应用,First Switchtech公司逐渐在电子开关领域建立了领先地位,并带动了整个行业的技术进步。

问答坊 | AI 解惑

用汇编语言编一个分等级的递增置数程序

有两个键↑,↓.根据按键的时间长短,分成3个等级,从0000开始置数,最大可达9999。第一个等级,按↑递增很慢,按键时间超过5秒,进入第二个等级,递增比原来快多了,继续按键5秒,进入第三等级,递增超快,只看到最高位变化,按键停止后。再次按键 ...…

查看全部问答>

非接触智能卡介绍

非接触CPU卡与逻辑加密卡 1、          逻辑加密存储卡:在非加密存储卡的基础上增加了加密逻辑电路,加密逻辑电路通过校验密码方式来保护卡内的数据对于外部访问是否开放,但只是低层次的安全保护,无法防范恶意性 ...…

查看全部问答>

我的CY7C68013上电不能识别,为什么?

reset电路100k,1uf,SDL,SDA都上拉了,会是什么问题呢? …

查看全部问答>

求教一下,为什么我的电脑装不了EVC4

求教各位高手一下,为什么我的电脑装不了EVC4.我现在用的是XP的系统,电脑上已经装上vc6和vs2005了,我装EVC出现这下面的问题. Setup Initialization Error   There is insufficient memory to run Setup.Try closing any open applicatio ...…

查看全部问答>

printf()函数详解(学习)

printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少。 ②-:有-表示左对齐输出,如省略表示右对齐输出。 ③0:有0表示指定空位填0,如省略表示指定空位不填。 ④m.n ...…

查看全部问答>

F2812烧写中遇到的问题

我想把ucos移植去2812,但是在烧写中遇到了一些问题,这个问题我在论坛见过,不过不清楚具体是怎样解决的~ 下面是遇到的状况: 使用ti的烧写插件烧写FLASH时出现以下提示: Code Composer could not locate: FlashAPIInterface.c Would you lik ...…

查看全部问答>

如何采集电涡流位移传感器负电压输出

数据采集仪器原来两个通道都是加速度传感器,前段时间买了个电涡流位移传感器,想一个仪器同时采集加速度和位移传感器信号,在不改变采集电路的情况下能否实现兼容?电涡流位移传感器输出是-2V到-18V.是直流和交流的耦合输出形式,我只需要交流部分 ...…

查看全部问答>

智能电网之概念学习

什么是智能电网?   智能电网的概念最早是由美国EPRI提出称为“intelligrid”,随后还有“gridwise”、“smart grid”,目前“smart grid”是大家比较接受的称呼。而对智能电网的描述则各有所表,美国、欧盟、中国等都有不同的定义,我从 ...…

查看全部问答>