嵌入式应用程序设计 第一章 嵌入式系统基础
本章课程: 1.1 嵌入式系统概述 1.2 ARM处理器硬件开发平台 1.3 嵌入式软件开发流程 1.4 实验内容—使用JTAG烧写NAND Flash 1.5 小结 1.6 思考与练习
1.1嵌入式系统概述 1.1.1 嵌入式系统的基本概念 1.1.2 嵌入式系统的体系结构 1.1.3 几种常用的嵌入式操作系统 1.1.4 嵌入式系统发展趋势
1.1.1 嵌入式系统的基本概念 嵌入式系统的基本概念 嵌入式系统应用随处可见,工业、军事、宇宙、通信、运 输、金融、医疗、气象、农业等领域 嵌入式系统是以应用为中心,以计算机控制系统为基础, 并且软硬件可裁剪,适用于应用系统对功能、可靠性、成 本、体积、功耗有严格要求的专用计算机系统。 嵌入式系统通常由特定功能模块和计算机控制模块组成, 主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统 以及用户应用软件等部分组成。它具有“嵌入性”、“专 用性”与“计算机系统”的三个基本要素。
1.1.1 嵌入式系统的基本概念 嵌入式系统的特点 (1)面向特定应用的特点,与“通用型”系统相比,满 足特定应用的特定需求 (2)嵌入式系统的硬件和软件都必须进行高效地设计, 量体裁衣、去除冗余,力争在同样的硅片面积上实现更 高的性能 (3)嵌入式系统是将先进的计算机技术、半导体技术和 电子技术与各个行业的具体应用相结合后的产物。
(4)为了提高执行速度和系统可靠性,嵌入式系统中的 软件一般都固化在存储器芯片中或单片机本身,而不是 存储于磁盘中。 (5)嵌入式开发的软件代码尤其要求高质量、高可靠性 。 (6)嵌入式系统本身不具备二次开发能力,即设计完成 后用户通常不能在该平台上直接对程序功能进行修改, 必须有一套开发工具和环境才能进行再次开发。厂家对 产品固件(Firmware)进行升级
1.1.2 嵌入式系统的体系结构 嵌入式系统作为一类特殊的计算机系统,一般包 括以下3个方面:硬件设备、嵌入式操作系统和应 用软件。
1.1.2 嵌入式系统的体系结构 硬件设备包括嵌入式处理器和外围设备。 嵌入式处理器(CPU)是嵌入式系统的核心部分,它与 通用处理器最大的区别在于,嵌入式处理器大多工作在 为特定用户群所专门设计的系统中,它将通用处理器中 许多由板卡完成的任务集成到芯片内部,从而有利于嵌 入式系统在设计时趋于小型化,同时还具有很高的效率 和可靠性。 ARM/PowerPC/MC68000/MIPS等 外围设备是指嵌入式系统中用于完成存储、通信、调试 、显示等辅助功能的其他部件。目前常用的嵌入式外围 设备按功能可以分为存储设备(如RAM、SRAM、Flash 等)、通信设备(如RS-232接口、SPI接口、以太网接口 、USB接口、无线通信等)和显示设备(如显示屏等)3 类。
1.1.2 嵌入式系统的体系结构 嵌入式操作系统不仅具有通用操作系统的一般功 能,如向上提供对用户的接口(如图形界面、库 函数API等),向下提供与硬件设备交互的接口( 硬件驱动程序等),管理复杂的系统资源, 在系统实时性、硬件依赖性、软件固化性以及应 用专用性等方面,具有更加鲜明的特点
1.1.2 嵌入式系统的体系结构 应用软件是针对特定应用领域,基于某一固定的 硬件平台,用来达到用户预期目标的计算机软件 。 由于嵌入式系统自身的特点,嵌入式应用软件在准确性 、实时性、安全性和稳定性等方面要求较高 尽可能地进行代码优化,以减少对系统资源的消耗,降 低硬件成本。
1.1.3 几种常用的嵌入式操作系统 嵌入式Linux(Embedded Linux)是指对标准Linux 经过小型化裁剪处理之后,能够固化在容量只有 几KB或者几MB字节的存储器芯片或者单片机中 ,适合于特定嵌入式应用场合的专用Linux操作系 统。 嵌入式Linux同Linux一样,具有低成本、多种硬件 平台支持、优异的性能和良好的网络支持等优点 。 嵌入式Linux(Embedded Linux)是指对标准Linux经过小型化裁剪处理之后,能够固化在容量只有几KB或者几MB字节的存储器芯片或者单片机中,是适合于特定嵌入式应用场合的专用Linux操作系统。在目前已经开发成功的嵌入式系统中,大约有一半使用的是Linux。这与它自身的优良特性是分不开的。 嵌入式Linux同Linux一样,具有低成本、多种硬件平台支持、优异的性能和良好的网络支持等优点。另外,为了更好地适应嵌入式领域的开发,嵌入式Linux还在Linux基础上做了部分改进,如下所示。 改善的内核结构 Linux内核采用的是整体式结构(Monolithic),整个内核是一个单独的、非常大的程序,这样虽然能够使系统的各个部分直接沟通,提高系统响应速度,但与嵌入式系统存储容量小、资源有限的特点不相符合。因此,在嵌入式系统经常采用的是另一种称为微内核(Microkernel)的体系结构,即内核本身只提供一些最基本的操作系统功能,如任务调度、内存管理、中断处理等,而类似于设备驱动、文件系统和网络协议等附加功能则可以根据实际需要进行取舍。这样就大大减小了内核的体积,便于维护和移植。 提高的系统实时性 由于现有的Linux是一个通用的操作系统,虽然它也采用了许多技术来加快系统的运行和响应速度,但从本质上来说并不是一个嵌入式实时操作系统。因此,利用Linux作为底层操作系统,在其上进行实时化改造,从而构建出一个具有实时处理能力的嵌入式系统,如RT-Linux已经成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等各种领域。 嵌入式Linux同Linux一样,也有众多的版本,其中不同的版本分别针对不同的需要在内核等方面加入了特定的机制。
另外,为了更好地适应嵌入式领域的开发,嵌入 式Linux还在Linux基础上做了部分改进: 改善的内核结构,内核尽量精简,去除内核中用不到的 功能模块 提高的系统实时性
1.1.3 几种常用的嵌入式操作系统 嵌入式Linux 版 本 简 单 介 绍 CLinux 开放源码的嵌入式Linux的典范之作。 版 本 简 单 介 绍 CLinux 开放源码的嵌入式Linux的典范之作。 RT-Linux 由美国墨西哥理工学院开发的嵌入式Linux硬实时操作系统。 Embedix 根据嵌入式应用系统的特点重新设计的Linux发行版本。 XLinux 号称是世界上最小的嵌入式Linux系统。采用了“超字元集”专利技术,使Linux内核不仅能与标准字符集相容,还涵盖了12个国家和地区的字符集。 PoketLinux PoketLinux由Agenda公司采用、作为其新产品“VR3 PDA”的嵌入式Linux操作系统。 红旗嵌入式Linux 由北京中科院红旗软件公司推出的嵌入式Linux,它是国内做得较好的一款嵌入式操作系统。 Montavista linux MontaVista Linux是MontaVista Software于1999 年开始推出的,专门面向嵌入式系统的商业级操作系统。 风河linux 风河公司(著名的实时操作系统VxWorks的厂商)一直致力于嵌入式linux方面的研究和开发。
1.1.3 几种常用的嵌入式操作系统 μC/OS-II uC/OS-II是一种免费公开源代码、结构小巧、基于优先级的可抢先 的硬实时内核。自从92年发布以来,在世界各地都获得了广泛的应 用,它是一种专门为嵌入式设备设计的内核,目前已经被移植到40 多种不同结构的CPU上,运行在从8位到64位的各种系统之上。 μC/OS-II主要适合小型实时控制系统,具有执行效率高、占用空间 小、实时性能优良和可扩展性强等特点。最小内核可编译至2KB, 如果包含内核的全部功能,编译之后的μC/OS-II内核仅有6-10KB。 μC/OS-II的源代码结构合理清晰易读,不仅成功应用在众多的商业 项目中,而且被很多大学采纳,作为教学的范例,同时也是嵌入式 工程师学习和提高的绝好材料。 单片机上应用较多
1.1.3 几种常用的嵌入式操作系统 VxWorks VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌 入式实时操作系统(RTOS),它是在当前市场占有率很高的嵌入式 操作系统之一。 VxWorks的实时性做得非常好,其系统本身的开销很小,进程调度 、进程间通信、中断处理等系统公用程序精练而有效,使得它们造 成的延迟很短。 另外VxWorks提供的多任务机制,对任务的控制采用了优先级抢占 (Linux 2.6内核也采用了优先级抢占的机制)和轮转调度机制,这 充分保证了可靠的实时性,并使同样的硬件配置能满足更强的实时 性要求。 另外VxWorks具有高度的可靠性,从而保证了用户工作环境的稳定 。同时,VxWorks还有完备强大的集成开发环境,这也大大方便了 用户的使用。 成本较高
1.1.3 几种常用的嵌入式操作系统 QNX QNX是一个分布式、嵌入式、可扩展的实时操作系统。 它基本兼容POSIX规范,提供UNIX类的编译器、调试器 、X Window和TCP/IP等。 QNX是一个微内核实时操作系统,其核心仅提供进程调 度、进程之间通信、底层网络和中断处理等4种服务,其 进程在独立的地址空间运行。所有其它OS服务,都实现 为协作的用户进程,因此QNX核心非常小巧,而且运行 速度很快。
1.1.3 几种常用的嵌入式操作系统 Windows CE Windows CE具有模块化、结构化和基干Win32应用程序 接口以及与处理器无关等特点。 它不仅继承了传统的Windows图形界面,并且用户在 Windows CE平台上可以使用Windows上的编程工具(如 Visual Studio等)、也可以使用同样的函数、使用同样的 界面风格,使绝大多数Windows上的应用软件只需简单 的修改和移植就可以在Windows CE平台上继续使用。
1.1.3 几种常用的嵌入式操作系统 Palm OS Paml OS在PDA和掌上电脑有着很庞大的用户群。Palm OS是Palm公司开发的专用于PDA上的一种操作系统。 虽然其并不专门针对于手机设计,但是Palm OS的优秀性 和对移动设备的支持同样使其能够成为一个优秀的32位 手机操作系统 。Palm OS最明显的特点在精简,它的内核只有几千个字 节,同时用户也可以方便地开发定制,具有较强的可操 作性。
Android 本课程对学习Android开发有较大帮助 Windows Phone IOS 值得关注
1.1.4 嵌入式系统发展趋势 提供强大的网络服务 小型化、低成本、低功耗 人性化的人机界面 完善的开发平台 配有标准网络通信接口,支持TCP/IP协议簇,应用软件 小型化、低成本、低功耗 人性化的人机界面 更方便的人机交互,多点触摸、语音控制 完善的开发平台 1.提供强大的网络服务 为适应嵌入式分布处理结构和应用上网需求,面向21世纪的嵌入式系统要求配备标准的一种或多种网络通信接口。针对外部联网要求,嵌入设备必须配有通信接口,相应需要TCP/IP协议簇软件支持;由于家用电器相互关联(如防盗报警、灯光能源控制、影视设备和信息终端交换信息等)及实验现场仪器的协调工作等要求,新一代嵌入式设备还需具备IEEE1394、USB、CAN、Bluetooth或IrDA通信接口,同时也需要提供相应的通信组网协议软件和物理层驱动软件。为了支持应用软件的特定编程模式,如Web或无线Web编程模式,还需要相应的浏览器,如HTML浏览器、WML浏览器等。 2.小型化、低成本、低功耗 为满足这种特性,要求嵌入式产品设计者相应降低处理器的性能,限制内存容量和复用接口芯片。这就相应提高了对嵌入式软件设计技术要求,如选用最佳的编程模型和不断改进算法,采用Java编程模式,优化编译器性能等。因此,既需要软件人员具有丰富的开发经验,更需要发展先进的嵌入式软件技术,如Java、Web和WAP等。 3.人性化的人机界面 亿万用户之所以乐于接受嵌入式设备,其重要因素之一是它们与使用者之间的亲和力。它具有自然的人机交互界面,如司机操纵高度自动化的汽车主要还是通过习惯的方向盘、脚踏板和操纵杆。人们与信息终端交互要求以GUI屏幕为中心的多媒体界面。手写文字输入、语音拨号上网、收发电子邮件及彩色图形、图像已取得初步成效。目前一些先进的PDA在显示屏幕上已实现汉字写入、短消息语音发布,但离掌式语言同声翻译还有很大距离。 4.完善的开发平台 随着Internet技术的成熟、带宽的提高,ICP(Internet Content Provider,互联网内容提供商)和ASP(Application Service Provider,应用服务提供商)在网上提供的信息内容日趋丰富、应用项目多种多样,像移动电话、固定电话及电冰箱、微波炉等嵌入式电子设备的功能不再单一,电气结构也更为复杂。为了满足应用功能的升级,设计者一方面采用更强大的嵌入式处理器,如32位、64位RISC芯片或数字信号处理器(DSP)增强处理能力;同时还采用实时多任务编程技术和交叉开发工具技术来控制功能复杂性,简化应用程序设计、保障软件质量和缩短开发周期。
1.2 ARM处理器硬件开发平台 1.2.1 嵌入式处理器简介 1.2.2 ARM处理器简介 1.2.3 S3C2410处理器介绍
1.2.1 嵌入式处理器简介 嵌入式系统的核心部件是各种类型的嵌入式处理 器 . 按功能和内部结构等因素,嵌入式系统硬件平台 可以分成下面几类。 嵌入式RISC微处理器 嵌入式CISC微处理器 指 标 RISC CISC 指令集 一个周期执行一条指令,通过简单指令的组合实现复杂操作;指令长度固定 指令长度不固定,执行需要多个周期 流水线 流水线每周期前进一步 指令的执行需要调用微代码的一个微程序 寄存器 更多通用寄存器 用于特定目的的专用寄存器 Load/Store结构 独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输 处理器能够直接处理存储器中的数据 嵌入式系统的核心部件是各种类型的嵌入式处理器,据不完全统计,全世界嵌入式处理器的品种总量已经超过1 000种,流行的体系结构有30多个系列,数据总线宽度从8位到32位,处理速度从0.1到2 000MIPS(MIPS指每秒执行的百万条指令数)。按功能和内部结构等因素,嵌入式系统硬件平台可以分成下面几类。 1. 嵌入式RISC微处理器 RISC(Reduced Instruction Set Computer)是精简指令集计算机,RISC把着眼点放在如何使计算机的结构更加简单和如何使计算机的处理速度更加快速上。RISC选取了使用频率最高的简单指令,抛弃复杂指令,固定指令长度,减少指令格式和寻址方式,不用或少用微码控制。这些特点使得RISC非常适合嵌入式处理器。嵌入式微控制器将整个计算机系统或者一部分集成到一块芯片中。嵌入式微控制器一般以某一种微处理器内核为核心,比如以MIPS或ARM核为核心,在芯片内部集成ROM、RAM、内部总线、定时/计数器、看门狗、I/O端口、串行端口等各种必要的功能和外设。与嵌入式微处理器相比,嵌入式微控制器的最大特点是单片化,实现同样功能时系统的体积大大减小。嵌入式微控制器的品种和数量较多,比较有代表性的通用系列包括Atmel公司的AT91系列、三星公司的S3C系列、Marvell公司的PXA系列等。 2. 嵌入式CISC微处理器 嵌入式微处理器的基础是通用计算机中的CPU在不同应用中将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的功能,这样可以大幅度减小系统体积和功耗。嵌入式微处理器目前主要有Intel公司的x86系列、Motorola公司的68k系列等。表1-2所示描述了RISC和CISC之间的主要区别。
嵌入式微控制器将整个计算机系统或者一部分集 成到一块芯片中。 嵌入式微控制器一般以某一种微处理器内核为核 心,比如以MIPS或ARM核为核心,在芯片内部集 成ROM、RAM、内部总线、定时/计数器、看门狗 、I/O端口、串行端口等各种必要的功能和外设。 与嵌入式微处理器相比,嵌入式微控制器的最大 特点是单片化,实现同样功能时系统的体积大大 减小。 嵌入式微控制器的品种和数量较多,比较有代表 性的通用系列包括Atmel公司的AT91系列、三星公 司的S3C系列、Marvell公司的PXA系列等。
1.2.2 ARM处理器简介 ARM(Advanced RISC Machines)有3种含义,它是一个公司的名称, 是一类微处理器的通称,还是一种技术的名称。 ARM公司是微处理器行业的一家知名企业,其设计了大量高性能、廉 价、低耗能的RISC芯片,并开发了相关技术和软件。ARM处理器具有 高性能、低成本和低功耗的特点,适用于嵌入式控制、消费/教育类多 媒体、DSP和移动式应用等领域。 ARM公司本身不生产芯片,靠转让设计许可,由合作伙伴公司来生产 各具特色的芯片。ARM这种商业模式的强大之处在于其价格合理,它 在全世界范围的合作伙伴超过100个,其中包括许多著名的半导体公司 。ARM公司专注于设计,设计的芯片内核耗电少,成本低,功能强, 特有16/32位双指令集。ARM已成为移动通信、手持计算和多媒体数字 消费等嵌入式解决方案的RISC实际标准。 ARM处理器的产品系列非常广,包括ARM7、ARM9、ARM9E、 ARM10E、ARM11和SecurCore、Cortex等。每个系列提供一套特定的 性能来满足设计者对功耗、性能、体积的需求。SecurCore是单独一个 产品系列,是专门为安全设备而设计的。
1.2.2 ARM处理器简介 表1-3 ARM系列处理器属性比较 项 目 ARM7 ARM9 ARM10 ARM11 流水线深度 3级 5级 项 目 ARM7 ARM9 ARM10 ARM11 流水线深度 3级 5级 6级 8级 典型频率(MHz) 80 150 260 335 功耗(mw/ MHz) 0.06 0.19(+Cache) 0.5(+Cache) 0.4(+Cache) MIPS/ MHz 0.97 1.1 1.3 1.2 架构 冯·诺伊曼 哈佛 乘法器 8×32 16×32
1. 3嵌入式软件开发流程 1.3.1 嵌入式系统开发概述 1.3.2 嵌入式软件开发概述
1.3.1 嵌入式系统开发概述 嵌入式系统的开 发主要分为系统 总体开发、嵌入 式硬件开发和嵌 入式软件开发3大 部分。
系统总体开发中,从功能与成本考虑进行处理器 选型 开发环境的选择
1.3.2 嵌入式软件开发概述 嵌入式软件开发总体流程为图1.15中“软件设计实 现”部分所示,它同通用计算机软件开发一样, 分为需求分析、软件概要设计、软件详细设计、 软件实现和软件测试。其中嵌入式软件需求分析 与硬件的需求分析合二为一,故没有分开画出。 嵌入式系统的软件开发与通常软件开发的区别主 要在于软件实现部分,其中又可以分为编译和调 试两部分,
1.3.2 嵌入式软件开发概述——交叉编译 宿主机 目标机 交叉编译 普通的计算机,搭建开发环境(交叉编译),进行交叉 编译 通常称目标板,程序实际的运行环境 交叉编译 宿主机与目标机硬件平台差异,CPU/指令体系不同 在宿主机上基于源代码生成可以在目标机上执行的程序 交叉编译器本身也是程序,是可以在宿主机上执行的程 序,其输出是可以在目标机上执行的代码(对应指令体 系结构)
嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。编译的最主要的工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统。因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。要注意的是,编译器本身也是程序,也要在与之对应的某一个CPU平台上运行。嵌入式系统交叉编译环境如图1.6所示。图1.6 交叉编译环境 这里一般将进行交叉编译的主机称为宿主机,也就是普通的通用PC,而将程序实际的运行环境称为目标机,也就是嵌入式系统环境。由于一般通用计算机拥有非常丰富的系统资源、使用方便的集成开发环境和调试工具等,而嵌入式系统的系统资源非常紧缺,无法在其上运行相关的编译工具,因此,嵌入式系统的开发需要借助宿主机(通用计算机)来编译出目标机的可执行代码。 由于编译的过程包括编译、链接等几个阶段,因此,嵌入式的交叉编译也包括交叉编译、交叉链接等过程,通常ARM的交叉编译器为arm-elf-gcc、arm-linux-gcc等,交叉链接器为arm-elf-ld、arm-linux-ld等,交叉编译过程如图1.7所示。
1.3.2 嵌入式软件开发概述——交叉调试 嵌入式系统的交叉调试有多种方法,主要可分为软件方式 和硬件方式两种。 调试器和被调试进程运行在不同的机器上,调试器运行在PC机( 宿主机),而被调试的进程则运行在各种专业调试板上(目标板) 。 调试器通过某种通信方式(串口、并口、网络、JTAG等)控制被 调试进程。 在目标机上一般会具备某种形式的调试代理,它负责与调试器共 同配合完成对目标机上运行着的进程的调试。这种调试代理可能是 某些支持调试功能的硬件设备,也可能是某些专门的调试软件(如 gdbserver)。 目标机可能是某种形式的系统仿真器,通过在宿主机上运行目标 机的仿真软件,整个调试过程可以在一台计算机上运行。此时物理 上虽然只有一台计算机,但逻辑上仍然存在着宿主机和目标机的区 别。
软件方式 Gdb server作为调试桩运行在目标机上,Gdb client运行 在宿主机上,二者通过串口,网卡(tcp/ip)通信,通信 协议为标准的gdb远程串行协议RSP 只能用于调试运行于目标操作系统之上的应用程序,不 宜用来调试内核代码及启动代码
本章小结 本章讲解了嵌入式系统的基本概念,包括嵌入式 系统的概念、特点以及其体系结构。在这里,重 点要掌握嵌入式系统和通用计算机的区别,加深 对嵌入式系统的理解。 概括性地讲解嵌入式处理器的分类和各个ARM系 列处理器,结合实际开发板进行学习。另外,不 同的硬件平台都会有一定的区别,对于某些细节 的不同处理需参阅对应厂商的用户手册。 讲解了嵌入式软件开发的流程,其中重点讲解了 交叉编译和交叉调试
思考与练习 1.什么是嵌入式系统,它具有哪些特点?从各方 面比较嵌入式系统与通用计算机的区别。 2.嵌入式系统由哪些部分组成,常用的嵌入式操 作系统有哪些,分别有什么特点? 3. CISC处理器和RISC处理器分别有哪些优点和缺 点? 4. 简述ARM处理器和各个系列的特点。 5.什么是交叉编译?为什么要进行交叉编译? 6.嵌入式开发的常用调试手段有哪几种?说出它 们各自的优缺点。