




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章计算机与嵌入式系统基础知识1.1计算机基础知识1.2数制和计算机中的数值表示与处理1.3计算机中的其他信息编码1.4嵌入式系统概述本章小结习题1.1计算机基础知识
电子计算机是以微电子学、数学、系统论为基础的现代高科技综合产物,它已广泛地深入到我们科研、生产和生活的各个角落。本章简要地介绍计算机的系统组成、工作原理、信息在计算机中的表示方法和处理方式。1.1.1引言
电子计算机于1946年在美国宾西法尼亚大学诞生,初期主要用于科学计算,随着科学技术的发展,电子计算机更广泛地应用于过程控制和信息处理等领域。在我们的日常工作和生活中,无处不见它的身影。我们见到的计算机有的以独立的方式存在,如PC机、工作站、小型机等;更多的则是以设备嵌入的方式被应用,如MP4、手机、网络设备、智能家电,甚至导弹、飞行器控制等。美国通用公司早在几年前就宣布,其每年以汽车电子方式销售的计算机的运算能力远远大于以计算机为主业的IBM公司。
嵌入式系统应用是计算机科技发展的重要分支。其天地之广阔,市场之巨大是通用型计算机无法比拟的,所需的专业性人才在可预见的近十年内将供不应求。1.1.2计算机的发展
到目前为止,计算机按实现工艺的发展已经历了四代。
1)第一代——电子管计算机
第一代电子计算机以电子管为逻辑元件,体积大、功耗高、造价高、运算速度慢,编程语言以机器语言和汇编语言为特征,使用不方便,主要应用于科学运算。
在计算机发展的早期阶段,人们认为计算机的主要用途是快速计算,软件编程简单,不存在系统化的设计方法,开发过程也没有任何管理,程序的质量完全依赖于程序员个人的技巧。
2)第二代——晶体管计算机
第二代计算机问世于1954年,由晶体管取代了电子管。与电子管相比,晶体管具有体积小、重量轻、寿命长、效率高、功耗低等特点,并把计算速度从几千次每秒提高到几十万次每秒,编程语言已使用高级语言。
第二代计算机还是主要用于科学与工程计算,使用FORTRAN语言、汇编语言编写程序。在后期出现了操作系统的雏形,对计算机系统资源进行管理,为计算机使用者提供支持。
3)第三代——集成电路计算机
第三代计算机诞生于1964年,由集成电路取代了晶体管。与晶体管相比,集成电路的体积更小,功耗更低,可靠性更高。第三代计算机由于采用了集成电路,体积因此大大缩小,计算速度从几十万次每秒提高到上千万次每秒,价格也不断下降,并广泛地使用高级语言编程。计算机软件发展的第二阶段跨越了从20世纪60年代中期到70年代末期的十余年,多用户系统引入了人机交互的新概念,实时系统能够从多个来源收集、分析和转换数据,从而使得进程的控制和输出的产生以毫秒而不是分钟来进行,在线存储的发展产生了第一代数据库管理系统。这个时期,出现了软件产品和“软件作坊”的概念,设计人员开发程序不再像早期那样只为自己的研究工作需要,而是为了用户更好地使用计算机。人们开始采用“软件工程”的方法来解决“软件危机”问题,操作系统作为系统资源的管理者成为了热门,其代表就是著名的UNIX操作系统。
4)第四代——大规模、超大规模集成电路计算机
第四代计算机是采用大规模集成电路制造的计算机,高度的集成化使得计算机的中央处理器和其他主要功能部件可以集中到同一块集成电路中,这就是人们常说的“微处理器”。第一台微处理器“4004芯片”于1971年由英特尔公司研制成功,这块集成了2300个晶体管的芯片的面积只有4.2×3.2 mm2,功耗处于毫瓦级;如果相同功能的处理器还用20世纪50年代初的电子管来做的话,电路板需要数十平方米,功耗也会以千瓦来计。此后,微处理器的发展如同乘上了高速列车,大约每隔18个月,性能价格比就翻一番。随着计算机技术的不断更新与发展,微型计算机神奇地闯入了人们的生活,现在以低廉的价格就可以获得强大的计算能力。当价格不再是阻拦计算机普及的门槛时,降低计算机的易用性就显得十分重要。由于UNIX操作系统本身的特点,使得其不太适合于运行在个人计算机上,人们迫切需要一种新的平民化的操作系统。微软公司适时地进入了这一领域,将购买来的CP/M演变成为MS-DOS,以至后来的视窗操作系统Windows,并凭借Windows成为个人计算机操作系统领域的主流。应用开发编程环境更为友好,出现了许多面向不同应用的计算机语言系统。目前,计算机的软硬件,尤其是微型计算机还在迅猛发展之中。1.1.3冯·诺伊曼计算机体系结构
冯·诺伊曼(John
Von
Neumann,1903—1957),著名数学家,1903年12月28日生于匈牙利布达佩斯,1957年2月8日在华盛顿因癌症去世。冯·诺伊曼的父亲马克斯是位富有的犹太银行家,母亲也受过良好的教育。冯·诺伊曼1921年进入柏林大学,1923年进入瑞士苏黎世联邦工业大学学习化学,1925年取得化学工程师的资格。1926年春在布达佩斯大学获博士学位。1927年任柏林大学讲师。1929年任汉堡大学讲师。1930年应聘到普林斯顿大学任教,1933年成为新建的普林斯顿高等研究所教授。在第二次世界大战期间移居美国,曾任研制原子弹的顾问,并参加研制计算机。1954年成为美国原子能委员会委员并移居华盛顿。
冯·诺伊曼是20世纪最著名的数学家之一,在数学理论和应用数学方面都有杰出的贡献,但他对人类更杰出的贡献是在电子计算机领域。冯·诺伊曼对世界上第一台电子计算机ENIAC(电子数字积分计算机)的设计提出过建议,1945年3月在与他人共同讨论的基础上起草了EDVAC(电子离散变量自动计算机)设计报告初稿,在这个新方案中,他提出了两个至关重要的设想:存储程序和采用二进制系统。程序预存储使运算自动化,而二进制系统大大简化了电路,使运算速度加快,这对后来计算机的设计有决定性的影响。特别是确定计算机的结构,采用存储程序以及二进制编码等,至今仍为电子计算机设计者所遵循。冯·诺伊曼关于电子计算机的设想奠定了现代电子计算机的计算模式基础,因而被称为现代电子计算机之父。
冯·诺伊曼计算机体系结构的要点有:
●计算机中的信息(程序和数据)以二进制方式表示。
●程序预存储,机器自动执行。
●计算机由运算器、控制器、存储器、输入设备和输出设备五大部分组成。
1.中央处理器(CPU)
中央处理单元(CentralProcessingUnit,CPU)也称为“处理器”,是计算机的核心部件,其重要性好比大脑对于人一样。其主要功能是解释并执行计算机指令,完成数据处理和对计算机其他各部分进行控制。
CPU主要由运算器、控制器、寄存器组和内部总线等构成。其中运算器主要完成诸如加、减、乘、除等算术运算和左右移位、与、或、非等逻辑运算;控制器主要完成机器指令的解析和执行,控制运算器进行相应的运算,控制数据在计算机各组成部分之间传送,控制计算机各组成部分有条不紊地协调工作等;寄存器组是处理器内部的一组存储单元,一般又可分为两类,即数据寄存器(主要用于暂存数据处理过程中的中间结果)和专用寄存器(用于标志系统的状态和设置系统的工作方式等)。CPU内部的这些功能部件通过内部总线互联并构成一个有机的整体。
CPU依靠执行指令来完成计算和对系统进行控制。每款CPU在设计之初就规定了一套与其硬件电路相配合的机器指令。人们将一款CPU所支持的机器指令全集称为这款CPU的“指令系统”,这些机器指令以二进制数据编码方式存在,CPU能够直接译码并执行这些以二进制方式存在的机器指令。人们使用这些指令编程控制计算机的运行,人们编写的用于控制计算机工作的指令序列称为计算机程序,计算机执行程序完成数据的处理。
CPU执行指令的过程大致可分为以下三个阶段:
●取指(Fetch):将待操作的指令码从存储器取到处理器。
●译码(Decode):对指令码进行分析译码。
●执行(Execute):产生指令码对应的操作信号。在CPU中有一个特别用途的寄存器即PC(ProgramCounter,程序计数器),用于指示待取指的内存单元。首先,CPU自动地将PC所指向存储器单元里存放的机器指令码取到CPU中,同时移动PC指向下一条待取指指令码的内存单元(这个过程称为取指);接着,控制器的指令译码电路即对这条指令进行分析(译码);之后,生成这条指令功能对应的控制时序,完成本条指令的功能操作(执行);处理器再对下一条指令递归上述的取指、译码、执行各步骤,CPU依次执行组成程序的各条指令,完成程序描述的功能,如图1-1所示。图1-1处理器执行程序示意图有两个基本参数用于描述CPU的性能:主频和字长。
● CPU主频:也叫时钟频率,单位是MHz(或GHz),用来表示处理器的工作频率。CPU主频很大程度上决定了CPU的运算、处理数据的速度。需要对初学者说明的是,处理器的工作频率并不能完全决定计算机系统的工作性能,计算机系统的性能还与字长、体系结构、设计方法、运行环境等因素相关。
● CPU字长:即运算器的位宽,单位是比特(bit),用于表示CPU一次运算可处理数据的数据位宽度。
2.存储器(Memory)
存储器(Memory)是计算机系统中用来存储程序和数据的信息记忆部件。有了存储器,计算机才有记忆功能,才能正常工作。计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。在处理器控制下,可以向地址指定的存储器单元存入数据(也称为写存储器)或从地址指定存储器单元取出数据(也称为读存储器)。按用途存储器可分为主存储器(内存储器,简称内存)和辅助存储器(外存储器,简称外存)。外存通常是磁性介质或光介质等存储器,能长期保存信息,存储容量大、速度慢,单位容量成本低,掉电后存储的信息不丢失;处理器通过专用的接口电路访问外存数据。内存是指计算机主板上的存储器部件,用来存放当前正在使用的数据和程序,处理器通过系统总线访问内存数据;内存通常用高速半导体器件实现,速度快、单位容量成本高。目前主流的内存多使用随机存储器(RAM)、闪存(Flash)或只读存储器(ROM)实现,RAM存储器掉电后存储的信息会丢失。计算机的存储器通常以字节(Byte)为单位进行组织和编址,处理器通过地址指定访问存储器各单元。1字节由8个1/0存储位(bit)组成。实际应用中,用于描述存储器容量常用的单位有B(Byte)、KB、MB、GB和TB等。其中,1 KB=210B,1 MB=210KB,1 GB=210MB,1 TB=210GB。
3.输入/输出接口与设备(IODevice)
计算机通过执行程序完成信息的处理,这就需要有通道能将程序和待处理的数据送入到计算机中,计算机处理后的结果数据也能够通过某种通道被送出来。这些完成信息进出计算机的专用设备称为输入/输出设备(简称为外设)。常见的外设有键盘、鼠标、显示器、打印机、光驱、硬盘等。外设通常是一些机电装置,它们的信息表示形式种类繁多,而计算机所能接受和处理的信息表示形式只能是高低电平;再者,这些机电设备的速度与处理器的速度差别很大,故而外设在与计算机连接时,一些信号需要进行转换和控制。输入/输出接口是用于外设与计算机之间桥接和匹配的专用部件,通常以集成电路或板卡的形式存在。
在计算机原理中,我们所说的外设主要是指这些输入/输出接口(简称为接口外设),它不特指某一具体的外设物理装置,更具有逻辑原理普遍性。常见的外设接口有并口、串口(RS232、USB、I2C等)、定时器等。1.1.4计算机系统
计算机的物质组成部分称为计算机硬件。计算机硬件是一套复杂的电子、机械组合体,仅有硬件的计算机称为裸机。裸机仅提供了功能强大的躯体,还远不足以完成复杂的信息
(数据)处理,还需要人们通过编程的方式告诉它所要处理的数据、数据的处理方法以及计算机中所有资源(CPU、存储器、外设、任务、文件)的管理方法等,计算机才能按照人们编程预约的工作策略、步骤进行工作。我们将编程方式描述的数据和数据处理方法称为计算机软件。将计算机软件和硬件合称为计算机系统。赋予了软件的计算机才能胜任智能化的工作。计算机软件按照其功能层次分为系统软件和应用软件。系统软件是指那些通用的、基础的计算机资源管理软件和计算机基础功能软件,主要是操作系统软件,如Windows、Linux、mCOS等操作系统,用于管理、协调计算机中的所有资源,包括硬件资源,也包括数据、文件,还包括用于完成数据处理的任务等。通过操作系统的封装,使人与计算机的交互更为友好,各部分的工作更为协调,人们使用计算机更为方便,系统工作效率更高。应用软件则是指那些为解决某一特定问题而编制的用户专用程序和数据,如图书馆管理软件、手机监控程序、数码相机监控程序等。计算机系统的组成参见图1-2。图1-2计算机系统的组成1.1.5计算机的工作过程
电子计算机自诞生到现在,主流计算机的结构仍沿用冯·诺伊曼计算机体系结构。尤其是在微型计算机中,计算机硬件各个部分都是通过总线互联的,这就是所谓的总线结构型计算机。所谓的总线(Bus)就是连接计算机硬件各部件,用于计算机硬件各部件之间信息传输的公共通道。物理上它就是一组公共信号线,可能是一组明线,也可能是一组PCB板上覆铜线。按照其传送信号的用途属性,总线可细分为地址总线(AddressBus,AB)、数据总线(DataBus,DB)和控制总线(ControlBus,CB)三类。●地址总线:专用于在CPU、存储器和I/O端口间传送地址信息的信号线。此类信号线传送的信息总是从CPU到存储器或I/O端口,它是单向信号线。
●数据总线:专用于在CPU、存储器和I/O端口间传送数据信息的信号线。此类信号线传送的信息可以是从CPU到存储器或I/O端口(“写”操作),也可能是从存储器或I/O端口到CPU
(“读”操作),它是双向信号线。●控制总线:专用于CPU与其他部件之间传送控制信息和状态信息的信号线。此类信号线的构成比较复杂,传送的控制、状态信息可以是从CPU到其他部件,也可能是从其他部件到CPU。此类总线中的某些具体的线是单向的(或从CPU到其他部件,或反之),但作为总线来说,它是双向信号线。
从硬件上看,微型计算机就是一个以CPU为核心部件,以三总线为纽带将计算机各部件互联起来的能自动完成数据处理的数字系统,如图1-3所示。图1-3微型计算机的硬件系统结构计算机的工作过程就是处理器执行预存于存储器中的程序,在程序的控制下对数据信息进行加工处理的过程。人们预先要把指挥计算机如何进行操作的指令序列和原始数据(合称为程序)通过输入设备输送到计算机的内存储器中。每一条指令中明确规定了计算机从哪个地址单元取数,进行什么运算,然后送到哪个地址单元中等操作。计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算处理,然后再按地址把结果送到内存中。接下来,再取出第二条指令,在控制器的指挥下完成规定操作,并依次进行下去。1.2数制和计算机中的数值表示与处理
计算机中的所有信息都是以二进制的形式表示的,数值量是计算机中要表示的最基础的信息。数值具有量的概念。在计算机记录和运算的过程中,数值在计算机中的表示方法称为数据。数据不但能表示数值,还能表示其他的信息。实际上,计算机中的所有信息(指令、数值、文本、音像等)都是以二进制数据的形式存在的,所以我们将它们统称为数据。对数值的计算机表示和处理是计算机的基本功能,在此我们仅介绍计算机基础数据——整数数值的表示方法和处理规则;复杂信息数据(如浮点数、音像数据等)在计算机中的表示和处理是编码学等专业课程的内容,事实上它们也是以二进制数据为基础的,我们不在此讨论。
计算机中之所以采用二进制数制,是因为用数字电路的高/低电平易于实现二进制数的表示及运算,并且二进制数通过编码可以表示任何信息。
日常生活和工作中人们习惯使用十进制数制进行数值表示与运算,而计算机又是以二进制为基础的。为此,我们在此仅讨论如下几种数制的数值表示和运算。1.2.1无符号数的十进制、十六进制、二进制表示法与运算
1.十进制数表示法和运算规则
日常生活中,人们习惯使用十进制计数体制。它的基本规则是:
(1)用10个基本符号集{0,1,2,3,4,5,6,7,8,9}中的元素(称为基数)排列表示数据,并依此表示数值。
(2)加法运算时“逢十进一”,减法运算时“借一当十”。
任何一个十进制数N都可以表示为:(1.1)其中,Di为第i位上的基数,10i
为“权位”。例如:
十进制数的加、减运算不再冗述。十进制数是默认的计数体制,十进制数据表示时可以不作特别的标注,也可以用后缀“D”(或“d”)显示标注。如数据123.45,默认为十进制数据,也可以显示表示为123.45D或123.45d等。
2.十六进制数表示法和运算规则
十六进制数的基本规则是:
(1)用16个基本符号集{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}中的元素(称为基数)排列表示数据,并依此表示数值。
(2)加法运算时“逢十六进一”,减法运算时“借一当十六”。
为了与十进制数书写有区别,在十六进制数据的尾部加上H(或h),以标注这是一个十六进制数。如123.45H或123.45h,表示它是一个十六进制的数据。(在本书其他部分用前缀“0x”表示十六进制数据,如123.45H在本书中表示为0x123.45,以符合ARM技术资料的表示习惯。)任何一个十六进制数N都可以表示为:(1.2)其中,Di为第i位上的基数,16i
为“权位”。例如:即1A3.D8H就是十进制数值419.84375的十六进制表示。
例1.1
十六进制数加、减运算:①1DF.Ah+4C.3h;
②1DF.Ah -4C.3h。
3.二进制数表示法和运算规则
二进制数的基本规则是:
(1)用两个基本符号集{0,1}中的元素(称为基数)排列表示数据,并依此表示数值。
(2)加法运算时“逢二进一”,减法运算时“借一当二”。
使用二进制数表示数据时,在二进制数据的尾部加上B
(或b),以标注这是一个二进制数。如101.01B或101.01b,表示它是一个二进制的数据。
任何一个二进制数N都可以表示为:(1.3)其中,Di为第i位上的基数,2i
为“权位”。例如:即101.01B就是十进制数据5.25的二进制表示。
例1.2二进制数加、减运算:①1101.101b+100.1b;
②1011.1b -101.01b。
4.数制之间的转换
同一个数值在不同的数制中有不同的数据表示形式。在此要注意:仅仅是表示的形式不同,而它们的数值含义是相同的。日常生活中,人们习惯使用十进制计数体制,而计算机内使用的是二进制数,同一数值在不同数制中有不同的表示方式,这就需要对二进制数与十进制数进行转换。二进制数的权基数比较小,在表示一个较大的数值时,数据码串比较长,人们识别起来不方便,并且转换成十进制数时项数比较多,转换运算量也较大。二进制数与十六进制数有直接的按位对应转换关系,转换起来极为方便。十六进制数权基数比较大,表示一个较大的数值时,数据码串较短,人对其较易识别,与十进制数转换时运算也比较方便。十六进制数兼顾了二进制数和十进制数的特点,在计算机编程中是一种常用的数据表示方式,也常作为一个理想的中间工具,用于二进制数与十进制数的数据转换。
1)二进制数与十六进制数之间的转换
在数值上24=16,故在二进制数与十六进制数之间进行转换时存在按位的对应关系,转换很方便。二进制数与十六进制数的对应关系见表1-1。十六进制数到二进制数的转换规则:以小数点为参照,分别转换整数部分和小数部分,每1位十六进制数直接转换为4位的二进制数即可。
例1.3将1FA.Ch转换为二进制表示。二进制数到十六进制数的转换规则:以小数点为参照,分别转换整数部分和小数部分,整数部分向左(小数部分向右)每4位二进制数划分为一个转换单元(不足部分补0),将4位二进制数直接转换为1位十六进制数即可。
例1.4将1010110101.011b转换为十六进制表示。
2)二进制数、十六进制数到十进制数的转换此类数据转换只是计算的问题,分别按照公式(1.2)、(1.3)将十六进制数或二进制数展开,再按照十进制数运算法则计算,即可直接计算出相应的十进制数。
例1.5将1FA.Ch转换为十进制表示。备注:从此例可以看到,当一个比较大的二进制数转换为十进制数时,运算起来比较麻烦,如果先将二进制数转换为十六进制数,再从十六进制数转换为十进制数会方便些。即
3)十进制数到二进制数、十六进制数的转换
十进制数到十六进制数、二进制数的转换规则:分别转换整数部分和小数部分,之后合成即可。
(1)整数部分转换时,整数部分除基数取余(向二进制数转换时基数为2,向十六进制数转换时基数为16),对商值继续除基数取余,直至商值等于0,先得到的“余”是整数部分的低位。
(2)小数部分转换时,小数部分乘基数取整(向二进制数转换时基数为2,向十六进制数转换时基数为16),对小数部分继续乘基数取整,直至小数为0,先得到的“整”是小数部分的高位。
例1.7将137.8125转换为二进制数。
解整数部分137到二进制表示的转换见表1-2。小数部分0.8125到二进制表示的转换见表1-3。所以0.8125=0.1101b //小数部分转换完毕因此137.8125=10001001.1101b //转换完毕
例1.8
将137.8125转换为十六进制数。
解整数部分137到十六进制表示的转换见表1-4。所以137=89h //整数部分转换完毕小数部分0.8125到十六进制表示的转换见表1-5。所以0.8125=0.Dh //小数部分转换完毕因此137.8125=89.Dh //转换完毕十六进制数89.Dh转换为二进制数表示,可以直接按位完成转换:分析上例可见,进行十进制数到二进制数的转换时,借助十六进制数方式可以简化转换运算量,尤其转换较大的数据时更为明显。1.2.2带符号数的原码、反码和补码表示
计算机中所有的数值都要表示成二进制编码的形式,而实际应用中的数值是有正负的。那么这些正数、负数在计算机中也要能表示,这就需要编码,通过编码的方式将正负数都能在计算机中表示。我们将编码后在计算机中以二进制形式表示的数据称为“机器数”,将它的值(或信息)含义称为“真值”。编码有多种方案,选择编码方案时既要考虑数据表示的简洁性,也要考虑编码的可处理便捷性。在计算机中常用原码、反码和补码的编码来表示带符号数。数学证明用二进制补码方式表示带符号数时,可用加法器实现减法运算,其加/减运算处理最便捷,也最便于数字电路实现,故在计算机中使用补码表示带符号数。研究原码和反码的目的是更好地探讨补码以及计算某个数的补码。
1.原码
约定:数值x的原码记为[x]原,假设机器(处理器)字长为n位,那么数值x的原码定义如下:(1.4)在原码表示中,用最高位(即2n-1位)表示符号标志,对于正数该位为0,负数则为1,该位也称为“符号位”,其余各位表示这个数的数值,如图1-4所示,其中的S位即为符号位。图1-4符号数的原码位图求某个符号数的原码时,应首先确定目标机器数的字长n,确认该符号数是在可表示的数值范围之内,而后依据正负符号填写符号位(正数S=0,负数S=1),再将该数据的绝对值数值用二进制数表示并填写到数值位中即可。反之,求某个原码的真值时,首先依据符号位(S=0或S=1)填写正负号,再转换出数值位中的数值大小即可。
显见,对于一个n位的二进制数据容器(可以存储n比特二进制数据的存储单元),其可表示的原码数值范围为-(2n-1-1)~2n-1-1。例如,n= 8时,可表示的数值范围为-127~127。数值0有两种表示方式:00000000(+0)和10000000(-0),在该码制中,人们习惯将0用 +0方式表示。
例1.9
n=8时,求[87]原,[-87]原。
解[87]原=01010111b,[-87]原=11010111b。
例1.10
n=8时,分别求[01000101b]原和[11000101b]原的真值。
解[01000101b]原的真值是+69即69,[11000101b]原的真值是-69。
原码表示法直观简单,与真值转换也方便,但在进行加/减运算时需要区分几种情况,如两操作数符号是否相同,是做“加”运算还是“减”运算,哪个数的绝对值大,结果的符号位特别处理等,处理起来比较麻烦,不便于电路实现。
2.反码
约定:数值x的反码记为[x]反,假设机器字长为n位,那么数值x的反码定义如下:(1.5)在反码表示中,同原码一样,用最高位(即2n-1位)表示符号标志,对于正数该位为0,负数则为1,该位也称为“符号位”,其余各位表示这个数的数值。如图1-5所示,其中的S位即为符号位。图1-5符号数的反码位图公式(1.5)看起来比较复杂,实际转换时是比较简单的。求某个符号数的反码时,对于正数,其反码表示与原码完全一样;而负数的反码则是在求出原码的基础上,将“数值位”中的各位按比特取反即得。显见,对于一个n位的二进制数据容器,其可表示的反码数值范围为-(2n-1-1)~2n-1-1。例如,n=8时,可表示的数值范围为 -127~127。数值0有两种表示方式:00000000(+0)和11111111(-0),在该码制中,人们习惯将0用+0方式表示。
例1.11n=8时,分别求87和 -87的反码。
解
87的反码:[87]反
=01010111b。
-87的反码:先求 [-87]原
=11010111b,再求 [-87]反
=10101000b。
求反码的真值运算也很简单,首先依据符号位(S=0或S=1)填写正负号,如果是正数(S=0),则直接按原码算法求出其真值;如果是负数(S=1),则先将数值位按位取反,如此就得到了该数据的原码,再按原码求出其真值,加上符号即得。
例1.12n=8时,分别求 [01000101b]反和 [11000101b]反 的真值。
解①[01000101b]反的最高码位是“0”,表明它的真值是正数,计算余下的7位数据值是69,那么 [01000101b]反的真值就是 +69,即69。
②[11000101b]反的最高码位是“1”,表明它的真值是负数,先将数值位按位取反求出它的原码 [10111010b]原,再求出该原码的真值 -58,即得 [11000101b]反的真值是-58。
3.补码
约定:数值x的补码记为[x]补,假设机器字长为n位,则数值x的补码定义如下:(1.6)在补码表示中,也同原码和反码一样用最高位(即2n-1位)表示符号标志,对于正数该位为0,负数则为1,该位也称为“符号位”,其余各位表示这个数的数值。如图1-6所示,其中的S位即为符号位。图1-6符号数的补码位图公式(1.6)的数学含义看起来还是比较清晰简单的。对于正数,其补码与原码、反码完全一样,而负数的补码则是2n的模补。可以这样理解:假设数据容器为n位,对于负数x,如果某个数据m加上绝对值 |x| 等于2n
,那么m就是负数 x的补码。这是因为2n表示成二进制数时,由一个1后跟了n个0;如果数据容器只有n位,那么数据2n保存到数据容器时,只保存了n个0,此时数据容器中的结果是0。也就是说,对于负数x,如果某个数据m加上绝对值 |x|等于0,m就是负数x的补码。在实际求某负数的补码运算时,其补码就等于它的反码
加1。
从补码的定义可见,对于一个n位的二进制数据容器,其可表示的补码数据范围为-(2n-1-1)~2n-1-1。例如,n=8时,补码可表示的数据范围为-127~127。
备注:补码中用2n-1(-0)约定为-2n-1
的补码。如n=8时,用10000000表示-128的补码。这是一个边界特例,目的在于充分使用编码空间。这样的话n=8时,补码可表示的数据范围为 -128~127。
例1.13n=8时,分别求出87和 -87的补码。
解87的补码:[87]补
=01010111b。
-87的补码:先求 [-87]原
=11010111b,再求 [-87]反
=10101000b,则有 [-87]补
=10101001b。
求补码m的真值运算也很简单,有算式:[[m]补]补
=[m]原。
例1.14
n=8时,分别求[01000101b]补和[11000101b]补的真值。
解①[01000101b]补 的最高码位是“0”,表明它的真值是正数,计算余下的7位数据值是69,那么 [01000101b]补的真值就是 +69,即69。
②[11000101b]补的最高码位是“1”,表明它的真值是负数,先求出它的原码是[10111011b]原(转换算法:符号位S不变,数值位取反后加1),再求出该原码的真值是 -59,即 [11000101b]补的真值是 -59。对n比特数据容器求某数值x的补码时,可采用下述简单方法(此方法得到数学证明):
(1)若x是正数,它的补码也是原码,方法比较简单,不再举例冗述。
(2)若x是负数,首先求出其绝对值的n比特字长的二进制表示,自右向左扫描该二进制码,将遇到的首个1及之前的0按比特对应保留,之后的各比特按位取反即得。
例1.15
n=8,分别求44和-44的补码。
解①求44的补码:[44]补=[44]原=00101100b。
②求-44的补码:|-44|=44,其8比特的二进制表示为00101100b,按上述原则自右向左扫描该码,在bit2遇到首个1,bit2~bit0按位保留,bit7~bit3按位取反,立即可得-44的补码:[-44]补=11010100b。观察表1-6各bit数据情况,学习负数补码计算,领会补码的含义。1.2.3补码的运算、溢出及其判断方法
CPU在进行数据处理时,不理会数据的具体含义(是符号数、无符号数,还是正数、负数或者是文本、音像数据),仅把数据作为二进制数码来处理,这些数据含义的理解是系统设计人员的职责,即CPU仅是一个可对二进制码数据进行诸如加、减等算术运算和与、或、非、左右移位等逻辑运算的二进制数码处理器。为了简化运算电路,CPU在对数据进行加、减运算时,并不将数据容器中的最高位(S位)当作符号位而特别处理,而是作为普通的二进制数据参与运算。那么就存在一个这样的问题:如何使用CPU进行符号数的表示和运算,使其数值运算后仍保证其正确性。这就需要一种编码体制,使得在这种编码体制中,即使是对有符号数按照普通二进制数加、减运算仍能保证数值的正确性。补码就是一种能满足这种要求的编码方式。这也是我们研究补码的缘由。
1.补码的加法运算
数学证明,在编码长度固定为n的补码值域内,对于符号数x、y,有
[x+y]补
=[x]补+[y]补
即在运算结果值不超出补码可表示的值域范围时,两个符号数之和的补码等于这两个数的补码和,运算结果以补码形式表示。下面仅通过几个例子说明此结论,不做数学证明。
例1.16n=8时,x=25,y=37,分别计算[x+y]补和 [x]补+
[y]补,并对比结果。
解对于长度为8的数据容器,补码方式可表示的值域CPV=[-128,127]。
真值运算后求补:x+y=62∈CPV=[-128,127];[x+y]补=[62]补
=00111110b。
补码运算:[25]补
=00011001b;[37]补
=00100101b。对比两种运算结果有:[25]补+[37]补
=00011001b+00100101b=00111110b= [62]补。结论:补码运算完成时,8 bit数据容器中保留的二进制码00111110b就是 [62]补。
例1.17n=8时,x=-25,y=-37,分别计算 [x+y]补和 [x]补
+[y]补,并对比结果。
解对于长度为8的数据容器,补码方式可表示的值域CPV=[-128,127]。
真值运算后求补:x+y=-62∈CPV=[-128,127];
[-62]补
=11000010b。
补码运算:[-25]补=11100111b;[-37]补=11011011b。运算结束时,最高位的“1”冒出数据容器,8 bit数据容器内的值为11000010b。对比两种运算结果有:[-25]补+ [-37]补=11100111b+11011011b=11000010b=[-62]补。结论:补码运算结束时,8 bit数据容器中保留的二进制码11000010b就是[-62]补。
例1.18n=8时,x=-25,y=37,分别计算 [x+y]补和 [x]补+[y]补,并对比结果。
解对于长度为8的数据容器,补码方式可表示的值域CPV=[-128,127]。
真值运算后求补:x+y=12∈CPV=[-128,127];[12]补
=00001100b。
补码运算:[-25]补=11100111b;[37]补=00100101b。运算结束时,最高位的“1”冒出数据容器,8 bit数据容器内的值为0001100b。对比两种运算结果有:[-25]补
+[37]补
=11100111b+00100101b=00001100b= [12]补。结论:补码运算结束时,8 bit数据容器中保留的二进制码00001100b就是[12]补。请读者试运算n=8时,x=25,y=-37,[x+y]补与 [x]补
+[y]补,并比较容器中的数据情况。
2.补码的减法运算
数学证明,在编码长度固定为n的补码值域内,对于符号数x、y,有
[x-y]补
=[x]补-[y]补
=[x]补
+[-y]补
即在运算结果值不超出补码可表示的值域范围时,两个符号数之差的补码等于这两个数补码的差,等于被减数的补码与减数相反数补码的和,运算结果以补码形式表示。
下面仅通过几个例子说明此结论,不做数学证明。
例1.19n=8时,x=25,y=37,分别计算 [x-y]补、[x]补 - [y]补和[x]补+ [-y]补,并对比结果。
解对于长度为8的数据容器,补码方式可表示的值域CPV=[-128,127]。
真值运算后求补:x-y=-12∈CPV;[-12]补
=11110100b。
补码运算:[25]补=00011001b;[37]补=00100101b;
[-37]补
=11011011b。运算结束时,8bit数据容器中保留的二进制码都是11110100b,即[-12]补。对比两种运算结果有:
[25]补-[37]补
=00011001b-00100101b=11110100b=[-12]补
[25]补+[-37]补
=00011001b+11011011b=11110100b=[-12]补结论:补码运算结束时,8 bit数据容器中保留的二进制码都是11110100b,即[-12]补。
例1.20n=8时,x=-25,y=37,分别计算 [x-y]补、[x]补-[y]补和 [x]补+ [-y]补,并对比结果。
解对于长度为8的数据容器,补码方式可表示的值域CPV=[-128,127]。
真值运算后求补:x-y=-62∈CPV;[-62]补=11000010b。
补码运算:[-25]补
=11100111b;[37]补=00100101b;
[-37]补
=11011011b。运算结束时,8 bit数据容器中保留的二进制码都是11000010b,即[-62]补。对比两种运算结果有:
[-25]补-[37]补
=11100111b-00100101b=11000010b=[-62]补
[-25]补+[-37]补
=11100111b+11011011b=11000010b=[-62]补
结论:补码运算结束时,8 bit数据容器中保留的二进制码都是11000010b,即[-62]补。
可以看出,在补码体制下无论是加、减运算,操作数是正还是负,其结果在补码值域内都是正确的,都有[x-y]补=[x]补-[y]补=[x]补+[-y]补。
3.补码的溢出和判别方法
1)溢出
补码的运算是否在任何情况都是正确的呢?答案是否定的。
例1.21n=8时,x=60,y=70,计算[x]补+[y]补并分析运算结果。
解真值运算有:x+y=130。
补码运算有:[60]补=00111100b;[70]补=01000110b。补码运算的结果10000010b却是数值-126的补码,其真值不等于预期的130。从数值运算的角度看,[60]补+[70]补的运算结果却是[-126]补,显然结果出错了。出现这类现象的原因就是运算结果超出了数据容器所能表示的数值范围。题中n=8,对于8位的数据容器其能表示的补码数值范围为-128~+127,而真值运算x+y=130>127,结果值超出了该范围,故而补码运算出错。运算结果超出了数据容器能表示数值的范围而造成容器数据出错的现象称为溢出。溢出现象在原码和反码中也存在。例如,值运算有127+1=128,而在字长n=8的运算器中,原码运算为 [127]原+[1]原=01111111+00000001=10000000=[-0]原,显然,数值结果也是错误的。其原因也是运算结果超出了字长的表示值域。计算机运算中要避免此类现象的产生,则需要特殊的处理。
2)补码运算溢出的判断方法
从原理上来说,是由于运算结果数值超出了数据容器的表示值域导致了数据溢出。发生运算溢出时,结果数据不可直接使用。但在计算机中并不是(也不能)根据溢出的定义去判断运算是否有溢出,而是通过判断下述进位情况的组合,来判断补码运算是否溢出。假定用DF表示数值位区向符号位S的进位情况,有进位则DF=1,否则DF=0;用CF表示数据容器到容器外的进位情况,有进位则CF=1,否则CF=0,如图1-7所示。图1-7补码运算判断溢出方法运算结果数据是否溢出与CF和DF有以下逻辑关系:当CF异或DF结果为1时,补码运算有溢出,否则补码运算无溢出。该结论已得到数学证明,在此我们仅使用此结论,不做证明。数字电路容易实现OF=CFDF异或运算,计算机中可使用OF位的1/0情况,直接确认补码运算是否有溢出。
OF=CFDF=CF^(~DF)+(~CF)^DF,其真值表见表
1-7,逻辑电路图见图1-8。计算机中使用标志位OF来标志补
码运算是否发生了溢出,OF=1时,补码运算有溢出;OF=0时,补码运算未溢出。图1-8OF=CFDF异或运算逻辑电路
例1.22
n=8时,x=60,y=70,计算 [x]补+[y]补并分析运算溢出情况。
解补码运算有:[60]补=00111100b;[70]补=01000110b。对于长度为8的数据容器,补码方式可表示的值域CPV=[-128,127]。60+70=130,结果值超出了[-128,127]的数据范围,这是运算溢出的根本原因。运算是否溢出与OF是“1”或“0”有必然的对应关系,计算机中判断OF位的“1/0”可以直接得知补码运算的溢出情况。
例1.23n=8时,x=-25,y=-37,计算 [x]补+[y]补并分析运算溢出情况。
解补码运算有:[-25]补=11100111b;[37]补=11011011b。这种判别电路简单,易实现,CPU中也常将OF位作为标志位资源供程序设计者使用。换句话说,程序设计者在进行了补码运算后,直接通过判断OF标志,即可得知补码运算是否溢出的结论,供后续编程使用。1.2.4真值与机器数
任何信息在计算机中都是以二进制数的形式表示的。计算机中的二进制数据称为机器数,机器数所代表的值含义称为该机器数的真值。从广义上说,真值可以是数值,也可以是字符,甚至是语音或图像等。在此,我们仅讨论数值型真值和机器数的对应关系。由前所述可知,同一个机器数在不同的编码体制中具有不同的真值含义。表1-8所示为8bit二进制机器数在原码、反码和补码编码体制中的含义。1.3计算机中的其他信息编码
计算机中的所有信息(指令、数值、文本、音像等)都是以二进制数据的形式表示的,如何使用二进制数据表示不同的信息(字符、数值、音像等),是信息编码研究的问题之一。大千世界中的各种海量信息,其形式和内容很复杂,信息编码学等专业课程专题研究了相关的理论和技术,在此仅讨论计算机常用的BCD编码和ASCII编码两种编码,向大家介绍计算机中编码的基本知识。1.3.1BCD编码
计算机中对信息进行编码时,有两个基本出发点:一是通过编码可以准确地区分不同的信息;二是便于CPU对信息编码数据的处理。在表示自然数时,虽然二进制数就已完全适合,但人们还是习惯于十进制计数方式。为此,人们提出了一种综合了二进制数和十进制数特点的编码方式——BCD编码。BCD编码(BinaryCodedDecimal,二进制编码十进制数)是一种使用二进制数据位表示十进制数据的编码,它使用4 bit的二进制数据位表示1位的十进制数据,并在此基础上,对任意的十进制数据分别对其各位逐位编码。
4 bit的二进制数据位可表示0000b~1111b共计16种编码状态。原则上来说,可以任意选择其中的10个编码来分别表示十进制数的0~9,但为了便于记忆和二进制运算,最常用的还是使用0000b~1001b这10个编码分别代表十进制数的0~9。这种编码方式中的4 bit二进制数,最高位的权值是23=8,次高位的权值是22=4,次低位的权值是21=2,最低位的权值是20=1,任何一个十进制数据位0~9都可表示为bit3×8+bit2×4+bit1
×2+bit0×1;所以这种编码也称为8421 BCD码,简称为8421码或BCD码。十进制数据位0~9对应的BCD编码见表1-9。对于多位的十进制数,逐位编码该十进制数各组成位即可。例如,十进制数据357,其BCD码为0011 0101 0111。对于含有小数部分的十进制数同样处理。例如,十进制数据34.56,其BCD码为00110101.01010110。
BCD编码方式的优点是:以小数点为基准,向左每4 bit二进制位对应一位十进制数整数位,向右每4 bit二进制位对应一位十进制数小数位;二进制位与十进制数有固定的对应关系,便于识别。但其缺点也很明显:①二进制位状态空间利用率低,每4 bit二进制数可以表示16种状态,BCD码只使用了其中的10个;②按照二进制数运算时,需要修正。例如,十进制数运算8+5=13,[8]BCD=1000b,[5]BCD=0101b,[13]BCD=00010011b。但是如果按二进制数计算,1000b+0101b=1101b,显然不是13的BCD码00010011b。按照二进制数运算法则计算BCD码是造成上述结果的原因。4 bit二进制数是一个BCD编码单元,如若按照二进制数运算法则运算BCD编码单元,BCD编码单元中的结果数据有可能是1010、1011、1100、1101、1110或1111,而它们不是BCD编码。因此简单直接的二进制运算不能保证BCD编码运算的正确性,有时需要修正。修正的法则如下:
(1)两个4 bit的BCD码相加,无进位并且结果码不大于1001b,则不需要修正;该4 bit就是相加结果的BCD码。
(2)两个4 bit的BCD码相加,有进位或者结果码大于1001b,则该4 bit需要加0110b修正;修正后得到本单元的结果BCD码。进位计算入高位BCD码段。
因此,两个BCD码数据相加时,首先按照二进制数法则运算,然后再作相应的调整,从而保证运算结果的正确。一些处理器直接提供了这样的专用调整指令,用户可直接使用。
计算机通常按字节(8 bit/字节)组织存储器,如果每一个字节仅存放一个BCD码数据,则这样的BCD码称为非压缩型BCD码。此种方式下,用字节的低4 bit存储BCD码数据,字节的高4 bit总是0000b。为了提高存储器利用率,使用字节的高4 bit和低4 bit分别存放两个BCD码位,称这样表示的BCD码为压缩型BCD码,见图1-9。图1-9非压缩型与压缩型BCD码
例1.24单字节压缩型BCD码分别计算:13+5;27+8;19+28。
真值运算有:13+5=18;27+8=35;19+28=47。
压缩型BCD码计算:1.3.2字符ASCII编码
在计算机应用中除了数值处理之外,还存在大量的非数值信息处理应用。计算机中所有的数据(数值、非数值信息)在存储和运算时,都要使用二进制数表示,也包括a、b、c等26个字母(包括大写)以及0、1、2等数字符,还有一些常用的符号(如 *、#、@ 等)。具体用什么二进制编码表示哪个符号,原则上每个人都可以约定自己的一套(编码)方案,但如果要想做到互相交换信息而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的ASCII编码——美国标准信息交换标准码(AmericanStandardCodeforInformationInterchange,ASCII),统一规定了上述常用符号的二进制数表示方式。
ASCII码起始于20世纪50年代后期,在1967年定案。它最初是由美国国家标准学会制定,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后被国际标准化组织(InternationalOrganizationforStandardization,ISO)定为国际标准,称为ISO646标准。ASCII码使用指定的7位或8位二进制数组合来表示128或256种字符。标准ASCII码也叫基础ASCII码,使用7位二进制数来表示所有的大写和小写字母、数字0~9、标点符号以及在美式英语中使用的特殊控制字符等,如表1-10所示。通过查标准ASCII码表可知标准字符的ASCII编码。例如:字符“A”的ASCII编码为0x41,即01000001b;字符“a”的ASCII编码为0x61,即0110 0001b;字符“5”的ASCII编码为0x35,即00110101b;字符“$”的ASCII编码为0x24,即00100100b等。或反之,通过查该表可知某个ASCII码对应的字符。
表1-10中常用控制字符的含义如表1-11所示。1.4嵌入式系统概述
本节概述嵌入式系统的基本概念、组成和发展状况,简单介绍几个常用的嵌入式操作系统。通过本章的学习,应了解嵌入式系统的组成和应用特点,建立嵌入式系统的基本概念。1.4.1嵌入式系统的基本概念
IEEE对于嵌入式系统(EmbeddedSystem)的定义是:AnEmbeddedSystemisthedevicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants.(嵌入式系统是用于控制、监视或者辅助操作机器和设备的装置)。在中国嵌入式系统领域,比较认同的嵌入式系统的概念是:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。在这里着重强调了嵌入性和专用性。简而言之,嵌入式系统就是嵌入到目标应用系统中、完成特定处理功能的专用计算机系统。
(1)嵌入性:一般包含两方面含义。①本系统是嵌入到另一目标大系统中为完成大系统功能服务的组成部分;②完成特定功能处理的软件代码也嵌入到了目标系统中。
(2)专用性:本系统是专为该目标系统特别设计定制的。
(3)计算机系统:在体系结构和原理组成上,它是计算机系统。
嵌入式系统几乎渗透到了生活、科研、生产中的所有电器设备,如掌上PDA、移动计算设备、数字电视、汽车、微波炉、数码相机、家庭自动化系统、电梯、空调、安全系统等消费电子设备、工业自动化仪表与医疗仪器等。嵌入式系统主要由嵌入式处理器、存储器(Flash、RAM)、嵌入式外围设备、嵌入式操作系统及应用软件等组成,它是可独立工作的“部件”。
嵌入式系统的硬件部分和计算机系统类似,主要包括处理器/微处理器、存储器及外设器件和I/O端口甚至图形控制器等。嵌入式系统也有别于一般的计算机处理系统,它是为完成特定功能而定制的专用计算机系统。尤其是嵌入式外围设备,因应用目标不同更是千差万别。嵌入式系统的处理器和存储系统也随不同的应用而各有特色。例如,许多嵌入式系统不具备硬盘、光盘之类的大容量的免电压存储介质,而大多使用EPROM、EEPROM或闪存(FlashMemory)作为免电压存储介质等。嵌入式系统的软件部分包括嵌入式操作系统软件(更强调实时性和多任务操作)和嵌入式应用程序。
嵌入式操作系统是一个资源管理软件模块的集合,用于管理存储器分配、中断处理、任务间通信与调度、定时器响应等,以及提供多任务处理等功能。嵌入式应用软件是针对特定的实际应用领域,基于相应的嵌入式硬件平台,完成用户预期任务的计算机软件。复杂嵌入式系统的应用软件通常需要嵌入式操作系统的支持,但在简单的应用场合下也可无需操作系统支持,此情况下,所有的软件全部由用户设计编程。嵌入式应用对成本十分敏感,除了精简每个硬件单元的成本外,还应尽可能减少嵌入式应用软件资源消耗。要求嵌入式应用软件不但保证逻辑正确性、时间正确性(这就是所谓的实时性)、准确性、安全性、稳定性,还要尽可能地优化。1.4.2嵌入式处理器的分类与发展概况
1.嵌入式处理器的分类
嵌入式处理器是嵌入式系统的核心,是控制、辅助系统运行的硬件单元。其范围极其广阔,从最初的4位处理器(Intel4004),到目前仍在广泛应用的8位单片机(MCS51、PIC8等),再到最新的受到业界青睐的32位(ARM)、64位嵌入式CPU等。目前世界上具有嵌入式功能特点的处理器已经超过1000种,流行体系结构包括MCU、MPU等30多个系列。鉴于嵌入式系统广阔的发展前景,很多半导体制造商都大规模生产嵌入式处理器,并且许多公司自主设计处理器也已经成为了未来嵌入式领域的一大趋势,其中从单片机、DSP到FPGA有着各式各样的品种,速度越来越快,性能越来越强,资源也越来越丰富,而价格却越来越低。目前嵌入式处理器的寻址空间可以从几KB到数GB,处理速度快的超过2000MIPS,封装从8个引脚到144个引脚不等。根据其现状,嵌入式处理器可以分成下面几类:
1)嵌入式微处理器(EmbeddedMicroprocessorUnit,EMPU)
采用“强固型”通用微处理器用作嵌入式微处理器。由于嵌入式系统通常应用于比较恶劣的环境中,且许多情况下无人值守,因而嵌入式微处理器在工作温度、电磁兼容性以及可靠性方面要求较通用的标准微处理器高许多,而在功能方面嵌入式微处理器与标准的微处理器基本上是一样的。实际应用中,将嵌入式微处理器、主存储器和通用I/O等芯片装配在专门设计的主板上,只保留和嵌入式应用有关的功能硬件,大幅度减小系统的体积和功耗,以最低的功耗和资源实现嵌入式应用的特殊要求。由嵌入式微处理器及其存储器、总线、外设等安装在一块电路主板上可构成一个单板机系统。和工业控制计算机相比,嵌入式微处理器组成的系统具有体积小、重量轻、成本低、可靠性高的优点,但在其电路板上必须包括ROM、RAM、总线接口、各种外设等器件,从而降低了系统的可靠性,技术保密性也较差。嵌入式处理器目前主要有Aml86/88、386EX、SC-400、PowerPC、68000、MIPS、ARM/StrongARM等系列。
2)嵌入式微控制器(MicrocontrollerUnit,MCU)
嵌入式微控制器又称单片机,顾名思义,它将计算机的主要组成部分集成到一块芯片中。嵌入式微控制器通常以某种微处理器内核为核心,根据某些典型的应用,在芯片内部集成了ROM/EPROM/Flash、RAM、总线、总线逻辑、定时/计数器、看门狗(WDT)、I/O、串行口、脉宽调制输出(PWM)、A/D、D/A等各种必要的功能部件和外设,构成一个体系结构完整的计算机系统。为适应不同的应用需求,对功能的设置和外设的配置进行必要的修改和裁剪定制,使得一个系列的单片机具有多种衍生产品,每种衍生产品的处理器内核都相同,不同的是存储器和外设的配置及功能的设置。这样可以使单片机最大限度地和应用需求相匹配,从而减少整个系统的功耗和成本。和嵌入式微处理器相比,微控制器的单片化使应用系统的体积大大减小,从而使功耗和成本大幅度下降、可靠性提高。由于嵌入式微控制器目前在产品的品种和数量上是所有种类嵌入式处理器中最多的,而且上述诸多优点决定了微控制器是嵌入式系统应用的主流,约占嵌入式系统市场份额的70%。
微控制器的片上外设资源一般比较丰富,适合于控制,因此称为微控制器。比较有代表性的通用系列包括MCS51系列、P51XA、MCS-251、MCS-96/196/296、C166/167、68K系列以及种类众多的ARM系列芯片等。
3)嵌入式DSP处理器(EmbeddedDigitalSignalProcessor,EDSP)
在诸如音像、雷达信号等数字信号处理应用中,各种数字信号处理算法相当复杂,一般结构的处理器无法实时完成这些运算。由于DSP处理器在硬件电路对系统结构和指令进行了特殊设计,使其适合于实时地进行数字信号处理。DSP在数字滤波、FFT、谱分析等各种仪器上获得了大规模的应用。DSP应用已从通用处理器以普通指令实现DSP功能,过渡到采用嵌入式DSP处理器。嵌入式DSP处理器比较有代表性的产品是TI的TMS320系列和Motorola的DSP56000系列。TMS320系列处理器包括用于控制的C2000系列、移动通信的C5000系列,以及性能更高的C6000和C8000系列。DSP56000系列目前已经发展成为DSP56000、DSP56100、DSP56200和DSP56300等几个不同子系列的处理器。另外,Philips公司最近也推出了基于可重构嵌入式DSP结构,采用低成本、低功耗技术制造的R.E.A.LDSP处理器,其特点是具备双Harvard结构和双乘/累加单元,应用目标是大批量消费类产品。
4)嵌入式片上系统(SystemOnChip,SOC)
随着EDA技术的发展推广、VLSI设计的普及化,以及半导体工艺的迅速发展,在一块硅片上实现一个复杂的系统已成为可能,这就产生了SOC技术。SOC设计公司将各种处理器内核、嵌入式外设部件甚至特别应用模块等做成标准库,和其他许多嵌入式系统外设一样,成为VLSI设计中一种标准的部件,用户只需定义出其整个应用系统,仿真通过后就可以将设计下载到FPGA实现嵌入式系统(这就是SOC的另一种形式——SOPC(SystemOnProgrammableChip)),或交给半导体工厂制作产品。这样除某些无法集成的器件以外,整个嵌入式系统大部分均可集成到一块或几块芯片中,应用系统电路板将变得很简单,对于减小整个应用系统体积和功耗、提高可靠性非常有利。SOPC也为新产品的开发和小批量生产提供了新的手段和物资支持。
2.嵌入式系统的发展历程与趋势
1971年,Intel公司推出了有史以来第一颗微处理器4004,以其小型、价廉、高可靠性的特点,迅速走出机房,嵌入式系统的概念也随之出现。此时的嵌入式系统比较简单,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论