计算机三级嵌入式笔记(五)——嵌入式系统的开发

目录

考点1 嵌入式系统的开发过程

考点2 嵌入式系统的开发平台与工具

考点3 嵌入式系统的调试

考点4 ADS1.2 工具软件

考点5 RVDS

考点6 GNU

考点7 基于嵌入式 Web 服务器的应用设计


23考纲

考点1 嵌入式系统的开发过程


(1)嵌入式系统的开发过程可以划分为系统需求分析与规格说明、系统设计、构件设计、系统集成与测试等几个步骤。

(2)需求分析:名称、目的、输入和输出、功能、性能、生产成本、功耗、尺寸和重量。

输入和输出:数据类型、数据特征、输入输出设备类型。

考点2 嵌入式系统的开发平台与工具

(1)嵌入式系统的开发特点
①使用宿主机-目标机的开发架构
②与底层硬件控制程序的关系密切

③软硬件资源受限制
④需要固化程序

(2)开发平台与开发工具
        开发平台也称为开发环境,它用于支持嵌入式系统软硬件的开发,以提高开发质量,缩短开发周期,降低开发成本。

        开发工具
a.一个面向嵌入式应用的实时操作系统(RTOS)及其函数库,如嵌入式Linux、WinCE、VxWorks等。
b.一套程序开发(代码生成)工具,如项目管理器、编辑器、编译器、连接器、定位器等。
c.某些合适的调试工具,如仿真器、逻辑分析仪、开发板、评估板等。
d.其他,如包含各种中间件和软件组件的面向不同应用领域的各种应用平台等。

        嵌入式系统的开发平台采用宿主机-目标机的架构。如图是嵌入式系统开发平台(环境)的示意图。

考点3 嵌入式系统的调试

(1)在线仿真器
①在线仿真器介绍

        通常,低端(8位/16位)嵌入式系统的程序调试可以用在线仿真器(In-CircuitEmulator,ICE)实现。ICE具有与所要开发的嵌入式系统相同的嵌入式处理器。使用ICE进行调试时,用在线仿真器取代被调试系统的处理器,即被调试系统与ICE共用一个处理器。

②ICE 的特点
        通过ICE的使用,设计者不仅可以对软件进行测试检验,排除设计中的逻辑错误,而且ICE 也能在应用系统中仿真微控制器的实际运行,发现和排除由于硬件干扰等引起的异常行为。
(2)片上调试技术--JTAG
①边界扫描和测试访问口介绍
        边界扫描(BoundaryScan)测试技术是对芯片或印制电路板(PCB)进行片上调试最常用的一种技术。
        在靠近芯片的输入/输出引脚处增加一个移位寄存器,称为边界扫描寄存器(BSR)。当芯片处于正常运行模式时,BSR对于芯片来说是透明的,芯片的运行不受任何影响。当芯片处于调试工作模式时,BSR可以将芯片与外围的输入/输出信号隔离开来,对于芯片的输入引脚,则把 BSR 中与之相应的信号(数据)加载到该引脚;对于芯片的输出引脚,则把它们的输出信号(数据)“捕获”到与之相应的 BSR 中。除了边界扫描寄存器 BSR之外,被调试的芯片或PCB 还需要有一个测试访问口TAP,其功能是与宿主机进行通信,让宿主机上的调试程序可以读/写边界扫描寄存器中的内容。这样,宿主机就可以方便地观察和控制需要调试的电路和芯片了。

②JTAG 标准
a.JTAG的介绍

        JTAG 的研究成果被接纳为IEEE1149.1-1990规范,成为电子行业片上测试技术的一种国际标准,用于芯片和电路板的测试。
b:JTAG 标准中 TAP接口所用的信号线
第一,TCK时钟信号线,为TAP控制器提供10~100MHz的时钟信号(取决于芯片)。
第二,TMS 模式选择信号线,与TCK配合用于设置TAP控制器的工作状态。
第三,TDI数据输入信号线,所有输入到边界扫描寄存器的数据均由此一位一位串行输入,由TCK信号驱动,每位 10~100ns。
第四,TDO数据输出信号线,所有从边界扫描寄存器输出的数据均由此一位一位串行输出,由TCK信号驱动,每位 10~100ns。
第五,TRST(复位)信号线,用来使TAP控制器复位。这个信号是可选的,因为TMS信号也可以使TAP控制器复位。

③JTAG 适配器(JTAG仿真器)
a.JTAG 的介绍
        JTAG 适配器有时也称为JTAG 仿真器,宿主机可以使用并行口、USB、Ethemet、WiFi 等多种接口与它连接。它的作用是将宿主机调试软件中的调试命令解析成为 TAP接口的信号时序(这个过程称为“协议转换”),以设置 TAP控制器的工作状态,控制对边界扫描寄存器的操作。

b.JTAG 的功能
        使用JTAG 进行嵌入式系统的调试,无需目标存储器,也不占用目标机任何IO端口。运行在宿主机上的调试工具软件通过目标机 CPU 芯片的JTAG 接口以及内嵌的调试电路通常可以完成以下工作:第一,实时地设置基于指令地址值或基于数据值的断点。
第二,控制程序单步执行。
第三,访问并且控制CPU处理器内核。
第四,访问系统中的存储器。
第五,访问 I/O系统。
        由于程序调试时不占用目标机的资源,因此目标机的初始启动程序调试、硬件接口的调试,一般都采用JTAC。至于裸机状态的目标机通常都采用 JTAG 调试方式。
c.JTAG的软件固化功能
        JTAG 适配器不仅是程序调试的重要工具,也是软件固化的工具。软件固化通常需要借助专用的烧写工具及烧写软件来实现。
(3)驻留监控软件调试
①驻留监控软件调试的介绍

        早期嵌入式系统的调试方法是使用驻留监控软件(ResidentMonitors),这是一段固化在目标机 ROM 中的程序,它在目标机中运行。ARM 公司提供的各种调试器工具包均支持基于Angel的调试方式。

②Angel调试监控程序运行需要的系统资源
a.ROM、RAM、通信接口
b.系统资源
        包括可配置的系统资源有一个ARM程序的SWI号和一个Thumb程序的SW号。不可配置的资源有两条未定义的 ARM 指令和一条未定义的 Thumb 指令。
c.异常向量
        Angel通过初始化系统的异常向量表来安装,从而使得 Angel有机会接管系统的控制权,完成相应的功能。
d.FIO 及IRO异常中断
        Angel 需要使用 FIQ或IRQ或两者同时使用来实现宿主机和目标机之间的通信功能。
e.数据栈
        Angel需要使用自己的特权模式的数据栈。

③Angel 调试监控程序的工作方式

        当需要进行软件调试时,先要使用 Angel借助通信接口(串行口、并行口或 Ethernet)把应用程序下载到目标机(或写入目标机的 Flash 存储器)。进行调试的时候,由宿主机调试工具软件发布调试命令通知 Angel,Ange根据调试命令,设置断点、控制应用程序的执行、读/写存储器和寄存器的内容,然后将操作结果返回给宿主机,宿主机再以容易理解的格式显示给设计者,达到程序调试的目的。
④Angel调试监控程序的功能
a.基本的调试功能,包括报告存储器和处理器状态、将应用程序下载到目标系统中、设置断点等。
b.C语言库的支持。
c.通信支持,支持串行接口、并行接口和以太网接口。

d.任务管理功能,包括通信操作和调试操作在内的所有 Angel操作都是在任务管理下进行工作的。任务管理部件的功能有:保证任何时候只有一个操作在执行;为每个任务分配优先级,并根据优先级调度任务;控制Angel运行环境的处理器模式。
e:异常中断处理
        ARM 公司提供的 Angel调试监控程序通常有两个版本;一个版本是包含 Angel所有功能的完整版本,主要用于调试应用系统;另一个版本是包含Angel有限功能的最小版本,可以包含在设计者的最终产品中。
⑤驻留监控软件调试的优缺点

        驻留监控软件是一种成本较低的调试方式,它不需要任何其他的硬件调试和仿真设备。但不足之处在于它对硬件设备的要求比较高,一般应在硬件稳定之后才能进行应用软件的调试。另外,它不能对程序的全速运行进行完全仿真,所以对一些实时性要求严格的应用不是很合适

(4)指令集模拟器
①指令集模拟器的介绍
        指令集模拟器(Instruction Set Simulator,ISS)是在宿主机上模拟应用程序在目标机上运行行为的一个软件工具。指令集模拟器的操作界面与通用机的集成开发环境类似。运行时,它接受编译器或汇编程序生成的目标代码中的机器指令输入,模仿目标机 CPU 的取指、译码和执行操作,并将中间执行结果或最终执行结果存入目标机硬件映射数据结构中。

②指令集模拟器主要使用场合
a.没有目标机开发板硬件。
b.有目标机开发板硬件,但使用目标机开发板成本较高:

c.被调试的程序模块不需要在实际开发板上执行。
d.对模块代码进行语法检查,先行排错,为连接开发板进行系统调试做好准备,以加快开发速度。
e.避免对硬件不熟悉而在调试硬件方面耗费过多精力。尽快在系统高层设计和逻辑设计上取得更大成果。

考点4 ADS1.2 工具软件

(1)ADS 的介绍
①ADS 的简介ADS是 ARM Developer Suite的首字母组合,是ARM 公司推出的针对开发以ARM系列 CPU为核心的嵌入式系统时常用的工具套件。该工具套件所支持开发的嵌入式应用软件通常是无操作系统的,即使有操作系统,通常也是如 uC/OS-Ⅱ这样的小型操作系统。
②CodeWarrior for ARM 集成开发环境的主要功能
a.以工程项目的方式来管理源代码文件、库文件以及其他文件。
b.内含一个源代码编辑器。在此编辑器中可以进行 ARM 汇编语言、C语言等的源程序编辑。
c.拥有一个源代码浏览器。它保存了代码中定义的各种符号,使得用户可以在源代码中方便地跳转。
d.可进行各种生成选项配置,以生成不同配置的输出文件。
e.在文本文件中进行字符串的搜索和替换。
f.文本文件比较功能。
g.用户还可以根据自己的爱好设置集成环境的特色界面。

一个工程项目中至少应包含一个生成目标,生成目标指用于生成特定输出文件的生成选项以及所用的全部文件集合。生成选项包括汇编选项、编译选项、连接选项和连接后处理选项等。通常一个生成目标对应着一个可执行的输出文件。ARM 提供的可执行输出文件的模板包括了下面3个生成目标:

第一,Debug 生成的输出文件中包含了所有调试信息,用于在开发过程中使用。
第二,Release 生成的输出文件中不包含调试信息,用于生成实际发行的软件。
第三,DebugRel生成的输出文件中包含了基本的调试信息。

设计者要确定连接顺序时,建议采用以下两种方式中的一种:

第一,当地址映射关系比较简单时,使用编译、连接选项来确定输入文件的连接顺序。

第二,当地址映射关系比较复杂时,使用scatter(分散加载)格式的文件来确定输入文件的连接顺序。

(2)连接中的地址映射
①目标文件中的段的介绍
        任何一个具有完整任务的程序均由指令代码和数据组成。ADS12把被编译后的目标文件中的信息按照3种存储区域类型来进行划分,它们是:
a.RO段指代码存储区和常数存储区,具有只读性质。
b.RW 段指初始值为非0的全局变量数据区,具有可读/写性质。

c.ZI段指初始值为0的全局变量数据区,包括未初始化的全局变量,具有可读/写性质。

②下载时域和运行时域
下载时域就是下载时的存储空间:运行时域就是运行时的存储空间。
③ADS 1.2工具中的地址映射

        利用 ADS1.2工具来进行地址映射,即在编译连接其工程项目时,需要结合实际目标机上的硬件地址空间,指明程序中各段将被存储的区域基址(或称为首地址)。采用的方法就是Simple连接类型和 Scattered 连接类型的参数配置。

a.Simple连接类型
对于地址映射关系简单的工程项目,通常采用 Simple 连接类型。
b.Scattered 连接类型

对于地址映射关系较复杂的工程项目,通常采用Scattered 连接类型。

考点5 RVDS

(1)RVDS的功能模块
①IDE 模块
        IDE模块主要用于源文件代码的编辑工作,并以工程项目的方式对源文件进行管理。源文件代码编辑时,支持语句的高亮度和多颜色显示、拷贝粘贴方式等。
②RVCT 模块
        RVCT 模块完成对源文件进行编译连接,支持全系列的ARM和Xscale 架构,支持汇编、C和 C++。RVCI编译器生成的执行代码容量小,执行效率高,这主要是因为它支持二次编译和代码数据压缩技术。
③RVD 模块
        RVD模块是 RVDS中的调试器,其功能强大,可支持模拟器调试和在线仿真器调试,并且还支持多核调试Flash ROM 烧写等功能。
④RVISS 模块
        RVISS 模块是指令集仿真器,它支持外设虚拟,采用该模块可以使嵌入式系统的软件开发和硬件开发同步进行,同时可以分析代码性能,加快软件开发速度。

(2)RVD 调试器
①RVD 调试器的主要功能
a.条件断点能够建立表达式和断点之间的关联,支持依据表达式的值产生断点,即可按照表达式的结果,如结果是真还是假来产生断点。
b.数据断点是指根据指定地址单元的访问行为(如读操作、写操作)来产生断点,并可以根据指定地址单元的值来产生断点。
c.芯片 I/0 端口描述文件早期的 AXD 调试器只能通过 Memory 来观察芯片 IO端口内部的寄存器值,它不能保存。而RVD调试器采用文件的方式来记录 IO端口寄存器的值。
d.更方便地支持Fash ROM 烧写。
e.支持在目标机的程序运行后再使用RVD连接调试。
f.支持多核调试,每个核对应一个窗口,完全可以用单核的调试手段去调试多核中的每一个核。

(3)Trace功能和Profile功能
①Trace功能和Profile 功能的介绍

        Trace 功能是指 RVDS具有记录 ARM CPU从开始执行程序到停止执行程序这段时间内所执行的所有动作,记录内容包括指令和主存储器访问行为。而Profle功能是指RVDS可以对Trace功能所记录的内容进行性能分析。
②Trace功能和Profile功能的作用

a.从执行效率的角度优化程序利用Trace功能可以观察到程序代码中所有函数的运行时间以及占用的系统资源,并用 Profle功能进行分析优化,从而优化程序代码,以提高系统实时性。

b.代码覆盖率的测试对于可靠性要求高的嵌入式系统,可以使用Trace功能和Profile 功能对代码进行覆盖率测试,以便发现程序的死角,提高系统程序的健壮性,从而提高系统的可靠性。
c.代码的辅助调试 Trace 功能可以记录 ARMCPU所执行的指令,因而,设计者可以观察 Trace 记录的信息,判断程序运行的错误所在。它可以作为 RVD 调试器的辅助工具使用。

考点6 GNU


(1)GCC 概述
        GCC是一种针对 Linux 操作系统环境下应用程序的编译工具,它能将C语言、C++语言、汇编语言编写的源程序以及库文件编译连接成执行文件。
①由源文件到执行文件的四个阶段
a.预处理阶段
        编译器将完成对各种预处理命令的分析,这些预处理命令主要有#include、#define、#ifdef...#endif等,所进行的处理对应的是头文件的包含、宏定义的扩展、条件编译等。
b.编译阶段
        编译器首先检查所有输入文件中的代码语法是否正确,若正确则把输入文件的C语言或 C++语言代码翻译成汇编语言。
c.汇编阶段
        将把编译过程生成的汇编语言文件及汇编语言编写的源文件进行汇编,生成二进制目标文件,目标文件以.0为后缀。
d.连接阶段
        将把所有生成的目标文件进行连接,即把所有目标文件在可执行的存储器区域内安排一个适当的位置,同时该程序中所调用的库函数也均从各自的库文件中安排到适当的位置上。至此,可执行文件即生成。

②GCC中文件后缀与文件类型的对应关系
a.文件后缀为.c,该后缀的文件是指用C语言编写的源程序文件。
b.文件后缀为.a,该后缀的文件是指由目标文件组成的库文件。
c.文件后缀为.C、.cc或.cxx,该后缀的文件是指用C++语言编写的源程序文件

d.文件后缀为.h,该后缀的文件是指头文件,它可以被其他源文件所包含。
e.文件后缀为.i,该后缀的文件是指已经预处理过的C语言编写的源程序文件。
f.文件后缀为.ii,该后缀的文件是指已经预处理过的 C++语言编写的源程序文件。
g.文件后缀为.0,该后缀的文件是指编译及汇编后生成的目标文件。
h.文件后缀为.s,该后缀的文件是指编译后生成的汇编语言程序。
i.文件后缀为.S,该后缀的文件是指汇编语言编写的源程序文件。

(2)GCC的命令及参数
①GCC 的基本命令格式

gcc [options][filenames]

        其中,options 代表编译器命令所需要的参数,filenames 代表命令中所涉及的相关文件名称。GCC可以针对多种嵌入式微处理器体系结构来生成其目标文件,针对不同的嵌入式微处理器,GCC的命令书写形式略有不同,如针对 ARM 系列微处理器为核心的目标机,其GCC的基本命令格式是:

arm-linux-gcc [optionslfilenames]


②GCC 命令的主要参数介绍
-C
        该参数表示仅完成编译操作而不进行连接操作,此时,编译器仅把输入的源文件生成后缀为.的目标文件。
E
        该参数表示仅完成预处理操作而不进行后续操作,此时,编译器仅把输入的源文件预处理生成后缀为i的文

-S
        该参数表示仅完成预处理、编译操作而不进行后续操作,此时,编译器仅把输入的源文件生成后缀为.S的文

-o filename out
        该参数确定编译后的输出文件名为filename_out。它使得设计者可以根据自己的需要来确定生成的输出文件名称,但该文件名称不能与源文件名称相同。若设计者不指定该参数,则 GCC会自动给出默认的输出文件名称:a.out.
-g
        该参数使得编译器在编译时产生一个用于调试的符号表,设计者要对源程序进行调试,通常需要在GCC命令中加入该参数。
-O
        该参数用来确定对程序进行优化编译。编译时会对程序的存储空间或执行时间进行优化,产生的可执行文件的执行效率会高。
-I dirname
        该参数将目录名为 dirname 的目录加入到程序头文件的目录列表中,其作用是预编译时,若编译器在当前目录中没有找到程序中包含的头文件,就到 dirname 目录中去查找。在程序设计时,若程序中包含的头文件分别存放在多个目录下,那么需要使用该参数给出头文件的搜索路径。
-L dirname
        该参数将目录名为 dirname 的目录加入到库文件的目录列表中,在程序设计时,若程序所需要的库函数文件分别存放在多个目录下,那么需要使用该参数给出库函数的搜索路径。
-fpic 或-fPIC
        该参数产生位置无关的目标代码。它通常用于构造共享函数库。

(3)GDB
①GDB 的介绍
        GDB是GNU开发工具套件中的程序调试工具,它可以提供单步执行和断点执行功能,并观察程序执行时变量值的变化。
②GDB 的基本命令
file
该命令是装入需要调试的可执行文件,如file test。
run
该命令执行当前被调试的程序。
kill
该命令终止当前被调试的程序运行。
next
该命令执行一行源代码,若遇函数调用则不进入函数内部。
step
该命令执行一源代码,若遇函数调用则进入函数内部:
break

该命令在代码中设置断点,使程序执行到断点处时被挂起。

watch
该命令用来观察变量的值。
list
该命令列出部分源代码。
quit
该命令终止 GDB 运行。
(4)GNU 的使用
使用 GNU 开发嵌入式系统应用程序的过程

a.首先需要建立好交叉编译环境,并在宿主机上安装对应于目标机硬件平台的 GCC、GDB 等工具软件。

b.采用一个文本编辑器来编辑项目中所需要的源文件,源文件通常采用C语言、C++语言或者汇编语言来编写。
c.利用与目标机硬件平台相关的 GCC命令,如 ARM 平台就是使用 arm-linux-gcc 命令来完成预处理、编译、汇编、连接工作。

        若应用程序复杂,其项目由若干个源文件组成,则通常需要编写 makefile 文件来确定源文件的连接顺序,提高设计者完成编译、连接工作的效率。

        若应用程序中只有一个源文件,则不需要编写 makefile 文件,直接使用命令行形式的GCC命令来完成编译工作。
d.利用 GDB 工具进行程序调试。注意,在编译时需要在命令中加入-g参数,以便生成调试信息。

考点7 基于嵌入式 Web 服务器的应用设计

(1)嵌入式Web服务器与通用 Web 服务器的比较
①两者运行的目标环境不一样
        通用 Web 服务器一般运行在计算资源和内存资源都比较丰富的通用计算机上,而嵌入式 Web服务器运行的目标系统大多是各类专用设备上,资源比较缺乏。
②两者在各自系统中的作用不一样
        通用 Web服务器主要是利用 Web服务器向用户提供信息服务,而嵌入式 Web服务器嵌入在设备中,其主要乍用是控制和管理设备,也向客户提供设备的运行状态信息。
③两者运行的优先级不一样
        嵌入式 Web服务器在系统中作为一种监控、管理手段,它不能干扰设备主要任务的运行。

(2)基于嵌入式 Web 服务的应用架构
①嵌入式 Web 服务的总体框架
        基于嵌入式 Web 服务器是提供一个基于远程客户端的操控方式,即浏览器/服务器结构(B/S 结构)的操控方式,用户在远程的客户机上,通过浏览器与嵌入式Web服务器交互,从而操控被嵌入的设备。

②嵌入式 Web 服务器的应用系统的硬件结构

③嵌入式 Web 服务器的应用软件结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值