硬件(名词)计算机系统被固定的一部分外文翻译资料

 2022-08-12 03:08

Chapter 5. Getting to Know the Hardware

hardware n. The part of a computer system that can be kicked.

As an embedded software engineer, youll have the opportunity to work with many different pieces of hardware in your career. In this chapter, I will teach you a simple procedure that I use to familiarize myself with any new board. In the process, Ill guide you through the creation of a header file that describes the boards most important features and a piece of software that initializes the hardware to a known state.

5.1 Understand the Big Picture

Before writing software for an embedded system, you must first be familiar with the hardware on which it will run. At first, you just need to understand the general operation of the system. You do not need to understand every little detail of the hardware; that kind of knowledge will not be needed right away and will come with time.

Whenever you receive a new board, you should take some time to read whatever documents have been provided with it. If the board is an off-the-shelf product, it might arrive with a 'Users Guide' or 'Programmers Manual' that has been written with the software developer in mind. However, if the board was custom designed for your project, the documentation might be more cryptic or written mainly for the reference of the hardware designers. Either way, this is the single best place for you to start.

While you are reading the documentation, set the board itself aside. This will help you to focus on the big picture. There will be plenty of time to examine the actual board more closely when you have finished reading. Before picking up the board, you should be able to answer two basic questions about it:

  • What is the overall purpose of the board?
  • How does data flow through it?

For example, imagine that you are a member of a modem design team. You are a software developer who has just received an early prototype board from the hardware designers. Because you are already familiar with modems, the overall purpose of the board and the data-flow through it should be fairly obvious to you. The purpose of the board is to send and receive digital data over an analog telephone line. The hardware reads digital data from one set of electrical connections and writes an analog version of the data to an attached telephone line. Data also flows in the opposite direction, when analog data is read from the telephone line jack and output digitally.

Though the purpose of most systems is fairly obvious, the flow of the data might not be. I often find that a data-flow diagram is helpful in achieving rapid comprehension. If you are lucky, the documentation provided with your hardware will contain a superset of the block diagram you need. However, you might still find it useful to create your own data-flow diagram. That way, you can leave out those hardware components that are unrelated to the basic flow of data through the system.

In the case of the Arcom board, the hardware was not designed with a particular application in mind. So for the remainder of this chapter, well have to imagine that it does have a purpose. We shall assume the board was designed for use as a printer-sharing device. A printer-sharing device allows two computers to share a single printer. The user of the device connects one computer to each serial port and a printer to the parallel port. Both computers can then send documents to the printer, though only one of them can do so at a given time.

In order to illustrate the flow of data through the printer-sharing device, Ive drawn the diagram in Figure 5-1. (Only those hardware devices that are involved in this application of the Arcom board are shown.) By looking at the block diagram, you should be able to quickly visualize the flow of the data through the system. Data to be printed is accepted from either serial port, held in RAM until the printer is ready for more data, and delivered to the printer via the parallel port. The software that makes all of this happen is stored in ROM.

Figure 5-1. Data-flow diagram for the printer-sharing device

Once youve created a block diagram, dont just crumple it up and throw it away. You should instead put it where you can refer to it throughout the project. I recommend creating a project notebook or binder, with this data-flow diagram on the first page. As you continue working with this piece of hardware, write down everything you learn about it in your notebook. You might also want to keep notes about the software design and implementation. A project notebook is valuable not only while you are developing the software, but also once the project is complete. You will appreciate the extra effort you put into keeping a notebook when you need to make changes to your software, or work with similar hardware, months or years later.

If you still have any big-picture questions after reading the hardware documents, ask a hardware engineer for some help. If you dont already know the hardwares designer, take a few minutes to introduce yourself. If you have some time, take him out to lunch or buy him a beer after work. (You dont even have to talk about the project the whole time!) I have found that many software engineers have difficulty communicating with hardware engineers, and vice versa. In embedded systems development, it is especially important that the hardware and software teams be able to communicate with one another.

5.2 Examine the Landscape

It is often useful to put yourself in the processors shoes for a while. After all, the processor is only going to do what you ultimately instruct it to do with your software. Imagine what it is like to be the

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


第五章 了解硬件

硬件(名词)计算机系统被固定的一部分。

作为一个嵌入式软件工程师,你将有机会在你的职业生涯中使用许多不同的硬件。在本章中,我将教你一个用来熟悉所有的新开发板的简单的程序。在此过程中,我将指导你创建一个描述电路板最重要功能的头文件,以及一个将硬件初始化为已知状态的软件。

5.1 了解全局

在为嵌入式系统编写软件之前,你必须首先熟悉它将在其上运行的硬件。首先,你只需要了解系统的一般操作。你无需了解硬件的每个小细节;这种知识不会现在就需要学会使用,而是会随着时间的流逝而出现。

每当你得到一个新的电路板时,你应该花一些时间来阅读它附加提供的所有的文档。如果开发板是现成的产品,则可能会附带有软件开发人员的“用户指南”或“程序员手册”。但是,如果该板是为你的项目定制设计的,则该文档可能会比较含糊或主要是供硬件设计人员参考的。无论哪种方式,这都是你入门的最佳选择。

在阅读文档时,请将板子放在一边。这将帮助你专注全局。完成阅读后,你将有大量时间仔细检查实际的电路板。在拿起板子之前,你应该能够回答以下两个基本问题:

  • 开发板的总目的是什么?
  • 数据在其内部是如何流动的?

例如,假设您是调制解调器设计团队的成员。您是一位软件开发人员,刚刚从硬件设计师那里收到了一块早期的原型板。因为您已经熟悉调制解调器,所以板的总体用途以及通过它的数据流对你来说应该是非常明显的。该板的目的是通过模拟电话线发送和接收数字数据。硬件从一组电气连接读取数字数据,并将数据的模拟版本写入连接的电话线。从电话线插孔中读取模拟数据并进行数字输出时,数据也将以相反的方向流动。

虽然大多数系统的目的相当明显,但数据流程可能不是。我经常发现数据流程图有助于快速理解。如果幸运的话,硬件随附的文档将包含你所需要的框图的超集。但是,你仍可能发现创建一个属于你自己的数据流程图是很有用的。这样,你可以排除那些与系统的基本数据流无关的硬件组件。

对于Arcom,硬件在设计时并没有考虑到特定的应用程序。因此,在本章的其余部分中,我们必须想象它确实有目的。我们将假定该板是为用作打印机共享设备而设计的。打印机共享设备允许两台计算机共享一台打印机。设备的用户将一台计算机连接到每个串行端口,将打印机连接到并行端口。然后,两台计算机都可以将文档发送到打印机,尽管在给定的时间中只有一台可以发送文档。

为了说明通过打印机共享设备的数据流,我绘制了图5-1中的图表。(仅显示了Arcom板的此应用程序涉及的那些硬件设备。)通过查看框图,你应该能够快速看到通过系统的数据流。计算机可以从任一串行端口接受要打印的数据,并且直到打印机准备好接收更多数据为止,都将其保留在RAM中,然后通过并行端口将这些数据传送给打印机。ROM中存储着使这一过程发生的软件。

图5-1.打印机共享设备的数据流程图

创建框图后,不要只是将其揉碎并扔掉。相反,你应该将其放在可以在整个项目中引用它的位置。我建议使用第一页上的数据流程图创建项目笔记本或活页夹。当你继续使用此硬件时,请在笔记本中写下你了解的所有内容。你可能还需要保留有关软件设计和实现的注释。项目笔记本不仅在开发软件时很有价值,而且在项目完成后也很有价值。当你需要在数月或数年后对软件进行更改或使用类似的硬件时,你将会感激你之前在维护笔记本电脑方面所付出的额外努力。

如果你在阅读硬件文档后仍有任何大问题,请向硬件工程师寻求帮助。如果您还不了解硬件的设计者,请先花几分钟时间进行自我介绍。如果你有时间,你可以带他出去吃午饭,或者下班后给他买杯啤酒。(你甚至不必一直谈论该项目!)我发现许多软件工程师很难与硬件工程师进行交流,反之亦然。在嵌入式系统开发中,硬件和软件团队能够相互沟通交流尤为重要。

5.2 考察全景

让自己站在处理器的角度一段时间通常很有用。毕竟,处理器只会执行您最终指示它使用软件进行的操作。想象一下成为处理器的感觉:处理器的世界是什么样子的?如果你从这个角度来看待这个问题,你很快就会意识到处理器有很多同胞。处理器可以与板上的其他硬件直接进行通信。在本节中,您将学习如何识别他们的姓名和地址。

需要注意的第一件事是,有两种基本类型:内存和外围设备。显然,存储器用于数据和代码的存储和检索。但是你可能想知道外围设备是什么。这些是专用的硬件设备,可以协调与外界(I / O)的交互或执行特定的硬件功能。例如,嵌入式系统中最常见的两个外围设备是串行端口和计时器。前者是一个I/O设备,后者基本上只是一个计数器。

英特尔 80x86 和其他一些处理器家族的成员有两个不同的地址空间,通过这些地址空间,他们可以与这些内存和外围设备进行通信。第一个地址空间称为内存空间,主要用于内存设备;第二个专用于外围设备,称为 I/O 空间。但是,外围设备也可以由硬件设计人员自行决定是否位于存储空间内。当这种情况发生时,我们说这些外围设备是内存映射的。

从处理器的角度来看,内存映射的外围设备的外观和行为与内存设备非常相似。但是,外设的功能显然与内存的功能有很大不同。外围设备可能会将其解释为命令或要以某种方式处理的数据,而不是仅仅存储提供给它的数据。如果外围设备位于内存空间内,则说系统具有内存映射的 I/O接口。

嵌入式硬件的设计者通常更喜欢只使用内存映射的 I/O,因为它对硬件和软件开发人员都有好处。它对硬件开发人员很有吸引力,因为他可能完全能够消除 I/O 空间及其一些关联的导线。这可能不会显著降低电路板的生产成本,但可能会降低硬件设计的复杂性。内存映射的外围设备对于程序员来说也更好,他们能够更轻松、更有效地使用指针、数据结构和联合来与外围设备进行交互。

5.2.1 内存映射

所有处理器将其程序和数据存储在内存中。在某些情况下,此内存与处理器位于同一芯片上,但是更常见的是位于外部内存芯片中。这些芯片位于处理器的内存空间中,处理器通过两组称为地址总线和数据总线的电线与它们通信。为了读取或写入存储器中的特定位置,处理器首先将所需地址写入地址总线。然后通过数据总线传输数据。

当您阅读有关一块新板的信息时,请创建一个表,该表显示每个内存设备和位于内存空间中的外围设备的名称和地址范围。组织表,使最低地址位于底部,最高地址位于顶部。每次将设备添加到内存映射时,请将其放置在内存中的大概位置,并以十六进制标记起始地址和结束地址。将所有设备插入内存映射后,请确保将所有未使用的内存区域都这样标记。

如果你回顾一下图5-1中Arcom板的框图,您会发现地址和数据总线上连接了三个设备。这些设备是RAM和ROM,以及一个标有“ Zilog 85230串行控制器”的神秘设备。Arcom 提供的文档显示,RAM 位于内存的底部,并向上扩展到内存空间的前128 KB。ROM 位于内存顶部,向下延伸 256 KB。但是,该内存区域实际上包含两个ROM(一个EPROM和一个闪存设备),每个大小均为128 KB。第三个设备是Zilog 85230串行通信控制器,它是一个内存映射的外围设备,其寄存器可在地址70000h和72000h之间访问。

图5-2中的内存映射展示了这些设备在处理器上的外观。从某种意义上说,这是处理器的'通讯簿'。正如你在个人生活中维护姓名和地址列表一样,你也必须维护处理器的类似列表。内存映射包含从处理器内存空间访问的每个内存和外围设备的一个条目。此图可以说是有关系统的最重要信息,应保持最新状态,并应作为与项目相关的永久记录的一部分。

图5-2. Arcom主板的内存映射

对于每个新板,你应该创建一个描述其最重要功能的头文件。此文件为硬件提供了一个抽象接口。实际上,它允许您按名称而不是按地址引用板上的各种设备。这还增加了使应用程序软件更加便携的附加好处。如果内存映射不断更改(例如,如果移动了 128 KB 的 RAM),则只需更改特定于板的头文件的受影响的行,然后重新编译你的应用程序。

随着本章的进行,我将向你展示如何为 Arcom 板创建一个头文件。下面列出了此文件的第一部分。下面的头文件部分描述了内存映射。头文件中的内存映射与图5-2中的内存映射之间最明显的区别是地址的格式。指针与地址说明了产生这种区别的原因。

/**********************************************************************

*

* 内存映射

*

* 基本地址 大小描述

* -------------- ----- -----------------------------------

* 0000:0000h 128K SRAM

* 2000:0000h 未使用

* 7000:0000h Zilog SCC 寄存器

* 7000:1000h Zilog SCC 中断确认

* 7000:2000h 未使用

* C000:0000h 128K 闪存

* E000:0000h 128K EPROM

*

**********************************************************************/

#define SRAM_BASE (void *) 0x00000000

#define SCC_BASE (void *) 0x70000000

#define SCC_INTACK (void *) 0x70001000

#define FLASH_BASE (void *) 0xC0000000

#define EPROM_BASE (void *) 0xE0000000

指针与地址

在 C 和 C 中,指针的值都是一个地址。因此,当我们说我们有一个指向某些数据的指针时,实际上是指我们有存储数据的地址。但是程序员通常不会直接设置或检查这些地址。此规则的例外情况是操作系统开发员、设备驱动程序员和嵌入式软件开发员,他们有时需要在其代码中明确地显式设置指针的值。

遗憾的是,地址的确切表示可能因处理器而异,甚至可能取决于编译器。这意味着像12345h这样的物理地址可能不会以那种形式存储,甚至可能由不同的编译器以不同的方式存储。然后出现的问题是程序员如何可以显式设置指针的值,以使其指向内存映射中的所需位置。

大多数用于80x86 处理器的 C/C 编译器使用 32 位指针。但是,较旧的处理器没有简单的线性 32 位地址空间。例如,英特尔的 80188EB 处理器只有 20 位地址空间。此外,其内部寄存器不能容纳超过 16 位的数据。因此,在该处理器上,两个16位寄存器(段寄存器和偏移寄存器)被组合在一起以创建20位物理地址。(物理地址计算包括将段寄存器的内容左移四位并将偏移寄存器的内容加到结果中。忽略进入第21位的任何溢出。)

因此,要声明并初始化指向位于物理地址12345h的寄存器的指针,我们需要编写:

int * pRegister = (int *) 0x10002345;

其中最左侧的 16 位包含分段值,而最右侧的 16 位包含偏移值。

为方便起见,80x86 程序员有时会将地址写入段:偏移对。使用此表示法,物理地址12345h将被写为0x1000:2345。这正是我们用来初始化上面指针的值(sans colon)。但是,对于每个可能的物理地址,有 4096 个不同的段:偏移对指向一个给定的物理地址。例如,对 0x1200:0345 和 0x1234:0005(和其他 4093个) 也引用物理地址 12345h。

5.2.2 I/O映射

如果存在单独的 I/O 空间,则需要重复内存映射练习,为主板创建 I/O 映射。这个过程是完全一样的。只需创建外围设备名称和地址范围的表,就可以将最低地址放在底部,以这种方式进行组织。通常,大部分的I / O空间将被闲置,因为那里的大多数外围设备都只有几个寄存器。

Arcom电路板的I/O映射如图5-3所示。它包括三个设备:外围控制模块(PCB)、并行端口和调试器端口。PCB 是 80188EB 中的一组寄存器,用于控制片上外设。控制并行端口和调试器端口的芯片位于处理器外部。这些端口分别用于与打印机和基于主机的调试器进行通信。

图5-3.Arcom板的I/O映射

在为主板创建头文件时,I/O 映射也很有用。I/O 空间的每个区域都直接映射到一个常量,称为基地址。上述 I/O 映射到一组常量的转换,请参阅下面的列表:

/*****************************************

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


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

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

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