嵌入式系统概括

转载 2011年10月19日 00:35:36
 
定义
      IEEE(国际电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”
(原文为:Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants)。
这主要是从应用对象上加以定义,从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。
     国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、
可靠性、成本、体积、功耗等严格要求的专用计算机系统。
可以这样认为,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制
程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,
都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。
[编辑本段]
嵌入式系统的组成
一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,如图1-1所示,嵌入式计算机系统是整个嵌入式系统的
核心,由硬件层、中间层、系统软件层和应用软件层组成。 执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很
简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面
集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。
下面对嵌入式计算机系统的组成进行介绍。
 1)硬件层 硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和 I/O接口(A/D、D/A、I/O等)
备 。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。 其中操作系统和应用程序都可以固化在ROM中。 (1)嵌入式微处理器 嵌入式系统硬件层的核心是嵌入式微处理器,嵌入式微处理器与通用CPU最大的不同在于嵌入式微处理器大多工作在
为特定用户群所专用设计的系统中,它将通用CPU许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统在设计
时趋于小型化,同时还具有很高的效率和可靠性。 嵌入式微处理器的体系结构可以采用冯·诺依曼体系或哈佛提醒哦结构;指令系统可以选用精简指令系统
(Reduced Instruction Set Computer,RISC)和复杂指令系统CISC(Complex Instruction Set Computer,CISC)。
CISC计算机在通道中只包含最有用的指令,确保数据通道快速执行每一条指令,从而提高了执行效率并使CPU硬件结构
设计变得更为简单。
嵌入式微处理器有各种不同的体系,即使在同一体系中也可能具有不同的时钟频率和数据总线宽度,或集成了不同的
外设和接口。据不完全统计,目前全世界嵌入式微处理器已经超过1000多种,体系结构有30多个系列,其中主流的体系
有ARM、MIPS、 PowerPC、X86和SH等。但与全球PC市场不同的是,没有一种嵌入式微处理器可以主导市场,
仅以32位的产品而言,就有100种以上的嵌入式微处理器。嵌入式微处理器的选择是根据具体的应用而决定的。
 (2)存储器 嵌入式系统需要存储器来存放和执行代码。嵌入式系统的存储器包含Cache、主存和辅助存储器, 其存储结构如图1-2所
[嵌入式系统的存储结构]
嵌入式系统的存储结构示。 1>Cache
 Cache是一种容量小、速度快的存储器阵列它位于主存和嵌入式微处理器内核之间,存放的是最近一段时间微处理器
使用最多的程序代码和数据。 在需要进行数据读取操作时,微处理器尽可能的从Cache中读取数据,而不是从主存中读取,这样就大大改善了系统
的性能,提高了微处理器和主存之间的数据传输速率。Cache的主要目标就是:减小存储器(如主存和辅助存储器)
给微处理器内核造成的存储器访问瓶颈,使处理速度更快,实时性更强。
在嵌入式系统中Cache全部集成在嵌入式微处理器内,可分为数据Cache、指令Cache或混合Cache,Cache的大小
依不同处理器而定。一般中高档的嵌入式微处理器才会把Cache集成进去。
2>主存
 主存是嵌入式微处理器能直接访问的寄存器,用来存放系统和用户的程序及数据。它可以位于微处理器的内部或外部,
其容量为256KB~1GB,根据具体的应用而定,一般片内存储器容量小,速度快,片外存储器容量大。 
常用作主存的存储器有:
ROM类 NOR Flash、EPROM和PROM等。
RAM类 SRAM、DRAM和SDRAM等。
其中NOR Flash 凭借其可擦写次数多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。
3>辅助存储器
 辅助存储器用来存放大数据量的程序代码或信息,它的容量大、但读取速度与主存相比就慢的很多,用来长期保存用户
的信息。 嵌入式系统中常用的外存有:硬盘、NAND Flash、CF卡、MMC和SD卡等。
 (3)通用设备接口和I/O接口 嵌入式系统和外界交互需要一定形式的通用设备接口,如A/D、D/A、I/O等,外设通过和片外其他设备的或传感器的
连接来实现微处理器的输入/输出功能。每个外设通常都只有单一的功能,它可以在芯片外也可以内置芯片中。外设的
种类很多,可从一个简单的串行通信设备到非常复杂的802.11无线设备。
目前嵌入式系统中常用的通用设备接口有A/D(模/数转换接口)、D/A(数/模转换接口),I/O接口有RS-232接口
(串行通信接口)、Ethernet(以太网接口)、USB(通用串行总线接口)、音频接口、VGA视频输出接口、 I2C
(现场总线)、SPI(串行外围设备接口)和IrDA(红外线接口)等。
  2)中间层   硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包
(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,
上层软件开发人员无需关心底层硬件的具体情况,根据 BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的
初始化、数据的输入/输出操作和硬件设备的配置功能。BSP具有以下两个特点。 硬件相关性: 因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软 件与硬件平台之间的接口,BSP需要为操作系统提供
操作和控制具体硬件的方法。
 操作系统相关性: 不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。
实际上,BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。
设计一个完整的BSP需要完成两部分工作:嵌入式系统的硬件初始化以及BSP功能,设计硬件相关的设备驱动。
 (1)嵌入式系统硬件初始化 系统初始化过程可以分为3个主要环节,按照自底向上、从硬件到软件的次序依次为:片级初始化、板级初始化和系统
级初始化。
片级初始化
完成嵌入式微处理器的初始化,包括设置嵌入式微处理器的核心寄存器和控制寄存器、嵌入式微处理器核心工作模式
和嵌入式微处理器的局部总线模式等。片级初始化把嵌入式微处理器从上电时的默认状态逐步设置成系统所要求的
工作状态。这是一个纯硬件的初始化过程。
板级初始化
完成嵌入式微处理器以外的其他硬件设备的初始化。另外,还需设置某些软件的数据结构和参数,为随后的系统级
初始化和应用程序的运行建立硬件和软件环境。这是一个同时包含软硬件两部分在内的初始化过程。
系统初始化
该初始化过程以软件初始化为主,主要进行操作系统的初始化。BSP将对嵌入式微处理器的控制权转交给嵌入式
操作系统,由操作系统完成余下的初始化操作,包含加载和初始化与硬件无关的设备驱动程序,建立系统内存区,
加载并初始化其他系统软件模块,如网络系统、文件系统等。最后,操作系统创建应用程序环境,并将控制权交给应用
程序的入口。 (2)硬件相关的设备驱动程序 BSP的另一个主要功能是硬件相关的设备驱动。硬件相关的设备驱动程序的初始化通常是一个从高到低的过程。
尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中
由BSP将他们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件
设备的操作。与硬件相关的驱动程序是BSP设计与开发中另一个非常关键的环节。  3)系统软件层 系统软件层由实时多任务操作系统(Real-time Operation System,RTOS)、文件系统、图形用户接口
(Graphic User Interface,GUI)、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。 (1)嵌入式操作系统
嵌入式操作系统(Embedded Operation System,EOS)是一种用途广泛的系统软件,过去它主要应用与
工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。
它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的
EOS产品系列。随着 Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向
高专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性
等方面具有较为突出的特点。EOS是相对于一般操作系统而言的,它除具有了一般操作系统最基本的功能,如任务调度、
同步机制、中断处理、文件处理等外,还有以下
[编辑本段]
 4)应用软件层 
 应用软件层是由基于实时系统开发的应用程序组成,用来实现对被控对象的控制功能。功能层是要面对被控对象和用户,
为方面用户操作,往往需要提供一个友好的人机界面。
对于一些复杂的系统,在系统设计的初期阶段就要对系统的需求进行分析,确定系统的功能,然后将系统的功能映射
到整个系统的硬件、软件和执行装置的设计过程中,称为系统的功能实现。 
 LINUX操作系统的内核
http://club.renren.com/index.php?uri=/show_131_30200_1.html
  从技术上说,Linux就是一个内核。内核指的是一个提供硬件抽象层、磁盘及文件系统控制、
多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统
叫作Linux操作系统,或者GNU/Linux。   

LINUX操作系统内核历史

操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,包括外围设备、处理器、内存、硬盘和其他的电子设备组成。但是没有软件来操作和控制它,它自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为内核。Linux内核的主要模块分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

LINUX内核结构

1、Linux操作系统结构 

现在让我们从一个比较高的高度来审视GNU/Linux操作系统的体系结构。我们可以从两个层次上来考虑操作系统,如图2.2所示。

图 2.2 GNU/Linux 操作系统的基本体系结构

 实际上,体系结构可能并不像图2.2所示的那么清晰。例如,处理系统调用(从用户空间切换到内核空间)的机制可能在各个体系结构上都不相同。 

 最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核位于这里。

GNU C Library(glibc)也在这里。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。 

Linux 内核可以进一步划分成3层。最上面是系统调用接口,它实现了一些基本的功能,例如read和write。系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。这些代码是Linux所支持的所有处理器体系结构所通用的。在这些代码之下是依赖于体系结构的代码,构成了通常称为 BSP(Board Support Package)的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。

2、Linux 内核的主要子系统

Linux内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。现在使用图2.3中的分类说明 Linux 内核的主要组件。

图 2.3  Linux 内核的一个体系结构透视图

系统调用接口(SCI)

SCI层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI实际上是一个非常有用的函数调用多路复用和多路分解服务。

进程管理

进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。在用户空间,通常使用进程这个术语,不过Linux实现并没有区分这两个概念(进程和线程)。内核通过SCI提供了一个应用程序编程接口(API)来创建一个新进程(fork、 exec 或 Portable Operating System Interface [POSIX] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSIX 机制)。

进程管理还包括处理活动进程之间共享CPU的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争CPU,这种算法都可以在固定时间内进行操作。这种算法就称为O(1)调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。O(1)调度程序也可以支持多处理器(称为对称多处理器或MP)。

内存管理

内核管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页的方式进行管理的(对于大部分体系结构来说都是4KB)。Linux包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。

不过内存管理要管理的不止4KB 缓冲区。Linux提供了对4KB缓冲区的抽象,例如slab分配器。这种内存管理模式使用4KB缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。

为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。

虚拟文件系统

虚拟文件系统(VFS)是Linux内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS在SCI和内核所支持的文件系统之间提供了一个交换层(请参看图2.4)。

图2.4 VFS在用户和文件系统之间提供了一个交换层

 在VFS上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统的插件。文件系统的源代码可以在./linux/fs 中找到。

文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。

网络堆栈

网络堆栈在设计上遵循模拟协议本身的分层体系结构。回想一下,Internet Protocol(IP)是传输协议(通常称为传输控制协议或TCP)下面的核心网络层协议。TCP上面是socket层,它是通过SCI进行调用的。

socket 层是网络子系统的标准API,它为各种网络协议提供了一个用户接口。从原始帧访问到IP协议数据单元(PDU),再到TCP和 User Datagram Protocol (UDP),socket层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。

设备驱动程序

Linux内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。Linux源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如Bluetooth、I2C、serial等。

依赖体系结构的代码

尽管Linux很大程度上独立于所运行的体系结构,但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。./linux/arch 子目录定义了内核源代码中依赖于体系结构的部分,其中包含了各种特定于体系结构的子目录(共同组成了BSP)。对于一个典型的桌面系统来说,使用的是i386目录。每个体系结构子目录都包含了很多其他子目录,每个子目录都关注内核中的一个特定方面,例如引导、内核、内存管理等。

3、Linux内核的一些有用特性

如果Linux内核的可移植性和效率还不够好,Linux 还提供了其他一些特性,它们无法划分到上面的分类中。

作为一个生产操作系统和开源软件,Linux是测试新协议及其增强的良好平台。Linux支持大量网络协议,包括常见的TCP/IP,以及高速网络的扩展(大于1GbE和10GbE)。Linux也可以支持诸如流控制传输协议(SCTP)之类的协议,它提供了很多比TCP更高级的特性(是传输层协议的接替者)。

Linux还是一个动态内核,支持动态添加或删除软件组件。被称为动态可加载内核模块,它们可以在引导时根据需要(当前特定设备需要这个模块)或在任何时候由用户插入。

Linux 最新的一个增强是可以用作其他操作系统的操作系统(称为系统管理程序)。最近,对内核进行了修改,称为基于内核的虚拟机(KVM)。这个修改为用户空间启用了一个新的接口,它可以允许其他操作系统在启用了 KVM 的内核之上运行。除了运行 Linux 的其他实例之外, Microsoft Windows也可以进行虚拟化。惟一的限制是底层处理器必须支持新的虚拟化指令
嵌入式应用的多样化主要体现在嵌入式设备主控芯片 和外围设备的多样化,目前,嵌入式设备的主控芯片类型包括四类:微控制器 、嵌入式处理器DSP 处理器和片上系统SOC。嵌入式外围设备种类繁多,而且不同的嵌入式应用有不同的外挂设备,为了支持这些不同的外挂设备就必须有这些不同设备的板级支持包BSP (board support package).
根据其现状,嵌入式处理器可以分成下面几类:

  ◆嵌入式微处理器(MICRO Processor Unit,MPU)

  嵌入式微处理器是由通用计算机中的CPU 演变而来的。它的特征是具有32位以上的处理器,具有较高的性能,当然其价格也相应较高。但与计算机处理器不同的是,在实际嵌入式应用中,只保留和嵌入式应用紧密相关的功能硬件,去除其他的冗余功能部分,这样就以最低的功耗和资源实现嵌入式应用的特殊要求。和工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。目前主要的嵌入式处理器类型有Am186/88、386EX、SC-400、POWER PC、68000 、MIPS、ARM/ StrongARM系列等。

  其中Arm/StrongArm是专为手持设备开发的嵌入式微处理器,属于中档的价位。

  ◆嵌入式微控制器 (MICRO controller Unit, MCU)

  嵌入式微控制器的典型代表是单片机,从70年代末单片机出现到今天,虽然已经经过了20多年的历史,但这种8位的电子 器件目前在嵌入式设备中仍然有着极其广泛的应用。单片机芯 片内部集成ROM/EPROM、RAM、总线 、总线逻辑、定时/计数器 、看门狗、I/O、串行口、脉宽调制输出、A/D、D/A、Flash RAM、EEPROM 等各种必要功能和外设。和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的主流。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制器。

  由于MCU低廉的价格,优良的功能,所以拥有的品种和数量最多,比较有代表性的包括8051、MCS-251、 MCS-96/196/296、P51XA、C166/167、68K系列以及 MCU 8XC930/931、C540、C541,并且有支持I2C、CAN-Bus、LCD 及众多专用MCU和兼容系列。目前MCU占嵌入式系统约70%的市场份额。近来Atmel出产的Avr单片机由于其集成了FPGA等器件,所以具有很高的性价比,势必将推动单片机获得更高的发展。

  ◆嵌入式DSP处理器(Embedded Digital Signal Processor, EDSP)

  DSP处理器是专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,具有很高的编译效率和指令的执行速度。在数字滤波、FFT、谱分析等各种仪器 上DSP获得了大规模的应用。

  DSP的理论算法在70年代就已经出现,但是由于专门的DSP处理器还未出现,所以这种理论算法只能通过MPU等由分立元件实现。MPU较低的处理速度无法满足DSP的算法要求,其应用领域仅仅局限于一些尖端的高科技领域。随着大规模集成电路 技术发展,1982年世界上诞生了首枚DSP芯片 。其运算速度比MPU快了几十倍,在语音合成和编码解码器中得到了广泛应用。至80年代中期,随着CMOS技术的进步与发展,第二代基于CMOS工艺的 DSP芯片应运而生,其存储容量和运算速度都得到成倍提高,成为语音处理、图像硬件处理技术的基础。到80年代后期,DSP的运算速度进一步提高,应用领域也从上述范围扩大到了通信和计算机方面。90年代后,DSP发展到了第五代产品,集成度更高,使用范围也更加广阔。

  目前最为广泛应用的是TI的TMS320C2000 /C5000系列,另外如Intel的MCS-296和Siemens的TriCore也有各自的应用范围。

  ◆嵌入式片上系统(System On Chip)

  SoC追求产品系统最大包容的集成器件,是目前嵌入式应用领域的热门话题之一。SOC最大的特点是成功实现了软硬件无缝结合,直接在处理器片内嵌入操作系统的代码模块。而且SOC具有极高的综合性,在一个硅片内部运用VHDL等硬件描述语言,实现一个复杂的系统。用户不需要再像传统的系统设计一样,绘制庞大复杂的电路 板,一点点的连接焊制,只需要使用精确的语言,综合时序设计直接在器件库中调用各种通用处理器的标准,然后通过仿真之后就可以直接交付芯片厂商进行生产。由于绝大部分系统构件都是在系统内部,整个系统就特别简洁,不仅减小了系统的体积和功耗,而且提高了系统的可靠性,提高了设计生产效率。

http://www.weeqoo.com/zhuanti/qianrushi/

1.

目录
简介
管脚功能
操作控制
字符集
指令集

http://www.avrw.com/Forum/showtopic-126274.aspx

2.

如何学习嵌入式系统(基于ARM平台)

http://www.avrw.com/Forum/showtopic-126274.aspx
3.
嵌入式系统开发人员的知识结构
嵌入式系统无疑是当前最热门、最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高。特别是随着消费家电的智能化,嵌入式更显重要。比如手机、PDA、电子字典、可视电话、 VCD/DVD/MP3播放器、数码相机(DC)、数码摄像机(DV)、U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。

嵌入式系统是软硬件结合的产物,因此,从事嵌入式开发的人有两类。

一类是学电子工程、通信工程等偏硬件专业的,他们主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件,如BootLoader、Board Support Package(像PC的BIOS一样,往下驱动硬件,往上支持操作系统)、最初级的硬件驱动程序等。他们的优势是对硬件原理非常清楚,更擅长定义各种硬件接口,但对复杂软件系统往往力不从心(例如嵌入式操作系统原理和复杂应用软件等)。

另一类是学软件、计算机专业的,主要从事嵌入式操作系统和应用软件的开发。如果学软件的人对硬件原理和接口有较好的掌握,他们完全也能写BSP和硬件驱动程序。嵌入式硬件设计完后,各种功能就全靠软件来实现了。嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作。目前国内很多嵌入式系统公司都将稍复杂的硬件设计外包给我国台湾或国外公司设计,自己只负责开发软件,因为嵌入式产品的差异很大程度在软件上。因为越是智能设备,越是复杂系统,软件起的作用越关键,这是趋势。

因此,未来嵌入式开发人员的知识结构应该包括:

1.嵌入式微处理器结构与应用

这是嵌入式硬件基础课程,以取代传统的“微机原理与接口”课程(目前国内已有少部分高校IT专业这样做了,因为讲x86微机原理与接口很难找到实际用处,只为教学而已)。嵌入式是软硬件结合的技术,搞嵌入式软件的人应充分了解ARM处理器工作原理和接口技术,包括ARM的汇编指令系统。若不了解处理器原理,怎么能控制硬件工作?怎么能写出节省内存又运行高速的最优代码(嵌入式软件设计特别讲究时空效率)?怎么能写出驱动程序(驱动程序都是与硬件打交道的)?很多公司招聘嵌入式软件人员时都要求熟悉ARM处理器。将来想从事嵌入式软件开发,公司都会给你一本该设备的硬件规格说明书,你必须能看懂其中的内存分布和端口使用等最基本的说明(就像x86汇编一样),否则怎么设计软件?

有些学员觉得嵌入式处理器课程较枯燥,这主要是硬件课程都较抽象的原因,必须在嵌入式实验室做了一些实验后才会觉得它看得见摸得着。还有的人对ARM汇编不感兴趣,以为嵌入式开发用C语言就足够了。其实不应仅将汇编语言当成一个程序设计语言,学汇编主要是为了掌握处理器工作原理。一个不熟悉汇编语言的人,怎么能为该处理器写出最优的C语言代码呢?在嵌入式开发的一些关键部分,有时还必须写汇编,如Bootloader等(可能还包括BSP)。特别是在对速度有极高要求的场合(如DSP处理器的高速图像采集和图像解压缩),目前主要还要靠汇编程序。当你在一个嵌入式公司工作,查看描述原理的手册时,可能很多都是用汇编描述的,这是因为很多硬件设计人员只会写或者喜欢用汇编描述,此时您就必须看懂汇编程序,否则软硬件人员可能就无法交流。

目前嵌入式处理器常见的有ARM、PowerPC、MIPS、Motorola 68K、ColdFire(冷火)等,但ARM占据了绝对主流位置(手机几乎都是使用ARM处理器)。ARM是一个只卖知识产权的公司,目前获得购买了 ARM CPU核授权许可的大公司很多,包括英特尔、三星、贝尔-阿尔卡特、摩托罗拉、飞利浦等,它们都在ARM CPU核的基础上进行了一些外围扩展,形成自己的处理器(如SamsungS3C2410、Motorola i.MXL9328等处理器都是采用ARM 9内核,指令一级是相同的)。而众多中小公司又购买了这些处理器,设计了各种各样的开发板,如华恒等国内很多著名嵌入式公司都生产基于Samsung S3C2410的开发板,供最终用户使用或供教学实验。

英特尔早期生产低端ARM(Strong ARM,相当于ARM 7),现在转向生产高端ARM(即Intel Xscale处理器,相当于ARM 10,主要用在高端PDA上,如惠普和戴尔生产的PDA都采用Intel Xscale)。目前应用最多的是ARM 7和ARM 9两类处理器。ARM 7较便宜,可运行uclinux(是一个不支持高级内存管理功能的嵌入式Linux系统)、Vxworks、ucOS/II等实时操作系统,但因处理器不带内存管理单元MMU(无内存分页和地址映射机制,不能使用虚拟内存),所以不能运行WinCE,另外通用Linux中的某些内存管理功能也不能用在 ARM 7上。ARM 9是一个带MMU功能的高端处理器,可运行WinCE或通用Linux的大多数功能。现在一般高校正在建设的嵌入式实验室大多包括ARM 7系统(采用Samsung S3C44b0x开发板,主要用于嵌入式处理器结构、嵌入式Linux课程实验)和ARM 9系统(采用Samsung S3C2410x开发板,主要用于WinCE课程建设),每套实验板都配了高速仿真器。

2.嵌入式操作系统

除了WinCE的实时性稍差外,大多数嵌入式操作系统的实时性都很强,所以也被称为实时操作系统(Real TimeOperating System,简称RTOS)。从事嵌入式的人必须至少掌握一种嵌入式操作系统(当然掌握两种更好),这在嵌入式的所有技术中是最为关键的。目前最重要的 RTOS主要包括:

    传统的经典RTOS:最主要的便是Vxworks操作系统,以及Tornado开发平台。Vxworks因出现稍早,实时性很强(可在1ms内响应外部事件请求),并且内核可极微(最小8K),可靠性较高,所以在北美,Vxworks占据了嵌入式系统的半壁江山。特别是在通信设备等实时性要求较高的系统中,RTOS几乎非Vxworks莫属。Vxworks的很多概念和技术都和Linux很类似,主要是C语言开发。贝尔-阿尔卡特、朗讯、华为等通信企业在开发产品时,大都会选用Vxworks。但因为Vxworks价格很高,所以一些小公司或小产品往往用不起它。目前很多公司都在往嵌入式 Linux转(比如华为)。但无论如何,Vxworks的地位在很长一段时间内仍是不可动摇的。与Vxworks类似的稍有名的RTOS还有pSOS、 QNX、Nucleus等。

嵌入式Linux操作系统:Linux除可以作为服务器操作系统外,最成功的便是在嵌入式领域的应用,原因当然是免费、开源、支持软件多、拥护者众。这样嵌入式产品成本会很低。Linux本身不是一个为嵌入式设计的操作系统,它不是微内核的,并且实时性不强。目前应用在嵌入式领域的Linux系统主要有两类:一类是专为嵌入式设计的已被裁减过的Linux系统,最常用的是uClinux(不带MMU功能),它占据了较大的应用份额,可在ARM7上运行;另一类是运行在ARM 9上的,一般是将Linux 2.4.18内核移植在其上,可使用更多的Linux功能(当然uClinux更能在ARM 9上跑)。很多人预测,嵌入式Linux将占嵌入式操作系统的50%以上份额。缺点是熟悉Linux的人太少,开发难度稍大。另外,目前我们发现很多教材以及很多大学都以ucOS/II为教学用实时操作系统,这主要是由于ucOS/II较简单,且开源,非常适合入门者学习实时操作系统原理。但由于 ucOS/II功能有限,实用性略为逊色。熟悉了Linux开发,不仅在嵌入式领域有用,对开发Linux应用软件,对加深操作系统的认识也有帮助,可谓一举多得。据悉,目前英特尔、飞利浦都在搞ARM+Linux的嵌入式开发,富士通则是在自己的处理器上进行Linux开发。

目前在嵌入式Linux领域,三类人才很稀缺:能将Linux移植到某个新型号的开发版上的人、能写Linux驱动程序的人,以及熟悉Linux内核裁减和优化的。

Windows CE嵌入式操作系统:微软也看准了嵌入式的巨大市场,WinCE出来只有几年时间,但目前已占据了很大市场份额,特别是在PDA、手机、显示仪表等界面要求较高或者要求快速开发的场合。WinCE目前主要为4.2版(.net),开发平台主要为WinCE Platform Builder,有时也用EVC环境开发一些较上层的应用。由于WinCE开发都是在大家熟悉的VC++环境下,所以对学过Windows程序设计的人来说都不会有太大难度,这也是WinCE容易被人们接受的原因——熟悉开发环境、微软的强大技术支持、开发难度远低于嵌入式Linux。对于急于完成开发、不想拿嵌入式Linux冒险的开发场合,WinCE是最合适了。

根据不同的侧重点,WinCE还有两个特殊版本,一个是MS PocketPC操作系统,它专用于PDA(掌上电脑)上,另一个是MS SmartPhone操作系统,用于智能手机上(带PDA功能的手机)。两者也都属于WinCE平台。在PDA和手机市场上,除WinCE外,著名的 PDA嵌入式操作系统还有Palm OS、Symbian等。在WinCE的强劲冲击下,Palm和Symbian还能有多大生命力?有些高校开设专门的“Windows CE嵌入式操作系统”课程,主要是基于以下原因:本身已开设了Windows程序设计课程,同学学过VC++后再学WinCE,非常方便自然,通过学习 WinCE同样也可了解嵌入式软件的一般开发过程。很显然,嵌入式Linux永远不可能替代WinCE,而且将来谁能占据更大份额,还很难讲。毕竟很多人更愿意接受MS的平台,就像各国政府都在大力推广Linux应用,而且已持续很长时间,但如今真正在PC机上使用Linux的用户并没有占太大的比例。目前,在嵌入式平台上,Linux是叫得最响的操作系统,但其实还是WinCE实际应用得更多。

总之,在选择使用哪类嵌入式操作系统的问题上,你要根据自己的能力和期望来具体情况具体分析。若你觉得自己功底较深且能钻研下去,则可去学嵌入式Linux;若你觉得自己VC++功底较好,且希望短平快地学习嵌入式开发,则WinCE是最好的选择。

3.嵌入式开发的其他相关软件技术

搞嵌入式若能熟悉嵌入式应用的一些主要领域,这样的人更受企业欢迎。主要的相关领域包括:

数字图像压缩技术:这是嵌入式最重要、最热门的应用领域之一,主要应掌握MPEG编解码算法和技术,如DVD、MP3、PDA、高精电视、机顶盒等都涉及MPEG高速解码问题。

通信协议及编程技术:这包括传统的TCP/IP协议和热门的无线通信协议。首先,大多数嵌入式设备都要连入局域网或Internet,所以必须要掌握 TCP/IP协议及其编程,这些都是基本技术;其次,无线通信是目前的大趋势,所以掌握无线通信协议及编程也很重要。无线通信协议包括无线局域网通信协议 802.11系列、Bluetooth(蓝牙),以及移动通信(如GPRS、GSM、CDMA等)。

网络与信息安全技术:如加密技术、数字证书CA等。

DSP技术:DSP(Digital Signal Process数字信号处理)处理器通过硬件实现数字信号处理算法,如高速数据采集、压缩、解压缩、通信等。数字信号处理是电子、通信等硬件专业的课程,搞软件的人若能了解一些相关知识就更好了。目前DSP人才较为缺乏。如果你具有信号与系统、数字信号处理等课程的基础,则对于学习MPEG编解码原理有很大帮助。

4.嵌入式开发的相关硬件基础

对于软件工程专业的人来说,从事嵌入式软件开发,数字电路、计算机组成原理、嵌入式微处理器结构等硬件课程都是非常重要的。另外,汇编语言、C/C++、数据结构和算法,特别是操作系统等软件基础课也十分重要。学习这些内容的主要目的是为了能看懂硬件工作原理,所以重点还是应放在嵌入式软件,特别是操作系统级软件上。

如果是电子、通信类专业的人,有较好的模拟电路和单片机基础,则学习嵌入式非常合适。嵌入式本身就是从单片机发展过来的,只是单片机不带OS,而现在很多嵌入式应用越来越复杂,以至不得不引入嵌入式操作系统。另外,为追求更高速的信号处理速度,现在在一些速度要求较高的场合,有不少公司是将一些DSP算法,如MPEG压缩解压缩算法等用硬件来实现,这就涉及到HDL数字电路设计技术及其FPGA/IP核实现技术。

嵌入式的迷人之处在智能手机上得到了充分体现。比如,兼具MP3、英汉词典、可阅读Word文档等功能的最低档的智能手机,其处理器是ARM,OS是MS Smartphone(即WinCE.NET 4.2),简直可作为学习嵌入式课程的产品案例了。有OS的手机果然了得,金山词霸、Word、Excel、Regedit等居然都有 Smartphone版的,PC上的MP3、Doc等文件居然在下载时都可被自动转换成Smartphone格式。完全可用WinCE开发的一些程序将文件下载到自己的手机上。如今,PDA智能手机越来越火爆,而国产的ARM+Linux手机价格也仅为1200元左右。

总之,学习嵌入式研发设计,要么走ARM+WinCE的路,要么走ARM+Linux的路,要么走ARM+VXWORKS的路。每个从事嵌入式系统的人都可选择其中的一条路,条条大路通罗马。
http://embed.eccn.com/tech_260_2009022614540057.htm

嵌入式系统由硬件环境、嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求。硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在不同的硬件平台上有效地运行,是嵌入式系统开发中需要解决的关键问题。解决的方法是在硬件平台和操作系统之间提供硬件相关层来屏蔽这些硬件的差异,给操作系统提供统一的运行环境,这种硬件相关层就是嵌入式系统中的板级支持包 BSP(Board Support Package,简称BSP)。

BSP是嵌入式系统中介于硬件平台和操作系统之间的中间层软件,主要目的是为了屏蔽底层硬件的多样性,根据操作系统的要求完成对硬件的直接操作,向操作系统提供底层硬件信息并最终启动操作系统。BSP具有硬件相关性和操作系统相关性的特点,其主要作用包括:

(1)初始化底层硬件,为操作系统提供底层硬件信息;
        (2)初始化相关硬件设备,主要是存储设备、通信设备;
        (3)检测系统硬件是否正常;
        (4)加载操作系统并启动系统运行。

BSP是相对于操作系统而言的,不同的操作系统有不同定义形式的BSP,要求BSP所实现的功能也有所不同。在嵌入式 Linux系统中,主要是初始化底层硬件并引导操作系统;同时,BSP又是和硬件相关的,还要考虑对硬件的初始化操作。这些初始化操作主要是对CPU、内存、中断等相关的寄存器及协处理器进行正确的配置。在不同的开发阶段,因为核心和文件系统所处的位置不同,BSP所要完成的工作也有所不同:在开发调试阶段,BSP要能够与主机通信并从主机下载核心;在目标产品中,BSP要能够从非易失存储设备中加载核心。


                                                     http://www.embhelp.com/drew/mypage/bsp.htm


BSP 概念解析

 

  Drew在这里按照自己的理解来解释一下BSP ( Board Support Package),仅供参考:

  BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。 BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS。

例如:

VxWorks 中的网卡驱动,首先在config.h中包含该网卡,然后将网卡含网卡的信息的参数放入数组END_TBL_ENTRY endDevTbl [] 中,系统通过函数muxDevLoad( ) 调用这个数组来安装网卡驱动。

而在Linux 中的网卡驱动,是在space.c中声明该网络设备,再把网卡驱动的一些函数加到dev结构中,由函数ether_setup() 来完成网卡驱动的安装。

  纯粹的BSP所包含的内容一般说来是和系统有关的驱动和程序,如网络驱动和系统中网络协议有关,串口驱动和系统下载调试有关等等。离开这些驱动系统就不能正常工作。

  Tornado中BSP的编译和上层应用程序不同,用命令行或直接在Tornado环境下Build,在Tornado下不能跟踪调试。

  用户也可以添加自己的程序到BSP中,但严格来说不应该算BSP.一般来说这种做法不建议。因为一旦操作系统能良好运行于最终的主板硬件后,BSP也就固定了,不需要做任何改动。而用户自己在BSP中的程序还会不断的升级更新,这样势必对BSP有不好的影响,对系统造成影响,同时由于BSP调试编译环境较差,也不利于程序的编译调试。

 

上层程序

Tools - Applications

I/O System

VxWorks Libraries

TCP/IP

 

Wind Kernel

BSP

 

 

SCSI Controllerr

SerialController

ClockTimer

EthernetController

.. ..

硬件

 

 

BSP在嵌入式系统和Windows系统中的不同


  其实运行与PC机上的windows或linux系统也是有BSP的。只是PC机均采用统一的X86体系架构,这样一定操作系统(windows,linux..)的BSP相对x86架构是单一确定的,不需要做任何修改就可以很容易支持OS在x86上正常运行,所以在PC机上谈论 BSP这个概念也没什么意义了。

  而对嵌入式系统来说情况则完全不同,目前市场上多种结构的嵌入式CPU(RISC)并存(PPC,ARM,MIPS....),为了性能的需要,外围设备也会有不同的选择和定义。一个嵌入式操作系统针对不同的CPU,会有不同的BSP,即使同一种CPU,由于外设的一点差别(如外部扩展DRAM的大小,类型改变),BSP相应的部分也不一样。
  所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的。


BSP和PC机主板上的BIOS区别

 

  BSP和PC机主板上的BIOS区别很大,BIOS主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化..)、装入操作系统并调度操作系统向硬件发出的指令,它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。其实是为下载运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。在OS正常运行后,BIOS的作用基本上也就完成了,这就是为什么更改BIOS一定要从新关机开机。

  PC机BIOS的作用更象嵌入式系统中的Bootloader(最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备)。与 Bootloader不同的是BIOS在装载OS系统的同时,还传递一些参数设置(中断端口定义,...),而Bootloader只是简单的装载系统。

  BSP是和操作系统绑在一起运行在主板上的,尽管BSP的开始部分和BIOS所做的工作类似,可是大部分和BIOS不同,作用也完全不同。此外BSP还包含和系统有关的基本驱动(串口,网口...),此外程序员还可以编程修改BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到BSP中。

  而BIOS程序是用户不能更改,编译编程的,只能对参数进行修改设置。更不会包含一些基本的硬件驱动。



BSP在嵌入式开发中的位置和作用

BSP开发处于整个嵌入式开发的前期,是后面系统上应用程序能够正常运行的保证。

大概步骤如下:

1.硬件主板研制,测试。

2.操作系统的选定,BSP编程。

3.上层应用程序的开发。

BSP部分在硬件和操作系统,上层应用程序之间。所以这就要求BSP程序员对硬件,软件和操作系统都要有一定的了解。这样才能做好BSP编程。

熟悉工具方面:电表,示波器,逻辑分析仪。硬件仿真器,仿真调试环境。

语言方面:汇编语言,C语言。


http://hi.baidu.com/%EC%AB%B7%E7%D0%A1%D7%D3/blog/item/021c6d16438d794421a4e9c1.html

 在嵌入式开发过程中,相信各位都时不时听说过BSP,那什么是BSP呢?他又是什么用的呢?
对于一个给定的嵌入式平台,如ARM平台,他们的硬件电路的资源是不尽相同的,要在各种不同的ARM板子上都要跑一个给定的operating system(os),如linux。BSP就是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板上。 BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP 相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS。
通常BSP包是由开发板的公司提供的,它一般包含有一个底层的bootloader,如Das U-Boot,里面实现了少量的设备驱动,如串口,网络等等,用以在加载kernel时用到。它还包括给kernel用的所有的板上设备的驱动程序。有一些供应商BSP甚至还提供了root file system、一个完整的tool chain,用以开发程序、用于系统在运行时的系统配置程序

 

http://student.csdn.net/space.php?uid=885866&do=blog&id=38946

典型的嵌入式系统开发

嵌入式硬件基本结构

嵌入式系统软件体系结构


 

嵌入式系统概述

嵌入式系统的定义为:以应用为中心、以计算机技术为基础、软硬件可裁剪,对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。下面就此定义中的三个特点及一个性质对嵌入式系统进行较为详细的解释。 ...
  • qq_36268392
  • qq_36268392
  • 2016-09-29 22:52:21
  • 189

嵌入式系统概括

定义       IEEE(国际电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置” (原文为:Devices Used to Control,Monitor ...
  • supreme42
  • supreme42
  • 2011-10-19 00:35:36
  • 2099

全面解析《嵌入式程序员应该知道的16个问题》

文章为转载文章,写的很好,和大家分享下,原文连接如下:全面解析《嵌入式程序员应该知道的16个问题》----Sailor_forever分析整理,sailing_9806@163.comhttp://b...
  • u013467442
  • u013467442
  • 2015-07-24 23:58:21
  • 2152

关于嵌入式系统方向 概括

  • 2011年02月18日 19:27
  • 204KB
  • 下载

嵌入式Linux系统开发技术详解-基于ARM 第5章

  • 2009年03月11日 11:43
  • 92KB
  • 下载

一句话概括下spring框架及spring cloud框架主要组件

spring 顶级项目: Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你使用maven dependency引入spring jar包时它就在...
  • qq_24084925
  • qq_24084925
  • 2017-12-19 18:28:28
  • 193

ARM嵌入式系统基础教程

  • 2014年06月29日 15:47
  • 9.29MB
  • 下载

一句话概括各种设计模式

简单工厂
  • JoeySheng
  • JoeySheng
  • 2014-04-13 00:00:13
  • 1203

嵌入式开发—C语言面试题

http://blog.csdn.net/xdx2ct1314/article/details/7358929 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问...
  • wangkaiblog
  • wangkaiblog
  • 2012-07-02 20:33:16
  • 11525

身边的逻辑学——过度概括(1)

过度概括(overgeneralization)
  • tomotayuki
  • tomotayuki
  • 2014-04-10 15:47:31
  • 920
收藏助手
不良信息举报
您举报文章:嵌入式系统概括
举报原因:
原因补充:

(最多只允许输入30个字)