560 likes | 738 Views
嵌入式系统教案. 北京建筑工程学院 . 计算机系. 2014/8/20. 第五章 -2 嵌入式软件设计. 提纲. 嵌入式软件开发的特点. 1. 2. 嵌入式软件的开发流程. 3. 嵌入式软件的调试. 4. ARM 集成开发环境. 嵌入式软件设计. 嵌入式软件开发的特点. 需要交叉开发环境 。交叉开发环境是指实现编译、链接和调试应用程序代码的环境。与运行应用程序的环境不同,它分散在有通信连接的宿主机与目标机环境之中。
E N D
嵌入式系统教案 北京建筑工程学院.计算机系 2014/8/20
第五章-2 嵌入式软件设计 提纲 嵌入式软件开发的特点 1 2 嵌入式软件的开发流程 3 嵌入式软件的调试 4 ARM集成开发环境
嵌入式软件设计 嵌入式软件开发的特点 • 需要交叉开发环境。交叉开发环境是指实现编译、链接和调试应用程序代码的环境。与运行应用程序的环境不同,它分散在有通信连接的宿主机与目标机环境之中。 • 宿主机(Host):是一台通用计算机,一般是PC机。它通过串口与目标机通信。宿主机的软硬件资源比较丰富,包括功能强大的操作系统及相应的集成开发工具。 • 目标机(Target):在嵌入式软件开发期间使用,目标机可以是嵌入式应用软件的实际运行环境,也可以是能替代实际环境的仿真系统。目标机体积小,集成度高。目标机硬件资源有限,软件可以裁减,也可以配置。
嵌入式软件设计 嵌入式软件开发的特点 • 引入任务设计方法。嵌入式应用系统以任务为基本的执行单元。嵌入式系统的设计通常采用DARTS(Design and Analysis of Real-Time Systems)设计方法进行任务的设计。DARTS给出了任务划分的方法和定义任务间接口的机制。 • 需要固化程序。通用软件的开发在测试完成以后就可以直接投入运行。其目标环境一般是PC机,在总体结构上与开发环境差别不大。而嵌入式应用程序开发环境是PC机,但运行的目标环境却千差万别,可以是PDA,也可以是仪器设备。而且应用程序在目标环境下必需存储在非易失性存储器中,保证在关机后下次的使用。 • 软件开发难度大。嵌入式应用软件对稳定性、可靠性、抗干扰、实时性等性能要求比通用软件的要求更为严格。
嵌入式软件设计 嵌入式软件的开发流程 1.需求分析阶段 包括:对问题的识别和分析,制定规格说明文档和需求评审。 2.设计阶段 包括:系统设计、任务设计和任务的详细设计。 3.生成代码阶段 包括:代码编程、交叉编译和链接、交叉调试和测试等。 注:嵌入式集成开发环境都支持交叉编译、链接,如WindRiver公司的Tornado及GNU套件,微软公司的EVC++嵌入式开发环境,RAM公司提供的ADS、SDT等。
嵌入式软件设计 嵌入式软件的开发流程 4.固化阶段 嵌入式应用软件调试完成以后,编译器要对源代码重新编译一次,以产生固化到目标环境的可执行代码,再烧写到目标环境的Flash中。可执行代码烧写到目标环境以后,还要进行运行测试,以保证程序正确无误。固化测试完成后,整个嵌入式应用软件的开发就基本完成了。
宿主机 目标机 ARM硬件平台 嵌入式软件设计 嵌入式软件的开发流程
嵌入式软件的调试 常用调试方法 • 软件仿真(源程序模拟器方式) • 在PC机上,通过软件手段模拟执行为某种嵌入式处理器编写的源程序。 • 驻留监控程序(监控器方式) 监控程序是一段运行于目标机上的可执行程序,主要负责监控目标机上被调试程序的运行情况。它与宿主机端的调试器一起完成对应用程序的调试。被调试程序下载到目标机,就可以进行调试。监控程序一般可完成设置断点、单步执行、查看寄存器或内存空间的值等各项功能。 • 不需要专门的调试硬件 • 需要占用目标板上的一部分资源 • 不能对程序进行完全仿真,主要用于调试在目标机操作系统上运行的应用程序,不适于调试目标操作系统。
嵌入式软件的调试 常用调试方法 • JTAG仿真器(ICD,In-Circuit Debugger,在线调试器) 通过JTAG口与 目标机的CPU进行通信。 • 完全非插入式调试,不使用片上资源,无需目标存储器,不占用目标系统的任何端口 • 仿真效果更加接近于目标硬件 在线仿真器(ICE,In-Circuit Emulator) ICE是一种完全仿造调试目标CPU设计的仪器。该仿真器可以真正运行所有的CPU动作。使用ICE同使用一般的目标硬件一样,只是在ICE上完成调试之后,需要把调试好的程序重新下载到目标系统上而已。
ARM软件开发工具 ARM主流开发工具 • Windows操作系统 • ARM ADS/SDT + 调试器 • GNU + Cygwin + 调试器 • ARM SDT + 简易电缆 • Linux操作系统 • GNU + GDB
ARM软件开发工具-ADT IDE ADT for ARM集成开发系统
作业 • 嵌入式软件开发的特点是什么? • 写出嵌入式系统软件开发的流程。 • 嵌入式系统有哪几种调试方式?现在最流行的是哪种?使用什么接口?
主要内容 ARM集成开发环境 • ARM开发工具概述 • ARM开发系统的安装 • ARM JTAG 仿真器配置 • 新建工程项目 • 编译工程项目 • AXD调试器的使用方法
ARM集成开发环境 ARM开发工具概述(一) 基于ARM的开发,需要借助硬件工具和软件工具。硬件工具主要是ARM在线仿真器、评估板等,软件工具包括编辑汇编、编译链接、调试软件、嵌入式操作系统和函数库。目前世界上有诸多公司提供以上不同类别的软硬件产品。 开发者选用ARM处理器开发嵌入式系统时,选择合适的开发工具可以加快进度,节省开发成本。因此一套运行于PC机上,含有编辑软件、汇编软件、连接软件、调试软件、项目管理以及函数库的集成开发环境(IDE,Integrate Develop Enviorment)是必不可少的。集成开发环境用于开发ARM的应用和驱动程序,而调试工作需要借助于ARM实时仿真器和评估板方可完成。
ARM集成开发环境 ARM开发工具概述(一) 实际上,多数嵌入式开发者都借助Windows平台的IDE环境和ARM实时仿真器来开发驱动和应用程序,再将其移植到其它嵌入式操作系统上。 常用的集成开发环境(IDE)有ARM SDT,ARM ADS,MULTI2000,Hitool for ARM等,较为流行的仿真器如Multi-ICE,ARM JTAG等。这里主要介绍ARM ADS集成开发环境和ARM Multi-ICE JTAG仿真器。
ARM集成开发环境 ARM开发工具概述(二) • 软件工具 • ARM ADS(ARM Developer Suite)是ARM公司推出的新一代ARM集成开发软件环境,用以取代ARM公司以前推出的ARM SDT开发软件,目前用户使用的ARM ADS新版本为ADS1.2。 • ARM ADS对ARM SDT的模块进行了增强,替换了部分SDT的部件。ADS由命令行开发工具,ARM时实库,GUI环境(Code Warrior和AXD),实用程序和支持软件组成。有这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的应用程序。
ARM集成开发环境 ARM开发工具概述(二) • 软件工具 • ADS支持所有的ARM体系处理器,包括ARM7、ARM9、ARM9E、ARM10、ARM10E和Intel Xscale系列,除支持Windows平台操作系统外,还支持在 RedHat Linux操作系统上的运行。 • 这里介绍基于Windows平台的ARM开发,让您快捷掌握Code Warrior和AXD的使用,致力于ARM的开发。
ARM集成开发环境 ARM开发工具概述(三) • 硬件工具 • ARM Multi-ICE JTAG仿真器是SoC应用开发的强大调试工具,是进行硬件开发、驱动程序调试、应用软件开发的必备工具。它用于ARM处理器内核软件调试,符合IEEE 1149.1规范,可以满足更多用户对ARM处理器内核软件的开发、调试需求。 • ARM Multi-ICE JTAG仿真器支持所有内含embedded-ICETMlogic的基于ARM内核的芯片,同时也支持所有新的尚在开发中的ARM内核SoC芯片。通过JTAG仿真器,用户可以轻松修改寄存器、存储器、设置断点、观察窗口、程序下载及RealMonitorTM 实时调试。 • ARM Multi-ICE JTAG仿真器配备ARM ADS软件集成开发调试环境,编译、链接、可视化调试一应俱全,软件模拟、项目管理方便快捷,快速提高代码开发效率。
ARM开发工具概述(四) ARM集成开发环境 • ARM JTAG主要特征如下: • 支持所有内建Embedded-ICE逻辑单元的ARM处理器 • 支持多个内核系统 • 支持ARM ADS1.2开发环境 • 连接简便,兼容不同电压的目标系统 • 用户可通过JTAG修改寄存器、存储器内容等 • 除JTAG扫描链外,不占用目标板上的其它任何资源 • 支持实时硬件断点 • 支持程序下载及实时调试 • 通信速度快,高速数据下载可达130KB/S • JTAG速度可配置,以满足不同调试对象的需求 • 支持所有符合RDI 1.50或RDI 1.51规范的调试工具软件 • 支持多目标平台,如ATMEL、SamSung、Intel、Philips、Sharp • 提 供丰富的例程和使用说明 • 体积轻巧,性能稳定
ARM开发工具概述(五) ARM集成开发环境 • ARM Multi-ICEJTAG实时仿真器支持的ARM内核: • ARM7TDMI ARM710T ARM7TDMI-S • ARM7DMI ARM720T ARM740T • ARM7TDI-S ARM7EJ-S ARM926EJ-S • ARM9TDMI ARM9E-S ARM940T • ARM946E-S ARM920T ARM966E-S • ARM1020E ARM922T ARM966E-S • Intel XScale PXA210 PXA250 80200 • 支持的操作系统: • Windows 98/NT/2000/ME/XP • X86 RedHat Linux 6.2/7.2/8.0
ARM开发系统的安装(一) ARM集成开发环境 • 硬件连接 • ARM Multi-ICEJTAG使用标准的25pin并口插座和20pin的JTAG插座作为接口。有的目标板可能使用14pin的JTAG插座,它的信号定义和20pin的JTAG接口的信号排列顺序如下图1。对于这两类接口,它们相同信号的电气特性一样,因此可以把对应的信号直接相连进行转换。20pin和14pinJTAG接口信号定义
ARM开发系统的安装(二) ARM集成开发环境 ARM开发系统的硬件连接如下图所示:
ARM开发系统的安装(三) ARM集成开发环境 • 软件安装 • 开发PC主机系统需求: • Pentium IBM兼容PC,带有可用的并口 • CD-ROM驱动器 • 200MHz以上CPU • 300MB以上空闲硬盘空间 • 32MB(Win98)或64MB(Win2000)以上内存空间 • 建议Microsoft Windows 98或2000操作系统 ARM开发系统软件的安装过程分为两步: 1、安装ARM Multi-ICE,这是仿真器驱动程序。 2、安装ARM Developer Suite(ADS),这是ARM的集成开发环境。 插入安装光盘后,按照默认的设置进行安装即可。
ARM JTAG仿真器配置(一) ARM集成开发环境 1.按照硬件连接图所示,做好仿真器、目标板和PC机的硬件连接.需要注意的是:要先给仿真器加电,然后再给目标板加电。 2.打开“开始程序ARM Multi-ICE v2.2”运行Multi-ICE server,启动仿真器驱动。
ARM JTAG仿真器配置(二) ARM集成开发环境 3. 点击FileAutoconfigure或相应快捷键,自动连接仿真器,如下图所示。仿真器能够检测ARM目标板的CPU型号或者ARM内核级别,这就表明仿真器已经连接并能够仿真目标板。
ARM JTAG仿真器配置(三) ARM集成开发环境 对于某些ARM内核的CPU来说,在点击FileAutoconfigure自动配置时可能会出现“UNKNOWN”的情况,这属于正常现象。这时,用户需要根据自己的内核级别,进行手动配置。这里以ARM920T内核为例,简要介绍。
ARM JTAG仿真器配置(四) ARM集成开发环境 A:首先要建立相应ARM内核的配置文件。新建一文本格式的文件,以 cfg 为扩展名,比如:AT91RM9200DK.cfg,最好保存到ADS的安装 目录 C:\Program Files\ARM\Multi-ICE路径下。 文件的内容如下: [Title] ATMEL AT91RM9200 Demonstration Kit ;---------------------- THUNDER part --------------------------- [TAP 0] ARM920T ; Tell the Server to interrogate the device to gather IDCODE details ; For manual configuration the default is NO if not specified [TAPINFO] YES [Timing] Low=0 ; this equates to 10MHz TCK frequency High=0 Adaptive=OFF ; do not use adaptive clocking
ARM JTAG仿真器配置(五) ARM集成开发环境 B:打开“开始程序ARM Multi-ICE v2.2”运行Multi-ICE server,启动仿真器驱动。点击FileAutoconfigure自动配置,等待出现“Unknow”提示。然后打开FileLoad-Configuration选项。 在弹出的对话框中查找并加载在上面建立的文件AT91RM9200DK.cfg。
ARM JTAG仿真器配置(六) ARM集成开发环境 调入该文件后,Multi-ICE Server能够检测ARM内核,说明手动配置成功。 图7 如果仿真器连接到PC机,刚打开Multi-ICE Server时出现警告,或者该窗口右下角的两个绿灯不亮,应该检查仿真器、电源及其连接是否有故障。
新建工程项目(一) ARM集成开发环境 1.打开“开始程序ARM Developer Suite v1.2Codewarrior for ARM Developer Suite”,进入ADS集成开发环境。 2.从FilesNew菜单新建一个工程项目,如下图所示。
新建工程项目(二) ARM集成开发环境 3.在New对话框的Project选项卡中创建新工程项目。如图所示:ProjectARM Executable image,用于生成一个可执行的ELF格式的映像文件。在Project Name文本框中填写将要建立的工程项目的名称,在Location文本框中设置工程项目的路径。
新建工程项目(三) ARM集成开发环境 4.单击“确定”,这样根据工程项目模板就生成一个新工程项目,如下图所示。可以查看在“Location”所指定的文件夹下,生成了一个XXX文件夹,它又包括XXX_Data文件夹和一个XXX.mcp文件。
新建工程项目(四) ARM集成开发环境 5.新建一个源文件:FilesNewfileText file,如图所示:
新建工程项目(五) ARM集成开发环境 在File Name 填写源文件名称(如init.s),在Location设置源文件的路径。建议新建文件路径和项目路径一致。这里,可以选中“Add to project”项,在Project下拉列表中选择想要加入的工程项目的名称(即上面所建立的 XXX.mcp),并选中Target目标栏中“Debug”、“DebugRel”和“Release”选项。 6.在新建的文本文件中编写程序代码,如下图所示:
新建工程项目(六) ARM集成开发环境 编辑完成后,保存该项目文件。如果该项目包括多个文件,继续新建文件直至完成。
新建工程项目(七) ARM集成开发环境 7.添加所有源文件到项目工程。 如果在第5步中没有选中“Add to project”项,在项目文件下的空白处单击右键,选择“Add files”,在弹出的对话框中选择刚才新建的文件,全部加载到该项目中。 加载完成后,一个完整的项目工程就建立成功!
编译工程项目(一) ARM集成开发环境 1.设置编译环境。 可以看到TargetS中有三个目标:DebugRel、Debug、Release, 默认的目标为DebugRel(带有基本调试信息),用于调试时可以 选择Debug(带有全部调试信息). 通过DebugRel Settings对话 框设置的各种选项对于其它两个目标无效,Targets页面如图所 示。
编译工程项目(二) ARM集成开发环境 2.打开Target Settings。 值得注意的是Post-Linker,用于选择对连接器输出的文件的处 理方式,经常使用的是:ARM fromELF,它可以将ELF格式的文 件转换成各种二进制文件格式供下载使用。同时确定“Output Directory”中的路径,在“Access Paths”下设置你所建的项目下 的XXX.axf文件的路径,下图为Target Settings设置页面。
编译工程项目(三) ARM集成开发环境 3.编译器的选项设置。 首先打开Language Settings项下的ARM Assembler,这是ARM汇编编译 器的选项。这里根据目标系统的实际情况,将ARM Assembler中的处理器 类型(Architecture or Processor)设置为ARM920T。
编译工程项目(四) ARM集成开发环境 打开Language Settings项下的ARM C Compiler选项,这是armcc编译器的选项。将ARM C Compiler中的处理器类型也设置为ARM920T。如果需要使用 C++和Thumb指令集,则应将ARM C++ Compiler,Thumb C Compiler和Thumb C++ Compiler也作同样的设置。
编译工程项目(五) ARM集成开发环境 其它各个选项一般按默认设置即可:ARM920T,Pure-endian softfp, litter endian,ANSI/ISO Standard C。 4.连接器的选项设置。 选择Linker下的ARM Linker选项。 打开Output选项卡,需要注意的 是RO Base,它是用来设置映象文件中RO属性输出段的加载时地址 和运行时地址,该地址值必须是字对齐的。它应该在RAM区,如果 没有指定地址值,使用默认地址0x8000。 在AT91RM9200实验箱中,当系统上电或复位时,固化在Flash中 Boot程序首先运行,将SDRAM映射在0x2000,0000~0x2200,0000-1 (32MB)的地址空间。因此,该RO值只要设置在上述地址范围即 可,当然也可以设置在内部RAM区域,即0x200000。下图为ARM Linker设置页面。RW Base设置映像文件中包含RW属性和ZI属性 的输出段的运行时域的起始地址,该地址必须字对齐。如果它与- split一起使用,会将映像文件中RW/ZI属性输出段的加载时地址和 运行时地址都设置为文本框中的值。
编译工程项目(六) ARM集成开发环境 如果没有选择RW Base选项,映像文件中只包含一个加载时域和一个运行时域。此时,RO属性的输出段、RW属性的输出段以及ZI属性的输出段都包含在同一时域中。当设置RW Base选项时,映像文件包括两个运行时域,一个包含RO属性的输出段,另一个包含RW/ZI属性的输出段。同样,指定-split选项后,映像文件包括两个加载时域。
编译工程项目(七) ARM集成开发环境 • Layout选项卡,在连接方式为Simple时有效,它安排一些输入段在映像文件中的位置。 • Place at the beginning of image选项组,用于指定将某个输入段放置在它所在的运行时域的开头。比如将复位异常中断处理程序的输入段放置在运行时域的开头。有以下两种方式指定输入段: • 在Object/Symbol文本框中指定符号名称,则定义该符号的输入段被指定。 • 在Object/Symbol文本框中指定目标文件名称,在Section文本框中指定一个输入段名称,从而确定一个输入段作为指定的输入段。 Place at the end of image选项组,用于指定将某个输入段放置在它所在运行时域的结尾。比如包含校验和数据的输入段通常放置在运行时域的结尾。指定一个输入段的方法与Place at the beginning of image选项组相同,通常可以不予设置。
编译工程项目(八) ARM集成开发环境 这里采用方法二,将Object/Symbol设置为init.o,Section设置为Init,这些选项保证初始化代码在所有其它代码之前被执行。init.o目标文件是由汇编文件init.s生成的,Init是输入段名称,在init.s的AREA伪代码语句处定义。组合框Place at the end of image中的输入段设置可以忽略。
编译工程项目(九) ARM集成开发环境 5.fromELF工具选项。 打开Linker项下的ARM fromELF选项,将其中的output format设置为Plain binary ,该选项设置输出目标文件的格 式,有多种类型供选择。 为ARM fromELF中的Output file name指定文件名。此设置可以省略, 使用缺省文件名即工程名.bin,默认存放在DebugRel/Debug下。
编译工程项目(十) ARM集成开发环境 6.项目编译。 设置好编译连接的参数后,选中图中红圈所示的编译按钮,对整个工 程编译。当然选中一个.s文件或.c文件,单击鼠标右键可以对单个文件进行 编译。直到弹出的错误和警告信息为“0 error, x warnings”时,整个项目的 编译成功,方能进入调试环境。也可以通过单击Project菜单下的Make命令 或者快捷键F7来进行编译连接和输出目标文件。
AXD调试器的使用(一) ARM集成开发环境 • AXD Debugger是用户用来调试应用程序的开发环境,支持软件仿真和带目标系统的硬件仿真两种方式。其中,软件仿真方式无需用户硬件系统的支持,使用宿主机的CPU模拟ARM微处理器的运行,可进行与硬件无关的应用程序的调试和运行。 • 当需要进行带目标系统的硬件仿真,调试和运行与硬件相关的应用程序时,必须建立AXD Debugger与目标系统的连接。在此之前,应先对AXD Debugger进行如下配置,步骤如下: • a.配置ARM Multi-ICE V2.2 • 做好仿真器和目标系统的硬件连接,先后给仿真器和目标系统上电。 • 运行Multi-ICE Server,进行自动配置或者手动配置,确保ARM实时仿真器能够检测到ARM内核。
AXD调试器的使用(二) ARM集成开发环境 b.配置调试环境 打开AXD Debugger窗口,打开OptionsConfigure Target选项,出现目标选择的对话框。用户安装后第一次使用AXD时,需要添加仿真器的目标环境。 点击“Add” 按钮,在出现的浏览框中查找Multi-ICE.dll文件。
AXD调试器的使用(三) ARM集成开发环境 根据Multi-ICE的安装路径(默认安装的路径是C:\Program Files\ARM\Multi-ICE)选定Multi-ICE.dll文件,然后点击 “确定” 按钮。出现以下画面:
AXD调试器的使用(四) ARM集成开发环境 点击 “OK” 按钮 ,进入Multi-ICE的设置对话框。