虚拟微控制器外文翻译资料

 2022-05-26 09:05

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


虚拟微控制器

摘要

如今的嵌入式编程培训通常涉及特定微控制器的许多底层细节。这些细节转移焦点使其远离更高层次的结构化嵌入式编程概念。因此,难以改变的非结构化编程习惯在该领域很常见。随着嵌入式系统变得复杂,结构化嵌入式编程也变得更有必要。我们引入一个虚拟微控制器来解决这个问题。虚拟微控制器不受制造或历史建筑问题的影响,其核心功能可支持嵌入式编程培训,并且具有非常简单的接口,可用于定时器,中断服务程序和 UART 等低级功能。该虚拟微控制器可以映射到现有的微控制器上,甚至可以映射到FPGA或PC上,以牺牲性能和尺寸开销为代价而灵活性地提供更多实验室和书籍。最重要的是,培训仍然可以使用自下而上的资源感知方法,但可以更多地关注结构化嵌入式编程概念。

关键词

嵌入式编程,面向时间的编程,教育,虚拟化,微控制器

1.介绍

越来越复杂的嵌入式系统功能需要将嵌入式编程的介绍从底层细节上升到更高级别的结构化编程。然而,有资源意识型嵌入式程序员的重要性不利于通过操作系统隐藏所有底层细节。

目前嵌入式系统的第一门课程或教程通常关注特定微控制器的底层细节,例如如何通过配置寄存器来配置特定微控制器的定时器,计数器或UART。由于处理器发展的原因,这些细节常常令人费解,可能涉及设置振荡器频率,定时器寄存器,中断寄存器和UART寄存器之间的微妙平衡,才能实现特定波特率的串行传输。由于数百种微控制器的差异,细节在微控制器系列中都有显著差异。

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

当前有两种提高编程水平的方法很常见。一种是自下而上的方法,其首先介绍低层次的详细编程,然后在第二课程中引入更高层次的概念。虽然在实际教授技能方面是可实现的,但这种方法的缺点是允许无规律的编程习惯发展,这很难在以后突破。而且,低层次的细节可能会阻碍一些学生在该领域进行研究。另外,第二课程通常不存在(或者由顶点项目而不是额外的培训组成),或者学生可能不参加该课程。此外,实验室和教科书都是高度针对特定微控制器的; 由于获得新硬件而导致的变化可能需要对实验室,教科书和其他材料进行大量的修改,因此很多教师都会对此进行抵制。

相比之下,自顶向下的方法会跳过低级编程,并可能会利用实时操作系统(RTOS)或其他更高级别的环境来介绍嵌入式系统编程,这提供了隐藏许多细节的抽象接口。虽然能专注于更高层次的问题,但这种方法的缺点是不能让学生直观地了解基本的微控制器原理,并且可能导致程序员不了解重要的资源问题。虽然提升编程非常重要,但资源意识对于实际的嵌入式开发也非常重要,因为许多系统不使用RTOS,而且由于理解底层概念可鼓励更有效地使用RTOS功能。

我们提出了一种利用虚拟微控制器的折衷方法,如图1所示。虚拟微控制器为程序员提供基本的低级组件——定时器,中断服务程序,UART,通用输入/输出等——而不是隐藏它们去使用实时操作系统,它仍然可以使用简单的结构,不受瞬时或历史低级复杂性的影响。 虚拟微控制器支持固定和非参数化架构,并具有简单的、简化的和C兼容的指令集。虚拟微控制器还支持最简单的编程途径,使学生能够专注于更重要的嵌入式编程概念,同时仍能实现自下而上的方法。

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

2. 相关工作

一些研究项目试图改进工程教育。Hodge介绍了虚拟电路实验室的概念,这是一个开始电气工程课程的虚拟环境,模拟故障模式以帮助学生发展稳定的调试技术。此环境不仅提供了一个方便的测试环境,而且使教师可以更专注于教学。Butler开发了一个基于网络的微处理器基础课程,其中包括一台基础计算机,它为学生在第一年的工程课程中提供对微处理器 和如何编程的威胁性较小的介绍。

其他研究人员专注于为初学者或非工程师人员开发或评估计算架构。Benjamin 描述了一种混合微控制器和数字信号处理器的BlackFin架构。该架构提供了基于MIPS的具有可变 宽度数据的丰富指令集以及并行处理支持。 Ricks 在需要更好的嵌入式系统教育的背景下评估了VME架构。Eblocks项目专注于开发传感器模块,让没有编程或电子知识的人员可以了解到基础定制的基于传感器的嵌入式系统。

许多研究涉及虚拟化,其中一些商业产品是为了满足便携式虚拟机的需求而开发的。 VMware和开源产品Xen专注于开发允许终端用户同时运行多个操作系统的虚拟机。Java虚拟机允许程序员编写与操作系统无关的代码,而DOS Box和控制台模拟器等工具允许用户在现代操作系统中运行遗留应用程序。

许多实时操作系统已经被引入,以提供应用软件和嵌入式硬件之间更高层次的抽象接口,包括开源的eCos,WindRiver 的VxVorks和RTLinux。

还有一些努力利用标准台式计算机的便利来创建适合于微控制器运行的虚拟环境。 Virdes虚拟开发系统为学习使用流行的8051/8052微控制器进行编程的人提供了一个虚拟的 原型开发环境。VirDES船有几个已经建成的闪烁LED的布局,利用模数转换器,虚拟UART和终端来工作。Images Scientific Instruments机构开发了用于原型PIC微控制器的虚拟系统,而其他工作集中在为AVR微控制器开发虚拟外设。

就我们所知,本文所描述的工作是第一个描述虚拟微控制器的,它可以在现有平台上物理实现,同时也支持程序员访问低级但纯粹,简洁的微控制器资源。

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使用一个4k字节的指令存储器,根据现成的微控制器存储器大小进行选择,并根据几个嵌入式系统实验室和试验所需的尺寸进行选择,我们在几个嵌入式系统课程中对此进行了测试。Vmu;C的数据存储器是64k字节。 一个32位体系结构可以支持 4GB内存,但支持如此大的空间将使物理映射到真正的微控制器几乎是不可能的。 64k字节数据存储器的上半部分专用于 Vmu;C的存储器映射外设和寄存器。 对于我们测试的任何嵌入式程序来说,64k字节的数据内存都足够了。

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

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

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

Vmu;C包含一个UART(通用异步接收器/发送器),它允许学生学习如何连接到包括PC在内的串行设备,以用于输入,显示或调试目的。UART可以使用三个直观的存储器映射寄存器, UART状态寄存器,UART TX数据寄存器和UART RX数据寄存器进行编程和配置。 要写入UART,程序将值写入UART TX数据寄存器,并向UART状态寄存器写入#39;1#39;以表示发送开始信号。同样,一旦UART中断了Vmu;C内核,程序就可以读取UART RX数据寄存器的有效数据。与Vmu;C的定时器一样,我们减少了由现成的微控制器提供的几个附加功能以简化编程。例如,UART波特率固定为9600,无需配置速率。该速率是基于9600是几个现成的微控制器的默认速率而选择的。

4. 可移植性

只要一个计算平台支持第3节中描述的虚拟微控制器,那么为这个虚拟微控制器而写的代码将同样能运行于不同的平台。需要将代码从一个平台移植到另一个平台,无论该端口是相对简单的重新编译,还是完全重写代码库。例如,在物理微控制器上实现的虚拟微控制器上每半秒闪烁的一段代码,每隔半秒钟就在同一个PC实现的虚拟微控制器上闪烁相同的光。

这种可移植性的优点包括学生在家中使用一种实现(例如基于PC的实现)而在实验室中使用不同实现(例如基于FPGA 的实现)的能力。即使是相同的实验室设置也可以根据可用的物理资源使用不同的实现方法。

5. USB可编程性

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

相比之下,我们选择了USB闪存驱动器编程方法,如图4所示。学生将所需程序作为文件复制到USB驱动器上,将驱动器插入 Vmu;C中,然后按下Vmu;C上的按钮,来从闪存驱动器下载程序到Vmu;C指令存储器。该方法解决了Vmu;C中对非易失性存储器的需求。该方

全文共9746字,剩余内容已隐藏,支付完成后下载完整资料


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

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

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