1、2018/11/5,嵌入式系统,1,第2章 嵌入式系统开发过程,2.1 嵌入式软件开发的特点 2.2 嵌入式软件的开发流程 2.3 嵌入式系统的调试 2.4 ADS1.2集成开发环境简介,2018/11/5,嵌入式系统,2,2.1 嵌入式软件开发的特点,1、嵌入式系统与通用计算机的区别 (1)人机交互界面:不局限在键盘、显示器等设备上。 (2)有限的功能:功能是固定的。(可寻址) (3)时间关键性和稳定性:时序严格,工作环境恶劣。(Watchdog) 2、嵌入式系统软件的特点 (1)系统启动:软件的起始点,由硬件的复位信号激发。完成对处理器和各种硬件资源的初始化。 (2)控制硬件:通过I/O端
2、口对硬件实施控制。 (3)位操作: a、通过字节实现位操作,用“读-改-写”方法进行。 b、直接用位操作指令。,2018/11/5,嵌入式系统,3,2.1 嵌入式软件开发的特点,(4)软件要求固化存储:程序固化在存储器芯片中而不是磁盘等存储体中。 (5)软件实时性高:在多任务系统中,通过合理调度确保每个任务得到及时执行。 (6)充分考虑代码执行速度和代码执行效率:节约存储空间,缩短代码执行时间。 (7)中断和中断服务程序(ISR):不同的处理器在中断屏蔽、中断优先级、中断入口的获取、现场保护和回复,有不同之处。 (8)可嵌套的中断与可重入性:注意系统崩溃、更新时钟数据结构时出现的问题。 (9)
3、测量执行时间:对于时间敏感的程序,要利用定时器测量时间。,2018/11/5,嵌入式系统,4,2.1 嵌入式软件开发的特点,3、嵌入式软件的结构 (1)基于处理器的直接编程基于处理器的直接编程 = 前台程序 + 后台程序 前台程序:用中断服务程序(ISR)处理事件; 后台程序:系统的软、硬件资源的分配、管理及任务调度。 运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。 适用:功能比较简单或对软件代码长度敏感的系统。缺点:开发相对复杂,软件的修改和维护较难,要求编写者有丰富的经验。,2018/11/5,嵌入式系统,5,2.1 嵌入式软件开发的特点,2018/11
4、/5,嵌入式系统,6,2.1 嵌入式软件开发的特点,2018/11/5,嵌入式系统,7,2.1 嵌入式软件开发的特点,2018/11/5,嵌入式系统,8,2.1 嵌入式软件开发的特点,(2)基于嵌入式操作系统的编程 基于操作系统的编程= 应用程序 + 操作系统 应用程序:基本模块都是一个个的任务 ; 操作系统:系统的软、硬件资源的分配、管理及任务调度。 运行时,操作系统将一定数量的系统资源或时间分配给运行的任务,来完成一定的任务。每个任务都有一定的优先级。,2018/11/5,嵌入式系统,9,2.1 嵌入式软件开发的特点,主要优点: 分别为各个任务编程,任务间的切换由系统完成,减小了程序的代码
5、量和复杂度,提高了程序的可靠性。 程序可移植性强。跨处理器平台的程序移植只需要修改1%-5%的内容。 促进编程分工专业化,减少重复劳动。 使嵌入式软件开发标准化。 开放的软件框架,可多人同时开发一个系统,缩短了开发时间,降低了软件对开发人员的依赖性。,2018/11/5,嵌入式系统,10,2.1 嵌入式软件开发的特点,2018/11/5,嵌入式系统,11,2.1 嵌入式软件开发的特点,2018/11/5,嵌入式系统,12,2.1 嵌入式软件开发的特点,4、嵌入式软件开发的特点 (1)需要交叉开发环境宿主机(Host)目标机(Target)交叉编译器交叉调试器 (2)引入任务设计方法 (3)需要
6、固化程序 (4)软件开发难度大实时性(RTOS、应用软件设计和代码的质量)、稳定性、可靠性、抗干扰性等开发时必须认真考虑。,2018/11/5,嵌入式系统,13,第2章 嵌入式系统开发过程,2.1 嵌入式软件开发的特点 2.2 嵌入式软件的开发流程 2.3 嵌入式系统的调试 2.4 ADS1.2集成开发环境简介,2018/11/5,嵌入式系统,14,2.2 嵌入式软件的开发流程,嵌入式软件开发流程分为: 1、需求分析阶段 对问题的识别和分析 制定规格说明文档 需求评审 2、设计阶段 数据流分析 划分任务 定义任务间的接口,2018/11/5,嵌入式系统,15,2.2 嵌入式软件的开发流程,3、
7、生成代码阶段 代码编程 交叉编译和链接 交叉调试 测试 4、固化阶段 5、嵌入式软件开发要点 尽量用高级语言开发,少用汇编语言开发。 局域化不可移植部分。 提高软件的可重用性。,2018/11/5,嵌入式系统,16,第2章 嵌入式系统开发过程,2.1 嵌入式软件开发的特点 2.2 嵌入式软件的开发流程 2.3 嵌入式系统的调试 2.4 ADS1.2集成开发环境简介,2018/11/5,嵌入式系统,17,2.3 嵌入式系统的调试,嵌入式系统的调试分调试操作系统的内核和调试嵌入式应用程序两部分,调试方法有软件调试和硬件调试两种: 软件调试:用软件调试器 硬件调试:用仿真调试器 1、源程序模拟器(S
8、imulator)方式Simulator是独立于处理器硬件,与编译器集成在同一个环境中(PC机),进行源程序检验和测试。可进行三级模拟: (1)指令级:给出系统状态的精确行为; (2)周期级:给出每一周期处理器的精确行为; (3)定时级:给出在一个周期内出现信号的准确时间。,2018/11/5,嵌入式系统,18,2.3 嵌入式系统的调试,2、监控器(Monitor)方式通过串口、以太网口等将宿主机与目标机进行物理连接,形成物理通道。在宿主机上运行调试器,在目标机上运行监控程序,两者间通过通信和调试协议,建立起逻辑连接,再将被调试程序放在目标机上调试。由于监控程序运行在目标机上,不适合调试目标操
9、作系统。这是因为目标机的初始化要由监控程序完成,与操作系统的初始化相冲突。另外,宿主机与目标机要占用目标机的某个通信端口进行通信,那么这个端口的应用程序无法调试。,2018/11/5,嵌入式系统,19,2.3 嵌入式系统的调试,3、仿真器(Emulator)方式使用处理器内嵌的调试模块接管中断和异常处理,发生中断和异常后处理器直接进入调试状态,而不是进入操作系统的处理程序。该方式无需在目标机上运行监控程序,不占用目标机的通信接口,方便了系统的开发。JTAG(Joint Test Action Group,联合测试行动组)制定了只需5根引脚就可以实现在线仿真功能的标准,IEEE-1149.1 。
10、该测试标准不仅能够测试各种集成电路芯片,能测试芯片内各类宏单元,还能测试相应的印刷电路板。高档微处理器都带有JTAG接口,通过该接口可对目标系统进行测试,也可对目标系统的存储单元如Flash进行编程。,2018/11/5,嵌入式系统,20,第2章 嵌入式系统开发过程,2.1 嵌入式软件开发的特点 2.2 嵌入式软件的开发流程 2.3 嵌入式系统的调试 2.4 ADS1.2集成开发环境简介,2018/11/5,嵌入式系统,21,2.4 ADS1.2集成开发环境简介,ADS1.2 (ARM Developer Suite v1.2)是一个功能强大又易于使用的开发工具,是由ARM 公司提供的专门用于
11、 ARM 相关应用开发和调试的综合性软件,是一套含有编辑软件、编译软件、汇编软件、链接软件、调试软件、工程管理及函数库的集成开发环境(IDE)。可以用ADS为各种基于 ARM 家族 RISC 处理器编写和调试采用C、C+和 ARM 汇编语言编写的应用程序。ADS由6个部分组成: 代码生成工具:由源程序编辑、汇编和链接工具集组成。 集成开发环境:包括工程管理器、代码生成接口、语法敏感编辑器、源文件和类浏览器、代码版本控制系统接口以及文本搜索引擎等。,2018/11/5,嵌入式系统,22,2.4 ADS1.2集成开发环境简介,调试器:包含3个调试器,AXD(ARM eXtended Debugge
12、r)、ADW(ARM Debugger for Windows)/ADU(ARM Debugger for UNIX)、armsd(ARM symbolic debugger)。AXD是目前最常用的且基于Windows的,armsd是为命令行调试提供的。 指令集模拟器:实现在PC机上对ARM/Thumb处理器的精确模拟。 ARM开发包:由底层例程和库组成。 ARM应用库:由函数库和例程组成。 ADS 主要由以下部件构成: 命令行开发工具; 图形界面开发工具; 各种辅助工具;,2018/11/5,嵌入式系统,23,2.4 ADS1.2集成开发环境简介,重点介绍图形界面开发工具: AXD是基于 W
13、indows 和 UNIX 使用的 ARM 调试器,用来调试C, C+,汇编语言代码。 CodeWarrior IDE 是基于 Windows 的工程管理工具,用于源码文件的管理和编译工程。 1、ADS的安装 (1)在ads1.2文件夹下运行setup.exe文件。,2018/11/5,嵌入式系统,24,2.4 ADS1.2集成开发环境简介,2018/11/5,嵌入式系统,25,2.4 ADS1.2集成开发环境简介,(2)安装license,2018/11/5,嵌入式系统,26,2.4 ADS1.2集成开发环境简介,2018/11/5,嵌入式系统,27,2.4 ADS1.2集成开发环境简介,2
14、018/11/5,嵌入式系统,28,2.4 ADS1.2集成开发环境简介,2、使用ADS创建工程一个嵌入式系统项目通常是由多个文件构成的,其中包括用不同的语言(例如汇编或 C)、不同的类型(源文件,或库文件)的文件。CodeWarrior (项目管理器)通过“工程(Project)”来管理一个项目相关的所有文件。因此,在编译这个项目代码之前,首先要建立“工程”,并加入必要的源文件、库文件等。 (1)新建工程 启动CodeWarrior for ARM Developer Suite,启动后的界面是:,2018/11/5,嵌入式系统,29,2.4 ADS1.2集成开发环境简介,2018/11/5
15、,嵌入式系统,30,2.4 ADS1.2集成开发环境简介,在工具栏中单击“new”按钮,或在“File”菜单中选择“new.”进入创建页面:,2018/11/5,嵌入式系统,31,2.4 ADS1.2集成开发环境简介,在“Project”标签页中为用户提供了 7 种可选择的工程类型: (1)ARM Executabl Image:生成由 ARM 指令构成的ELF(Executable Linkable Format) 格式的可执行映像文件; (2)ARM Object Library:生成由 ARM 指令构成的 armar(ARM librarian,库管程序) 格式的目标文件库; (3)Em
16、pty Project:创建不包含任何库和源文件的空工程; (4)Makefile Importer Wizard:将Visual C的nmake或GNU make文件转换成工程文件; (5)Thumb ARM Executable Image:生成由 ARM 指令和 Thumb 指令混和代码构成的 ELF 格式的可执行映像文件; (6)Thumb Executable image:生成由 Thumb 指令构成的 ELF 格式的可执行映像文件; (7)Thumb Object Library:生成由 Thumb 指令构成的 armar 格式的目标文件库。,2018/11/5,嵌入式系统,32,
17、2.4 ADS1.2集成开发环境简介,选择ARM Executabl Image,在Project name 文本框中输入工程文件名,然后在Location文本框中输入保存的位置,点击“确定”按钮后:,2018/11/5,嵌入式系统,33,2.4 ADS1.2集成开发环境简介,在工程中添加源文件,可按上图提示点击” Add Files”添加或在Project的菜单中选择添加。如果没有源文件,必须先创建源文件。 创建源文件与创建工程类似,只是在“File”标签页中进行。,2018/11/5,嵌入式系统,34,2.4 ADS1.2集成开发环境简介,输入源文件的名字和保存地址后点击确定,然后编辑程序
18、,保存。:,2018/11/5,嵌入式系统,35,2.4 ADS1.2集成开发环境简介,最后添加源程序到工程中。在添加的过程中会出现下面的对话框: 三个 target 的含义: DebugRel:生成目标时,为每一 个源文件生成调试信息; Release:生成目标时,不生成任 何调试信息。 Debug:生成目标时,为每一个源 文件生成最完全的调试信息;,2018/11/5,嵌入式系统,36,2.4 ADS1.2集成开发环境简介,(2)设置目标及其参数 打开工程“HelloWorld .mcp”,按教材P185操作。,2018/11/5,嵌入式系统,37,2.4 ADS1.2集成开发环境简介,目
19、标设置,2018/11/5,嵌入式系统,38,2.4 ADS1.2集成开发环境简介,语言设置,2018/11/5,嵌入式系统,39,2.4 ADS1.2集成开发环境简介,连接器设置 Output 选项卡,2018/11/5,嵌入式系统,40,2.4 ADS1.2集成开发环境简介,Options选项卡,2018/11/5,嵌入式系统,41,2.4 ADS1.2集成开发环境简介,Layout选项卡,2018/11/5,嵌入式系统,42,2.4 ADS1.2集成开发环境简介,为了生成二进制文件, 必须对ARM fromELF进行设置:,2018/11/5,嵌入式系统,43,2.4 ADS1.2集成开发环境简介,(3)向工程中添加文件 3、ADS1.2集成环境下进行仿真和调试的方法,2018/11/5,嵌入式系统,44,2.4 ADS1.2集成开发环境简介,2018/11/5,嵌入式系统,45,总结,作业,