基于单片机的微型电子琴的实现外文翻译资料

 2022-11-03 18:59:07

英语原文共 8 页,剩余内容已隐藏,支付完成后下载完整资料


虚拟微控制器

1 简介

窗体底端

日益复杂的嵌入式系统功能需要将嵌入式编程的介绍从低级细节升级到更高层次的结构化编程。然而,资源感知嵌入式程序员的重要作用阻止了通过操作系统隐藏所有低级细节的做法。

目前关于嵌入式系统的第一课程或教程通常专注于特定微控制器特定的低级细节,例如如何通过配置寄存器配置特定的微控制器的定时器,计数器或UART。由于处理器演进的原因,这些细节经常被卷积,可能涉及设置振荡器频率,定时器寄存器,中断寄存器和UART寄存器之间的微妙平衡,以实现特定波特率的串行传输。具有数百个微控制器的变化,细节在微控制器系列内甚至不同。

相比之下,嵌入式系统复杂性要求将嵌入式编程提升到更高层次的结构化方法。这种结构化方法可能涉及使用诸如C之类的语言捕获的状态机或数据流计算模型,利用诸如同时执行的状态机的循环处理等清晰的多任务方法,并具有清晰一致的方法来处理定时输入和输出事件。具体来说,嵌入式编程培训应着重于早期介绍面向时间编程的概念,通过使用同步状态机等计算模型,将明确的时间管理作为基本概念进行教学。

今天提出的两种方法是提高编程水平。自下而上的方法首先介绍低级别的详细编程,然后在第二课程中引入更高层次的概念。在实践教学技术技能方面实用化,这种方法具有允许不规律的编程习惯发展的缺点,后者可能难以打破。此外,低调的细节可能会阻碍一些学生在该地区进行学习。此外,第二个课程通常不存在(或由顶级项目组成,而不是额外的培训),或者学生可能不会采取这种方式。此外,实验室和教科书是高度单片机特定的; 由于获得新的硬件而导致的变化可能需要对实验室,教科书和其他材料进行实质性修改,因此受到许多教师的抵制。

相比之下,自上而下的方法跳过低级编程,并可能使用实时操作系统(RTOS)或其他更高级别的环境引入嵌入式系统编程,这提供了隐藏许多细节的抽象。在实现更高级别问题的同时,这种方法的缺点是不能向学生提供基本的基本微控制器机制的直觉,并且可能导致程序员不了解重要的资源问题。升级程序设计很重要,资源意识对于实际的嵌入式开发来说也是至关重要的,因为许多系统都不使用RTOS,因为理解低级概念会鼓励更有效地使用RTOS功能。

我们提出一种使用虚拟微控制器的折衷方法,如图1所示。虚拟微控制器将基本的低级组件暴露给编程器-定时器,中断服务程序,UART,通用输入/输出等-而不是隐藏它们 使用RTOS,但是使用由瞬态或历史低级复杂性整理的简单清洁结构。虚拟微控制器支持具有简单,简化和C兼容指令集的固定和非参数化架构。虚拟微控制器还支持可能的最简单的编程孔,允许学生将重点放在更重要的嵌入式编程概念上,同时还能实现自下而上的观点。

此外,虚拟微控制器可以在各种嵌入式设备上执行,包括各种现有的微控制器,具有通用I / O的板上的嵌入式微处理器,现场可编程门阵列(FPGA),或甚至在具有适当通用I / O添加。教师必须对虚拟微控制器进行一次性映射到其特定设备。稍后更换设备时,教练将进行重新映射,但不需要更改书籍或实验室材料。虚拟微控制器还具有图形模拟器,允许教师在不具有硬件实验室的次优情况下教授嵌入式编程,或支持实验室外的学生进行额外的培训。即使使用不同的设备,学生继续使用相同的虚拟微控制器工具(模拟器,调试器,编译器),而不必切换到特定设备自己的工具。

2 相关工作

一些研究项目试图改进工程教育。Hodge [8]引入了虚拟电路实验室的概念,虚拟环境是一个模拟故障模式的初始电气工程课程,以帮助学生开发稳固的调试技术。环境不仅提供了方便的测试环境,而且还让导师更加专注于教学。Butler [2]开发了一个基于网络的微处理器基础课程,其中包括一个基础计算机,为学生提供第一年的工程课程,对微处理器的介绍不太有挑战性,以及如何编程。

其他研究人员也专注于为初学者或非工程师开发或评估计算架构。本杰明[1]描述了BlackFin架构,混合微控制器和数字信号处理器。该架构提供了基于MIPS的丰富指令集,具有可变宽度数据和并行处理支持。Ricks [12]在满足更好的嵌入式系统教育需求的背景下评估VME架构。Eblocks项目[4]集中在开发传感器模块,无需编程或电子知识的人可以连接到构建基于定制的基于传感器的嵌入式系统。

许多研究涉及虚拟化[11] [13],针对便携式虚拟机的需要开发了几种商业产品。 VMware [16]和开源产品Xen [18]专注于开发允许最终用户同时运行多个操作系统的虚拟机。Java虚拟机[14]允许程序员编写与操作系统无关的代码,DOS Box和控制台仿真器等工具允许用户在现代操作系统中运行旧应用程序。

引入了一些实时操作系统,在应用软件和嵌入式硬件之间提供更高层次的抽象,包括开源eCos [5],以及WindRiver的VxVorks和RTLinux [17]

还有一些努力来创建适合从便利的标准台式计算机运行的微控制器的虚拟环境。Virdes [15]虚拟开发系统为任何使用流行的8051/8052微控制器学习程序的虚拟原型设计提供了一个虚拟样机环境。Virdes配有几个已经构建的布局来闪烁LED,使用模数转换器,以及一个虚拟UART和终端。图像科学仪器[9]开发了一个用于原型化PIC单片机的虚拟系统,而其他工作则集中在开发AVR微控制器的虚拟外设[6]

据我们所知,本文中描述的工作是第一个描述可以在现有平台上物理实现的虚拟微控制器,同时也支持编程人员访问低级但干净,整洁的微控制器资源。

3 程序员的观点

我们从程序员的角度来描述虚拟微控制器(Vmu;C)。虽然可以完全在C中进行编程,但一些教练也许希望引入指令集 - 学习编程和读取汇编代码仍然是培训的常见部分,因为汇编代码仍然为某些驱动程序编写,有时在困难的调试期间进行检查。我们在[7]中选择了基于MIPS ISA(指令集架构)的指令集。

我们考虑了其他选择,包括类ARM的指令集或Java字节码。ARM指令集类似于许多微控制器指令集,并且已经有许多针对Java字节码构建的虚拟机实现。然而,MIPS ISA提供了一个更直观的指令集,另外的优点是ISA通常已经在开始的计算机体系结构课程中教授过了。学习完整的MIPS ISA可能会压倒学生。因此,我们选择使用如图2所示的二十个指令子集,作为整个MIPS ISA的代表性组合。使用该子集允许更容易的学习,代价较大的代码大小和较慢的性能,这在培训的上下文中不那么重要。该子集还具有要求特殊的C编译器后端(在第7节中讨论,不支持现有MIPS二进制文件)的缺点;同样,这些在训练设置中也是较小的问题。未来的工作还需要扩展虚拟微控制器的功能,以支持具有虚拟微控制器扩展的完整MIPS ISA,以允许更先进和更紧凑的程序。

我们添加了一个来自中断RETI指令的返回值,它在原来的MIPS ISA中不存在。因为中断在嵌入式系统中如此常用,所以我们试图以干净的方式为学生提供中断。另一种方法是要求学生使用跳转寄存器JR指令来退出中断,但是这种用法分散了中断的基本思想。

图3所示的Vmu;C架构是一个固定的32位架构。初级教室中使用的微控制器通常是8位,偶尔是16位,但小架构通过强制学生使用累加器或堆栈来增加在寄存器和数据存储器之间移动数据的额外复杂性,这会混淆更高级别的问题 嵌入式编程。一个32位架构既简单易懂,又可以轻松访问大型寄存器集和内存。 虽然虚拟微控制器将允许指令集宽度的参数化以增加灵活性,但是在嵌入式系统课程的上下文中不需要该功能。

Vmu;C使用四千字节指令存储器,基于现成的微控制器内存大小,以及我们从多个嵌入式系统课程中检查的几个入门嵌入式系统实验室和练习所需的大小。 Vmu;C的数据存储器是64千字节。32位架构可以支持4 GB的内存,但是支持这么大的空间将使实际的微控制器的物理映射几乎不可能。64千兆字节数据存储器的上半部分用于Vmu;C的内存映射外设和寄存器。64千字节的数据记录对于我们检查的任何嵌入式程序来说都是足够的。

Vmu;C实现了由程序员和软件查看的简化中断控制器模型。中断控制器模型允许轻松直观地实现具有优先级的中断。中断控制器由两个内存映射特殊功能寄存器,一个中断状态寄存器和一个中断值寄存器组成。两个寄存器一起作为简化的中断向量表,通常用在现成的微控制器中。当Vmu;C中断时,学生只需读取中断值寄存器,并使用类似于case语句的编程结构运行相应的中断服务程序。为方便起见,中断由Vmu;C自动关闭,因此中断程序不能被另一个中断请求中断。嵌套中断可能使新学生感到困惑。中断状态寄存器用作软件开关以使能和/或禁止中断,并且可以容易地用值“0”或“1”写入。中断服务程序使用RETI指令完成。RETI指令将将Vmu;C的程序计数器更新为尚未完成的最后一条指令,并重新使能中断。中断控制器连接到三个外设:两个定时器和一个UART。外设具有固定的优先级,其中两个定时器被优先考虑,然后是UART。外设具有固定的优先级,其中两个定时器被优先考虑,然后是UART。固定的优先级降低了虚拟微控制器的复杂性以及正在运行的软件,允许学生集中精力于核心嵌入式编程概念,而牺牲了优先级需要不同的情况(这在学习环境中是罕见的)。

Vmu;C接口到一组基本的外设,可以实现各种嵌入式系统的创建,从使用通用输入/输出到面向定时的编程。虚拟微控制器将输入和输出分离为两个独立的存储器映射八位寄存器,可以读取(输入寄存器)或写入(输出寄存器)。 每个输入和输出位也可以通过名称单独访问(例如,I1,O4)。具有专门的输入和输出消除了大多数微控制器配置每个输入/输出端口方向所需的步骤。一些8位输入端口和一个8位输出端口对于我们检查的大多数入门实验室都是足够的。如果需要更多端口,可以引入外部扩展并行I / O技术。

虚拟微控制器有两个定时器。至少需要一个计时器,因为嵌入式编程课程大部分都围绕基于定时的计算模型(状态机,中断等).Vmu;C使用两个定时器,因为使用两个定时器的几个概念和应用程序变得更加直观。例如,学生可能会写一个模仿两个状态机的应用程序,这两台机器必须每半秒钟和每两秒钟进行一次转换。虽然两台状态机只能使用一个定时器,但通过使用多个定时器,编程变得更加容易。两个定时器通过定时器0/1控制寄存器提供有限的可配置性。学生可以允许或不允许定时器中断Vmu;C,并且可以通过写入几位来启动和停止定时器。 Vmu;C定时器的可配置性有限,提供了一个更清洁的,面向概念的界面,而不是由非微处理器提供的接口。定时器通过将存储器映射寄存器Timer 0/1值寄存器写入一个毫秒值来编程。这个毫秒值与现成的微控制器相反,微控制器需要基于该微控制器的时钟频率编写一个值。我们为Vmu;C的定时器选择了毫秒分辨率,因为嵌入式编程课程中的所有实验室都需要粒度或更粗糙度。毫秒级的解决方案也是学生掌握快捷的时间段。

Vmu;C包括一个UART(通用异步接收器/发送器),允许学生学习如何与串行设备(包括PC)进行接口,以进行输入,显示或调试。 UART可以使用三个直观的存储器映射寄存器,UART状态寄存器,UART TX数据寄存器和UART RX数据寄存器进行编程和配置。要写入UART,程序将一个值写入UART TX数据寄存器,并将一个“1”写入UART状态寄存器以指示传输开始。类似地,一旦UART中断了Vmu;C内核,程序就可以读取UART RX数据寄存器的有效数据。与Vmu;C的定时器一样,我们消除了现成的微控制器提供的几个附加功能来简化编程。 例如,UART波特率固定为9600,无需配置速率。该速率被选择为9600是几个现成的微控制器的默认速率。

4 可移植性

只要计算平台支持第3节所述的虚拟微控制器,则为虚拟微控制器编写的代码将在不同的平台上执行相同的操作。将代码从一个平台移植到另一个平台的需要,无论该端口是相对简单的重新编译,还是完全重写代码库。例如,在物理微控制器上实现的虚拟微控制器上运行的每半秒钟闪烁一码的代码也将在PC实现的虚拟微控制器上每半秒钟闪烁相同的指示灯。

这种便携性的优点包括学生在实验室中使用不同实现(例如,基于FPGA的实现)时在家中使用一个实现(例如,基于PC的实现)的能力。即使相同的实验室设置也可以使用基于可用物理资源的不同实现。

5 USB可编程性

虚拟微控制器支持USB编程(这里的“编程”是指通过USB闪存驱动器将代码下载到设备中),而不是传统的硬件编程器,其中插入,编程和放置在系统中。这种方法需要非易失性存储器,并且需要可移除的芯片,极大地限制了在各种现有设备上实现虚拟微控制器的能力。这种方法还需要一个单独的程序设备,增加成本,并为学生引入额外的步骤。一种替代的编程方法是使用USB电缆在系统中对设备进行编程。在消除对编程设备的需要的同时,每当学生想要改变程序时,这种方法仍然需要PC。

相反,我们选择了USB闪存驱动器编程方法,如图4所示。学生将所需的程序作为文件复制到USB驱动器上,将驱动器插入Vmu;C实现,然后按下Vmu;C上的一个按钮,将该程序从闪存驱动器到Vmu;C指令存储器。该方法消除了Vmu;C中非易失性存储器的需要。该方法使学生能够通过插入和交换闪存驱动器来加载和更改程序,从而实现更多的移动性,并且易于检查对方程序的行为。该方法还符合当前流行电子设备的使用方案,允许初学者以最小的努力开始编程,并使用熟悉的范例。USB方法还给学生直观的概念,程序和微控制器是分开的物理实体。成本是Vmu;C必须包含一个内部的USB闪存驱动器读卡器。我们使用现成的读取装置,这增加了Vmu;C的尺寸和成本。

6 Vmu;C可执行格式

虚拟微控制器使用人类可读的汇编语言文件作为“可执行”格式。传统的二进制可执

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[140985],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。