第五章-嵌入式系统开发
考纲与考点分析
嵌入式系统的开发
- 嵌入式系统的开发过程和工具(开发步骤,交叉开发平台和工具,系统的调试工具等)
- 系统开发工具软件(ADS、RVDS的特点与使用,GCC的常用命令与参数)
- 以S32410/S3C2440为背景的应用系统开发(硬件接口及部件的综合使用;无操作系统环境下的系统开发;uC/OS-II环境下的系统开发)
考点分析
- 在考试中一般情况下会出现在选择题和操作题(知识类型为记忆型和理解型结合,记忆型偏多)
- 常考知识点:
- 了解嵌入式系统开发过程及开发特点
- 了解嵌入式系统开发平台的功能与组成
- 掌握uC/OS操作环境下的嵌入式系统开发
考点1 开发嵌入式系统的基础知识
- 嵌入式系统与应用目标紧密结合,硬件资源有限
嵌入式系统的开发过程步骤
-
需求分析与规格说明
- 把系统需求分析和规格说明分开是很有必要的,将用户对系统的描述转化为系统设计者的描述,从用户需求中整理形成正式的规格说明
- 用户需求通常包括功能部分和非功能部分,非功能部分需求主要指:性能、成本、尺寸、重量、功耗
-
系统设计
- 系统设计也称为概要设计或总体设计
- 这个阶段要完成的任务是:根据规格说明书中所描述的系统需要实现的功能,确定如何实现这些功能的硬件和软件结构,特别是软件和硬件功能的划分,即哪些功能由硬件完成,哪些功能由软件完成,以求满足系统对功能、性能、成本、功耗等的要求
-
构件设计
- 构件设计也称为详细设计,在这个阶段,设计者就需要设计或选择符合系统结构和规格说明中所需要的具体构件
- 构件通常 既包括硬件(如FPGA、专用功能芯片、电路板等),也包括软件模块
- 实际上,系统设计和构件设计是嵌入式系统开发过程中两个最关键的阶段。设计者一定要遵循软硬一体、软硬协调设计的思想。在系统功能满足要求的前提下,结合性能、费用成本、时间成本、尺寸等约束条件,详细思考哪些功能由硬件构件实现,哪些功能由软件构件实现;哪些选用现成构件,哪些需要自行设计构件
-
系统集成与测试
- 在系统集成时,应该分步地、按阶段地构建系统,并且每次只对一部分构件或模块所集成的系统进行测试,这样可以更容易地发现并定位错误。测试工作应贯穿于产品开发的每个阶段中
- 测试与调试既有联系又有区别。测试的目的是验证模块系统的功能和性能,发现错误。调试的任务是分析测试中发现的错误,检查原因,定位故障(错误)位置,采取适当的措施,修改软件硬件,然后返回重新进行测试
考点2 嵌入式系统的开发平台与工具
1、嵌入式系统的开发特点
- 嵌入式系统的产品通常是与应用目标紧密结合的,因此,嵌入式系统产品开发有些不同于基于通用计算机的应用产品开发,主要体现在以下四个方面
- 使用宿主机-目标机的开发架构
- 与底层硬件控制程序的关系密切
- 软硬件资源受限制
- 需要固化程序
2、开发平台与开发工具
- 开发平台用于支持嵌入式系统软硬件的开发,以提高开发质量,缩短开发周期,降低开发成本
- 开发平台中的软件开发工具往往都使用统一的用户界面并作为一个整体提供给开发人员使用,这些工具都无缝连接,相互间可*交换数据,大大提高了开发工作的效率,所以人们也把它们称为集成开发环境(IDE)
嵌入式系统的开发平台包含大量开发工具,主要有以下几点:
-
一个面向嵌入式应用的RTOS及其函数库
- 如嵌入式Linux、WinCE、VxWorks等
- 用户可根据系统的技术要求和商业要求选择合适的一种
-
一套程序开发(代码生成)工具
- 如项目管理器、编辑器、编译器、连接器、定位器等
- 用户根据所选用的OS和编程语言(Java、C、C++)来确定要使用的工具,如ARM公司的SDT、ADS、RVDS、GNU GCC等
-
合适的调试工具
- 如仿真器、编程器、逻辑分析仪、开发板、评估板等
- 其他
- 如包含各种中间件和软件组件的面向不同应用领域的各种应用平台等
考点3 嵌入式系统的调试
1、在线仿真器(ICE)
- 通常,低端(8位/16位)嵌入式系统的程序调试可以用在线仿真器(ICE)实现
ICE概述
- ICE具有与所要开发的嵌入式系统相同的嵌入式处理器
- 使用ICE进行调试时,用在线仿真器取代被调试系统的处理器,即被调试系统与ICE共用一个处理器
- ICE是目前较为有效的调试嵌入式系统的手段
2、片上调试技术-JTAG
-
边界扫面和测试访问口
- 边界扫描测试技术是对芯片或印制电路板进行片上调试最常用的一种技术。它的基本思想是在靠近芯片的输入/输出引脚处增加一个移位寄存器,称为边界扫描寄存器(BSR)
- 除了BSR之外,被调试的芯片或PCB还需要有一个测试访问口TAP,其功能是用来与宿主机进行通信,让宿主机上的调试程序可以读/写边界扫描寄存器中的内容
-
JTAG标准
- JTAG是IEEE的一个下属组织,任务是研究测试访问端口和边界扫描结构的标准。JTAG的研究成果被接纳为IEEE 1149.1-1990规范,成为电子行业片上测试技术的一种国际标准,用于芯片和电路板的测试
- JTAG标准允许多个芯片(电路)的BSR通过JTAG接口串联在一起,实现对多个器件的测试。串接起来的扫描链包含的串行数据流可能长达几百位。例如ARM公司的ARM9TDMI处理器核内部就包含了3个扫描链
- JTAG标准规定,TAP控制器中有2种寄存器:数据寄存器(DR)和命令寄存器(IR)。边界扫描链属于数据寄存器
-
JTAG适配器(JTAG仿真器)
- 目前大多数嵌入式CPU、DSP、FPGA都支持JTAG标准
- 开发人员可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备
- 使用JATG进行嵌入式系统的调试,无需目标存储器,也不占用目标机任何I/O端口
- 通过目标机CPU芯片的JTAG接口以及内嵌的调试电路通常可以完成以下工作
- 由于程序调试时不占用目标机的资源,因此目标机的初始启动程序调试、硬件接口的调试,一般都采用JTAG。至于裸机状态的目标机通常都采用JTAG 调试方式
- JTAG适配器不仅是程序调试的重要工具,也是软件固化的工具。高档的JTAG适配器除了用作调试工具之外,通常都支持多种芯片的烧写功能,且烧写速度较快
3、驻留监控软件调试
- 早期嵌入式系统的调试方法是使用驻留监控软件,这是一段固化在目标机ROM中的程序,它在目标机中运行。这是一种成本较低的调试方法,它不需要任何其他的硬件调试和仿真设备。如ARM公司的Angle就属于此类软件
Angle调试监控程序的功能
4、指令集模拟器
- 指令集模拟器(Instruction Set Simulator,ISS)是在宿主机上模拟应用程序在目标机上运行行为的一个软件工具
- ARM体系结构的嵌入式系统时常用的两种指令集模拟器:ARMulator和SkyEye
指令集模拟器主要用在以下几种场合
- 没有目标机开发板硬件
- 有目标机开发板硬件,但使用目标机开发板成本较高
- 被调试的程序模块不需要在实际开发板上执行,例如学习ARM汇编语言程序,学习ARM处理器上汇编程序、C程序和C++程序的相互之间调用方法,开发手机应用程序
- 对模块代码进行语法检查,先行排错,为连接开发板进行系统调试做好准备,以加快开发速度
- 避免对硬件不熟悉而在调试硬件方面耗费过多精力。尽快在系统高层设计和逻辑设计上取得更大成果
考点4 ADS1.2工具软件
1、ADS1.2的工程项目
- 一个工程项目中至少应包含一个生成目标,通常一个生成目标对应着一个可执行的输出文件。ARM提供的可执行输出文件的模板包括了下面3个生成目标
- Debug生成的输出文件中包含了所有调试信息,用于在开发过程中使用
- Release生成的输出文件中不包含调试信息,用于生成实际发行的软件
- DebugRel生成的输出文件中包含了基本的调试信息
- 设计者要确定连接顺序时,建议采用以下两种方式中的一种
- 当地址映射关系比较简单时,使用编译、连接选项来确定输入文件的连接顺序
- 当地址映射关系比较复杂时,使用scatter(分散加载)格式的文件来确定输入文件的连接顺序
2、工程项目的建立
- 可以从“新建”开始来逐步构建自己的工程项目,也可以借助于一个现成的工程项目模板,通过修改、添加等手段来 建立自己的工程项目
- 向工程项目中添加现成的已存在的文件时有以下两个方面需要注意
- 该文件的扩展名必须是文件映射表中所定义的
- 对于生成目标的输入文件,如C、C++源程序和汇编源程序等,在工程项目中不能重名。而对于头文件,在一个工程项目中则可以存在同名的文件,集成开发工具将搜索相关的路径,取得第一个文件
3、工程项目的配置
- 一个工程项目建立后,其最终目的是使用工具生成一个能在目标机上运行的输出文件。这个输出文件是通过工程项目所对应的生成目标进行编译连接后生成的二进制文件
4、连接中的地址映射
5、编译及调试
- 通俗地讲,下载时域就是下载时的存储空间;运行时域就是运行时的存储空间。设计者利用工具来进行地 址映射,即在编译连接其工程项目时,需要结合实际目标机上的硬件地址空间,指明程序中各段将被存储的区域基址(或称为首地址)。采用的方法就是Simple连接类型和Scattered连接类型的参数配置
- Simple连接类型:对于地址映射关系简单的工程项目,RO Base文本框中配置的是下载时域和运行时域的基址,若没有设置任何值,其默认值是0x8000,RW Base文本框配置的是RW段和ZI段运行时域的基址
- Scattered连接类型:对于地址映射关系较复杂的工程项目,一个Scatter文件中通常要描述一个下载时域的首地址、域的大小、域的属性,以及若干个运行时域的首地址、域的大小、域的属性、包含的输入段等信息
- 在ADS1.2的工程项目窗口中选择Project 菜单下的Compile子菜单,即可以对当前打开的工程项目所包含的输入文件进行编译,然后,在选择Project 菜单下的Make子菜单进行连接,最终生成可执行的输出文件
- 编译新添加进入的或者刚修改过的源文件,并生成相应的目标文件
- 接各目标文件以及库文件,生成ELF格式的输出文件
- 进行连接后操作,比如用fromELF工具转换输出文件的格式
考点5 RVDS
1、RVDS的功能模块
- RVDS(RealView Dev Iopment Suite)是ARM公司推出的基于ARM系列CPU进行开发的工具套件,是目前被认为最好的ARM开发工具。它支持所有ARM芯片,包括Cortex全系列,还支持其他内核的处理器,如51系列等。与ADS1.2比较而言,其生成的代码紧凑、执行效率高
2、RVD调试器
RVD调试器是RVDS工具套件中的主要功能模块,拥有一些早期调试器不具备的功能
-
条件断点
- 能够建立表达式和断点之间的关联,支持依据表达式的值产生断点
-
数据断点
- 根据指定地址单元的访问行为(如读操、写操作)来产生断点,并根据指定地址单元的值来产生断点
-
芯片I/O端口描述文件
- RVD调试器采用文件的方式来记录I/O端口寄存器的值
- 更方便地支持Flash ROM烧写
- 支持在目标机的程序运行后再使用RVD连接调试
-
支持多核调试
- 每个核对应一个窗口,完全可以用单核的调试手段去调试多核中的每一个核
3、Trace和Profile
考点6 GNU
1、GCC概述
GNU简单介绍
- 概念:GNU是GNU’s Not Unix首字母的组合,是一种常用于开发基于Linux操作系统的嵌入式软件的工具套件的简称
- 该工具套件是由Richard Stallman提出的GNU计划中的几个开源的工具组成,包括编译器、连接器、文本编辑器、语法除错等工具。GCC是GNU开发工具套件中的核心工具软件
GCC概念
- GCC是一种针对Linux操作系统环境下应用程序的编译工具,它能将C语言、C++语言、汇编语言编写的源程序以及库文件编译连接成执行文件
- 它从源文件生成可执行文件的过程是由四个相关联的阶段组成:预处理、编译、汇编、连接
- 若要生成可执行文件,无论在一个工程项目中只有一个源文件还是多个源文件,所有被编译和连接的源文件中必须有且仅有一个main()函数,因为main()函数是整个应用程序的入口
2、GCC的命令及参数
- GCC的基本命令格式是:
gcc [opyion] [filenames]
- 针对ARM硬件平台的目标机,其GCC的基本命令格式是:
arm_linux_gcc [opyion] [filenames]
GCC命令中的参数
-
-c
- 该参数表示仅完成编译操作而不进行连接操作,生成后缀为.o的目标文件
-
-E
- 该参数表示仅完成预处理操作而不进行后续操作,生成后缀为.i的文件
-
-S
- 该参数表示仅完成预处理、编译操作而不进行后续操作,生成后缀为.S的文件
-
-o filename_out
- 该参数确定编译后的输出文件名为filename_out
-
-g
- 该参数使得编译器在编译时产生一个用于调试的符号表,设计者要对源程序进行调试,通常需要在GCC命令中加入该参数
-
-O
- 该参数用来确定对程序进行优化编译
-
-I dirname
- 该参数将目录名为dirname的目录加入到程序头文件的目录列表中
-
-fpic或-fPIC
- 该参数产生位置无关的目标代码。它通常用于构造共享函数库
3、GDB的基本命令
- GDB是GNU开发套件中的程序调试工具,它可以提供单步执行和断点执行功能,并观察程序执行时变量值的变化
GDB的基本命令
-
file
- 该命令是装入需要调试的可执行文件,如file test
-
run
- 该命令执行当前被调试的程序
-
kill
- 该命令终止当前被调试的程序运行
-
next
- 该命令执行一行源代码,若遇函数调用则不进入函数内部
-
step
- 该命令执行一行源代码,若遇函数调用则进入函数内部
-
break
- 该命令在代码中设置断点,使程序执行到断点处时被挂起
-
watch
- 该命令用来观察变量的值
-
list
- 该命令列出部分源代码
-
quit
- 该命令终止GDB运行
4、GNU的使用
考点7 Web服务器
1、嵌入式Web服务器与通用Web服务器的差别
-
两者运行的目标环境不一样
- 通用Web服务器一般运行在计算资源和内存资源都比较丰富的通用计算机上,而嵌入式Web服务器运行的目标系统大多是各类专用设备上,资源比较缺乏
-
两者在各自系统中的作用不一样
- 通用Web服务器主要是利用 服务器向用户提供信息服务,而嵌入式Web服务器嵌入在设备中,其主要作用是控制和管理设备,也向客户提供设备的运行状态信息
-
两者运行的优先级不一样
- 嵌入式Web服务器在系统中作为一种监控、管理手段,它不能干扰设备主要任务的运行
2、基于嵌入式Web服务器的应用架构
- 基于嵌入式Web服务器的应用需求与通用Web服务器的应用需求是不同的,它不是以提供信息服务为主,而是提供一个基于远程客户端的操控方式
- 即所谓的浏览器/服务器结构(B/S结构)的操控方式,用户在远程的客户机上,通过浏览器与嵌入式Web服务器交互,从而操控被嵌入的设备
- Web服务器是嵌入在设备中的,通常与设备的控制系统融合为一体,因此称其为嵌入式Web服务器