计算机三级-嵌入式组-考点汇总-嵌入式系统的开发
计算机三级考点汇总:
五、嵌入式系统的开发
1.嵌入式系统的开发的基础知识
- 需求分析与规格说明: 把系统需求分析和规格说明分开,将用户对系统的描述转化为系统设计者的描述,包括功能部分和非功能部分(性能、成本、尺寸、重量、功耗)。
- 系统设计: 也称为概要设计或总体设计,确定如何实现功能的硬件和软件结构,划分软硬件功能。
- 构件设计: 也称为详细设计,设计或选择符合系统结构和规格说明中所需要的具体构件,包括硬件(如FPGA、专用功能芯片、电路板等)和软件模块。
- 系统集成与测试: 分步地、按阶段地构建系统,每次只对一部分构件或模块所集成的系统进行测试,测试和调试既有联系又有区别,测试目的是验证模块/系统的功能和性能,发现错误,调试任务是分析错误、检查原因、定位故障、修改软硬件。
2.嵌入式系统的开发特点
1. 采用宿主机和目标机的开发架构
- 宿主机与目标机: 嵌入式系统开发采用宿主机(通常为PC机)和目标机(嵌入式系统)的开发架构,利用宿主机的高性能和全面开发工具进行编译、连接和调试,然后将程序烧制或仿真到目标机上进行测试。
- 交叉编译: 由于目标机性能受限,直接在其上开发效率低,因此采用交叉编译方式,在宿主机上完成开发后,再移植到目标机上。
2. 嵌入式系统和底层硬件关系密切
- 硬件依赖性: 嵌入式系统与底层硬件关系密切,高层语言设计时需要考虑硬件资源和操作系统提供的调用或开发工具提供的函数。
- BSP(板级支持包): 在进行底层硬件开发时,必须掌握BSP的特点,因为它是高层语言和硬件之间的接口描述语言。
3. 软硬件资源受限
- 资源有限: 嵌入式系统的软硬件资源受限,设计时需要根据具体需求和设计来搭配资源,避免浪费。
- 优化资源使用: 在开发过程中,要考虑减少资源的重复或浪费,根据实际需求选择合适的硬件配置。
4. 程序固化
- 程序固化: 嵌入式系统的软件需要固化到系统的ROM中,而不是像通用软件那样存放在磁盘上由操作系统加载。
- 烧制技术: 固化程序通常通过特殊的烧制技术将映像文件烧写到目标机的ROM中。
- 固件升级: 嵌入式系统可能需要进行软件和固件的升级,这通常通过可编程的ROM和专用工具(如编程器)实现在线或离线编程。
5. 嵌入式系统与普通软件的区别
- 开发模式: 嵌入式系统的开发模式与普通软件不同,主要体现在采用宿主机和目标机的开发架构、与底层硬件关系密切、软硬件资源受限以及程序需要固化等方面。
- 应用场景: 嵌入式系统通常与应用目标紧密结合,用于特定的嵌入式环境中,而普通软件则更侧重于在通用计算机上运行。
3.嵌入式系统的调试
3-1. 在线仿真器
在线仿真器(ICE)通常用于低端(8位/16位)嵌入式系统的程序调试。ICE具有与所开发嵌入式系统相同的嵌入式处理器,调试时取代被调试系统的处理器,共用一个处理器。ICE是目前较为有效的调试嵌入式系统的手段。
3-2. 片上调试技术—JTAG
1)边界扫描和测试访问口
- 边界扫描测试技术: 对芯片或印制电路板进行片上调试最常用的技术。
- 边界扫描寄存器(BSR): 在芯片输入/输出引脚处增加的移位寄存器。
- 测试访问口(TAP): 用于与宿主机通信,使调试程序可以读/写BSR中的内容。
2)JTAG标准
JTAG是IEEE的一个下属组织,研究测试访问端口和边界扫描结构的标准。JTAG标准被接纳为IEEE1149.1-1990规范,成为电子行业片上测试技术的国际标准。JTAG标准允许多个芯片的BSR通过JTAG接口串联,形成扫描链,实现对多个器件的测试。TAP控制器中有数据寄存器(DR)和命令寄存器(IR),边界扫描链属于数据寄存器。
3)JTAG适配器
- 支持情况: 大多数嵌入式CPU、DSP、FPGA器件都支持JTAG标准。
- 访问能力: 开发人员可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备。
- 调试优势: 使用JTAG进行调试,无需目标存储器,不占用目标机任何I/O端口。
3-3. 驻留监控软件调试
驻留监控软件是一段固化在目标机ROM中的程序,在目标机中运行。这是一种成本较低的调试方法,不需要其他硬件调试和仿真设备。ARM公司的Angel,具有报告存储器和处理器状态、下载应用程序、设置断点等功能。包括通信操作和调试操作在内的所有Angel操作都是在任务管理下进行。
3-4. 指令集模拟器
- 定义: 指令集模拟器(ISS)是在宿主机上模拟应用程序在目标机上运行行为的软件工具。
- 适用场合:
-
- 没有目标机开发板硬件。
- 有目标机开发板硬件但成本较高。
- 被调试程序模块不需要在实际开发板上执行,如学习ARM汇编语言、C/C++程序调用等。
- 对模块代码进行语法检查、排错,为连接开发板调试做准备。
- 常用模拟器: ARM体系结构中常用的指令集模拟器有ARMulator和SkyEye。
4.ADS1.2工具软件
4-1. ADS1.2的工程项目
1)工程项目中的生成目标
- 生成目标的定义: 一个工程项目中至少应包含一个生成目标,生成目标对应着一个可执行的输出文件。
- ARM提供的生成目标模板:
-
- Debug:生成的输出文件中包含了所有调试信息,用于在开发过程中使用。
- Release:生成的输出文件中不包含调试信息,用于生成实际发行的软件。
- DebugRel:生成的输出文件中包含了基本的调试信息。
2)设计者确定连接顺序时的两种方式
- 地址映射关系简单时: 使用编译、连接选项来确定输入文件的连接顺序。这种方式适用于模块较少,程序结构简单的项目。
- 地址映射关系复杂时: 使用scatter(分散加载)格式的文件来确定输入文件的连接顺序。这种方式适用于程序分为多个模块,每个模块需要独立管理的情况。
- 举例: 如程序分为导航模块、管理模块、数据采集模块等,每个模块在链接时采用段的方式,最后连接成整个一个大的可执行文件。
4-2. 工程项目的配置
1)工程项目的最终目标与输出文件
- 最终目标: 使用ADS1.2工具生成能在目标机上运行的输出文件。
- 输出文件: 通过工程项目对应的生成目标编译连接后生成的二进制文件。
2)Debug Settings对话框
- 功能: 对工程项目中当前生成目标的生成选项进行配置。
- 界面: 左边是“Target Settings Panels”选择栏,包含六个生成选项配置操作面板。
-
- Target: 目标设置。
- Language Settings: 语言设置。
- Linker: 连接器设置。
- Editor: 编辑器设置。
- Debugger: 调试器设置。
- Miscellaneous Settings: 杂项设置。
3)配置选项与实战学习
- 配置选项:
-
- Linker: 可选择如ARM Linker等。
- Pre-linker: 预连接,可选择None或需要的其他工具。
- Post-linker: 后连接,可能需要如rm或from erf等工具进行处理。
- 实战学习: 通过修改相关配置,观察输出文件的变化,以理解各项配置的具体作用。
- 提醒: 配置选项较多且复杂,需要通过实战学习来加深理解。
4-3. 工程项目的建立
1)建立方式
- 新建项目: 可以从“新建”开始,逐步构建自己的工程项目。
- 利用模板: 也可以借助现成的工程项目模板,通过修改、添加等手段来建立自己的工程项目。
2)添加已存在文件时的注意事项
- 扩展名要求: 该文件的扩展名必须是文件映射表中所定义的,否则加载时无法识别。
- 重名问题:
-
- 输入文件: 对于生成目标的输入文件,如C/C++源程序和汇编源程序等,在工程项目中不能重名。
- 头文件: 在一个工程项目中可以存在同名的头文件,集成开发工具将搜索相关的路径,取得第一个文件。
4-4. 工程项目的配置
1)Linker选项中的ARM Linker配置
- 配置参数作用: 控制连接器进行连接操作类型。
- 连接操作类型: ARM连接器有三种连接操作类型,分别为Partial、Simple、Scattered。
- 选项卡功能:
-
- Output选项卡: 主要用于选择连接类型。
- Options选项卡: 控制是否删除未使用的段、是否包含调试信息、是否扫描运行库等。
- Layout选项卡: 用于指定连接文件的布局,即如何组织连接后的文件。
- Listings选项卡和Extras选项卡: 提供一些辅助信息。
- 注意事项: 在配置过程中,需要仔细查看每个选项卡的功能,确保正确配置以满足项目需求。同时,建议打开ADS软件,对照讲义中的图片,仔细查看和了解ADS的配置界面。
4-5. 连接中的地址映射
1)地址映射的概念与重要性
- 地址映射定义: 连接类型的配置实际上就是确定工程项目的地址映射关系,即对工程项目中的各段代码或数据进行存储空间的地址分配。
- 重要性: 地址映射决定了代码和数据在目标机上的实际存储空间位置,确保输出文件能在目标机上正确运行。
2)逻辑地址空间与物理地址空间的映射
- 逻辑地址空间: 程序设计时使用的地址空间。
- 物理地址空间: 目标机上实际的存储空间。
- 映射过程: 将逻辑地址空间中的代码和数据映射到物理地址空间中,确保程序在目标机上能够正确执行。
3)目标文件中的段分类
- RO段: 只读性质的代码存储区和常数数据区,包括初始值为0的全局变量(未初始化的全局变量也在此段)。
- RW段: 可读/写性质的数据区,包含初值为非0的全局变量。
- ADS1.2作用: ADS1.2编译工具会自动将目标文件中的信息分类为RO段、RW段等,根据其基本属性进行存储空间的地址分配。
4)下载时域与运行时域
- 下载时域: 下载时的存储空间,即程序烧录到目标机硬件(如ROM)中的地址空间。
- 运行时域: 运行时的存储空间,即程序在目标机上运行时加载到RAM中的地址空间。
- 配置方法: 使用ADS1.2工具进行地址映射时,需要结合目标机的硬件地址空间,指明程序中各段将被存储的区域基址(首地址)。
5)Simple连接类型与Scattered连接类型
- Simple连接类型: 适用于地址映射关系简单的工程项目,RO Base文本框中配置的是下载时域和运行时域的基址,默认值为0x8000。
- Scattered连接类型: 适用于地址映射关系复杂的工程项目,需要配置文件来描述下载时域和若干个运行时域的首地址、域的大小、域的属性以及包含的输入段等信息。
- 配置差异: Simple连接类型配置简单,适用于简单项目;Scattered连接类型配置复杂,但更灵活,适用于复杂项目。
6. 编译及调试
1)编译过程
- 编译操作: 在ADS1.2的工程项目窗口中选择Project菜单下的Compile子菜单,对当前打开的工程项目所包含的输入文件进行编译。或者单击工程项目窗口中的“Make”按钮也可以启动编译过程。
- 编译结果: 生成目标文件(.o文件),这些文件是逻辑的,且可能会生成若干个。
2)连接过程
- 连接操作: 编译完成后,需要选择Project菜单下的Make子菜单进行连接,或者继续通过点击“Make”按钮完成连接。
- 连接内容: 连接各目标文件以及库文件,生成ELF格式的输出文件。
- 后续操作: 连接完成后,可能还需要进行连接后操作,如使用fromELF工具转换输出文件的格式。
3)编译与连接的重要性
- 编译的重要性: 编译是将源代码转换为机器代码的过程,是软件开发中不可或缺的一步。
- 连接的重要性: 连接则是将编译生成的目标文件和库文件组合成可执行文件的过程,确保程序能够正确运行。
- Makefile的作用: 在嵌入系统或Linux环境中,通常会使用Makefile作为编译和连接的配置文件,以自动化这一过程。
一、RVDS
1. RVD调试器
- 条件断点: 能够建立表达式和断点之间的关联,支持依据表达式的值产生断点。例如,可以设置当变量a大于零或小于零时触发断点。
- 数据断点: 根据指定地址单元的访问行为(如读操作、写操作)来产生断点,并根据指定地址单元的值来产生断点。这允许对内存或寄存器的特定访问进行精细控制。
- 芯片I/O端口描述文件: RVD调试器采用文件的方式来记录I/O端口寄存器的值,便于调试和测试每个端口的值及信息。
- Flash ROM烧写支持: 更方便地支持Flash ROM的烧写,使得程序生成目标文件后可以直接写入嵌入式硬件中。
- 目标机程序运行后联调: 支持在目标机的程序运行后再使用RVD连接进行调试,提高了调试的灵活性。
- 多核调试支持: 支持多核调试,每个核对应一个窗口,可以用单核的调试手段去调试多核中的每一个核,便于观察和分析多核系统的并发行为。
2. RVDS的功能模块
- RVDS简介: RVDS(RealView Development Suite)是ARM公司推出的基于ARM系列CPU进行开发的工具套件,支持所有ARM芯片,包括Cortex全系列,以及其他内核的处理器如51系列等。与ADS1.2相比,RVDS生成的代码紧凑且执行效率高。
- 功能模块:
-
- 工程管理器(IDE): 主要用于源文件代码的编辑工作,并以工程项目的方式对源文件进行管理,支持汇编、C和C++。
- 编译连接器(RVCT): 负责编译和连接源代码,生成可执行文件。
- 调试器(RVD): 提供强大的调试功能,如条件断点、数据断点等。
- 指令集仿真器(RVISS): 提供指令级的仿真,便于在开发阶段进行模拟和测试。
一、GNU
GNU是“GNU's Not Unix”的缩写,是一种常用于开发基于Linux操作系统的嵌入式软件的工具套件的简称。GNU工具套件由Richard Stallman提出的GNU计划中的几个开源工具组成,包括编译器、连接器、文本编辑器、语法除错等工具。GCC是GNU开发工具套件中的核心工具软件。
2. GCC概述
GCC是一种针对Linux操作系统环境下应用程序的编译工具,它能将C语言、C++语言、汇编语言编写的源程序以及库文件编译连接成执行文件。GCC从源文件生成可执行文件的过程由四个相关联的阶段组成:预处理、编译、汇编、连接。若要生成可执行文件,无论在一个工程项目中只有一个源文件还是多个源文件,所有被编译和连接的源文件中必须有且仅有一个main函数,因为main函数是整个应用程序的入口。
4. GCC的命令及参数
- 基本命令格式:
-
- 针对通用平台:gcc [options][filenames]
- 针对ARM硬件平台:arm_linux_gcc [options][filenames]
- 主要参数:
-
- -c: 仅完成编译操作而不进行连接操作,生成后缀为.o的目标文件。
- -E: 仅完成预处理操作而不进行后续操作,生成后缀为.i的文件。
- -S: 仅完成预处理、编译操作而不进行后续操作,生成后缀为.s的文件。
- -o filename_out: 确定编译后的输出文件名为filename_out。
- -g: 使编译器在编译时产生一个用于调试的符号表。
- -O: 确定对程序进行优化编译。
- -I dirname: 将目录名为dirname的目录加入到程序头文件的目录列表中。
- -fpic或-fPIC: 产生位置无关的目标代码,通常用于构造共享函数库。
5. GDB的基本命令
- 概念: GDB是GNU开发工具套件中的程序调试工具,提供单步执行和断点执行功能,并观察程序执行时变量值的变化。
- 基本命令:
-
- file: 装入需要调试的可执行文件,如file test。
- run: 执行当前被调试的程序。
- kill: 终止当前被调试的程序运行。
- next: 执行一行源代码,若遇函数调用则不进入函数内部。
- step: 执行一行源代码,若遇函数调用则进入函数内部。
- break: 在代码中设置断点,使程序执行到断点处时被挂起。
- watch: 用来观察变量的值。
- list: 列出部分源代码。
- quit: 终止GDB运行。
6. GNU的使用
使用GNU工具套件开发基于Linux操作系统环境下的嵌入式系统应用程序时,首先需要建立好交叉编译环境,并在宿主机上安装对应于目标机硬件平台的GCC、GDB等工具软件。
开发操作:
- 编辑源文件: 采用文本编辑器编辑项目中所需要的源文件。
- 编译与调试: 利用与目标机硬件平台相关的GCC命令进行编译,利用GDB工具进行程序调试。
- 调试信息生成: 在编译时需要在命令中加入-g参数,以便生成调试信息。
1. 嵌入式Web服务器与通用Web服务器的差别
1)作用差别
- 目标环境: 通用Web服务器运行在资源丰富的通用计算机上,而嵌入式Web服务器运行在资源受限的专用设备上。
- 作用不同: 通用Web服务器主要提供信息服务,而嵌入式Web服务器主要用于控制和管理设备,同时提供设备运行状态信息。
2)优先级差别
- 优先级: 嵌入式Web服务器在系统中作为监控、管理手段,不能干扰设备主要任务的运行,因此其优先级较低。
3)应用架构
- 基于嵌入式Web服务的应用需求
-
- 应用需求: 基于嵌入式Web服务器的应用需求不是以提供信息服务为主,而是提供一个基于远程客户端的操控方式。
- 浏览器/服务器结构
-
- B/S结构: 用户在远程的客户机上,通过浏览器与嵌入式Web服务器交互,从而操控被嵌入的设备。这种结构称为浏览器/服务器结构(B/S结构)。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)