visualSTATE第六章.ppt_第1页
visualSTATE第六章.ppt_第2页
visualSTATE第六章.ppt_第3页
visualSTATE第六章.ppt_第4页
visualSTATE第六章.ppt_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章系统整合,第六章目录,6.1硬件系统简介 6.2IAR Embedded Workbench集成开发环境 6.3 visualSTATE代码生成和在目标系统中执行 6.4 用C-SPY调试应用程序,6.1硬件系统简介 6.2IAR Embedded Workbench集成开发环境 6.3 visualSTATE代码生成和在目标系统中执行 6.4 用C-SPY调试应用程序,第六章目录,6.1.1 NE-STR750开发学习板简介,NE-STR750开发学习板是基于ARM7TDMI内核的STR75xF微控制器的完全的开发平台。基于高效、灵活和开放的设计,它使得用户可以轻松快速地掌握该系列微控

2、制器的各种外设以及其他的特性。 NE-STR750开发学习板具有丰富的外设接口,包括USB和RS-232连接器、操纵杆、CAN总线接口等。,6.1.2 NE-STR750开发学习板的硬件资源,NE-STR750开发学习板硬件资源有以下特性: (1) 5 V或3.3 V供电选择。 (2) 供电方式:可通过内嵌ST-Link仿真器供电或USB端口供电。 (3) NE-STR750核心微控制器为STR750FV2T6。 (4) 内嵌ST-Link在线仿真器以及20针的JTAG调试接口。 (5) SPI Flash编程器接口和M25P08 SPI存储器。 (6) 两个RS-232连接插座(DB9)。

3、(7) 一个B型USB插座。 (8) 一个CAN连接插座(DB9)。,6.1.2 NE-STR750开发学习板的硬件资源,(9) 主时钟振荡器4 MHz和32 kHz振荡器。 (10) 两位7段LED数码管。 (11) 4个LED发光管。 (12) 2个GPIO按键。 (13) 五方向开关量输入摇杆,包括上、下、左、右及选择。 (14) RESET按键。 (15) 一路电位器输入模拟信号。 (16) RTC实时钟。,6.1.3 硬件布局及配置,NE-STR750开发学习板是围绕TQFP100引脚封装的STR75xF而设计的,其硬件框图和NE-STR750开发学习板上的所有硬件资源如下:,6.1

4、.3 硬件布局及配置,6.1.3 硬件布局及配置,包含以下功能部件: 电源、复位、时钟管理单元 通用输入/输出端口(GPIO) EIC增强型中断控制器 EXTIT外部中断控制器 TB基准时间定时器 看门狗定时器 模/数转换器(ADC) UART通用异步收发器 SMI串行存储器,6.1.4 EK-STM32F开发学习板简介,我们将简要介绍嵌入式的另外一种开发平台EK-STM32F开发学习板。 EK-STM32F开发学习板是为初学者学习、开发意法半导体基于Cortex M3内核的STM32系列ARM所设计的,具有仿真、调试、下载功能的仿真学习套件。EK-STM32F仿真学习开发套件采用STM32F

5、103作为核心MCU,并外扩了USB、UART、LCD数码显示、模拟输入等硬件接口,配合IAR Systems的IAR Embedded workbench for ARM集成开发环境及内嵌的仿真器模块,构成初学者学习入门、硬件设计参考、软件编程调试的学习套件。,6.1.4 EK-STM32F开发学习板简介,EK-STM32F开发学习板特点: IAR Embedded Workbench for ARM开发环境支持 学习评估、仿真开发STM32F10 x系列ST Cortex M3器件 作为开发产品的硬件设计和软件编程参考 内嵌ST-LINK-II仿真器,支持对用户目标系统程序仿真和代码下载,

6、6.1.4 EK-STM32F开发学习板简介,EK-STM32F开发学习板硬件资源: STM32F103VBH6 ST Cortex-M3 两个RS232连接插座(DB9),通过跳线选择连接两个UART 一个B型USB插座,通过跳线连接USB 一个CAN连接插座(DB9),通过跳线连接CAN 一个SD卡座,通过跳线连接SD卡座 主时钟振荡器8MHz/用户可更换振荡器(416MHz)和32KHz振荡器 1个LCD显示,通过跳线选择连接LCD,6.1.4 EK-STM32F开发学习板简介,1个I2C,通过跳线选择连接到24C02 四个LED发光管 一路电位器输入模拟信号 一个五方向输入摇杆 两个G

7、PIO按键 RESET按键 供电方式:内嵌ST-LINK-II仿真器供电或评估系统USB端口供电,6.1.4 EK-STM32F开发学习板简介,EK-STM32F的概述 : 内置闪存存储器 内置SRAM 外部中断/事件控制器(EXTI) 自举模式 时钟和启动 供电方案 供电监控器 电压调压器 低功耗模式 DMA RTC(实时时钟)和后备寄存器 独立的看门狗,6.1.4 EK-STM32F开发学习板简介,窗口看门狗 系统时基定时器 通用定时器(TIMx) 高级控制定时器(TIM1) I2C总线 通用同步/异步接受发送器(USART) 串行外设接口(SPI) 控制器区域网络(CAN) 通用串行总线

8、(USB) 通用输入输出接口(GPIO) ADC(模拟/数字转换器) 温度传感器 串行线JTAG调试口(SWJ-DP),6.1硬件系统简介 6.2IAR Embedded Workbench集成开发环境 6.3 visualSTATE代码生成和在目标系统中执行 6.4 用C-SPY调试应用程序,第六章目录,6.2.1 EWARM集成开发环境及配套仿真器,IAR Embedded Workbench for ARM是市面上最完整的ARM集成开发环境之一,用于专业的嵌入式应用开发,它集成了所有的必要模块,包括C/C+编译器、汇编器、链接器、运行库、文本编辑器、工程管理器和C-SPY调试器,确保开发

9、流程流畅而不间断。 IAR Systems是全球第一家做嵌入式C编译器的公司,先进的技术保证了编译器能产生可靠、紧凑的代码,并且能提供广泛的ARM内核和芯片支持。IAR EWARM支持ARM7、ARM9、ARM9E、ARM10E、ARM11、SecurCore、XScale、Cortex-M0、Cortex-M1、Cortex-M3、Cortex-R4等ARM内核,并提供绝大部分ARM芯片的外设级调试和支持;支持ARM、Thumb和Thumb2指令集;支持VFP9-S浮点协处理器;并为Actel、Analog Devices、Atmel、Freescale、Micronas、OKI、NXP、S

10、TMicroelectronics、TI等公司的ARM芯片提供高效的Flash Loader;此外,IAR EWARM还提供了超过1000个代码例程,方便用户快速入门。,6.2.1 EWARM集成开发环境及配套仿真器,IAR EWARM也提供了广泛的模拟仿真和硬件调试支持,包括: IAR的官方硬件仿真器IAR J-Link、IAR J-Trace、IAR J-Trace for Cortex-M3; IAR的ROM-Monitor; RDI接口类的第三方仿真器(Abatron BDI1000 & BDI2000、EPI Majic、Ashling Opella、Aiji OpenICE、Sig

11、num JTAGjet、ARM Multi-ICE等); Macraigor Wiggler、Raven、mpDemon和USBdemon等调试接口; EPI Jeeni仿真器支持; ARM公司的Angel ROM-Monitor(用于Atmel和Cirrus Logic的评估板)。,6.2.1 EWARM集成开发环境及配套仿真器,IAR EWARM的另一个特色是C-SPY调试器集成了RTOS内核识别插件,通过它可以在调试器中显示RTOS内部数据结构窗口,从而了解每一个项目应用中运行任务的信息,包括信号灯、互斥量、邮箱、队列、事件标志等信息。表列举了IAR EWARM支持的RTOS插件。,6.

12、2.1 EWARM集成开发环境及配套仿真器,(表示支持),IAR EWARM支持的RTOS插件,6.2.1 EWARM集成开发环境及配套仿真器,IAR J-Link仿真器简介: IAR J-Link是IAR为支持仿真ARM内核芯片推出的JTAG方式仿真器。配合EWARM集成开发环境支持所有ARM7/ARM9/Cortex-M3内核芯片的仿真,无须安装任何驱动程序,与EWARM集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好、最实用的开发工具。,6.2.1 EWARM集成开发环境及配套仿真器,J-Link ARM的主要特点: EWARM集成开发环境无缝连接的JTAG仿真器

13、; 支持所有ARM7/ARM9/Cortex-M3内核的芯片,包括Thumb模式; 下载速度高达800 KB/s; 最高JTAG速度可达12 MHz; 目标板电压范围1.23.3 V; 自动速度识别功能; 监测所有JTAG信号和目标板电压; 完全即插即用; 使用USB电源;,6.2.1 EWARM集成开发环境及配套仿真器,带USB连接线和20 芯扁平电缆; 支持多JTAG器件串行连接; 标准20 芯JTAG仿真插头; 选配14 芯JTAG仿真插头; 选配用于5 V目标板的适配器; 带J-Link TCP/IP Server,允许通过TCP/IP网络使用J-Link,6.2.1 EWARM集成开

14、发环境及配套仿真器,IAR J-Link的物理连接。J-Link一端通过USB接口与PC连接,另一端通过标准20芯JTAG插头与目标板连接。建议首先连接J-Link到PC,再连接J-Link到目标系统,最后给目标系统供电(目标系统为独立供电,而非由JTAG接口供电),6.2.1 EWARM集成开发环境及配套仿真器,JTAG速度。J-Link有两种速度设定,即固定JTAG速度、自动JTAG速度,该功能选项位于“Project Options-Debugger-J-Link”设置页面中。 固定JTAG速度。目标被锁定为固定时钟速度,目标能执行的最大JTAG速度取决于目标自身。一般来说,不带JTAG

15、同步逻辑的ARM内核(如ARM7-TDMI)能执行与CPU速度相当的JTAG速度。而带JTAG同步逻辑的ARM内核(如ARM7-TDMI-S、ARM946E-S、ARM966EJ-S)能执行相当CPU速度1/6的JTAG速度。JTAG速度不应超过10 MHz。 自动JTAG速度。由TAP控制器选择最大的JTAG速度。要注意,因为CPU内核时钟可能慢于最大JTAG速度,因此不带同步逻辑的ARM内核可能会工作不稳定。,6.2.2.1 在EWARM中生成一个新工程,EWARM是按工程进行管理的,它提供了应用程序和库程序的工程模板。工程下面可以分级或分类管理源文件。允许为每个工程定义一个或多个编译链接

16、“Build”配置。在生成新工程之前,必须建立一个新的工作区“Workspace”。一个工作区中允许存放一个或多个工程。另外用户最好建立一个专用的目录存放自己的工程文件。 (1) 生成新的工作区“Workspace”。选择主菜单“File-New-Workspace”生成新工作区。 (2) 生成新工程。 选择主菜单“Project-Create New Project”,弹出生成新工程窗口,本例选择工程模板“Project template”中的“Empty project”。,6.2.2.1 在EWARM中生成一个新工程, 在“Tool chain”栏中选择“ARM”,然后单击“OK”按钮。

17、 在弹出的“另存为”窗口中浏览和选择新建的“My projects”目录,输入文件名project1,然后保存。这时在屏幕左边的“Workspace”窗口中将显示新建的工程名. EWARM 提供两种默认的工程生成配置,即“Debug”和“Release”。本例在“Workspace”窗口顶部的下拉菜单中选取“Debug”。现在“My projects”目录下已生成一个“project1.ewp”文件。该文件中包含与“project1”工程设置相关的信息,如Build属性等。工程名后缀上的号表示该工作区有改变但还没有被保存。,6.2.2.1 在EWARM中生成一个新工程, 保存工作区。先选择主菜

18、单“File-Save Workspace”,浏览并选择“My projects”目录,然后将工作区取名为tutorials输入File name,单击“保存”按钮退出。这时在“My projects”目录下将生成一个tutorials.eww文件,该文件中保存了用户添加到“tutorials”工作区中的所有工程。窗口和断点放置等与当前操作有关的其他信息则被存储在“My projects settings”目录下的文件中。,6.2.2.1 在EWARM中生成一个新工程,(3) 给工程添加文件。本例我们将采用“ARMtutor”目录下的两个源文件:Tutor.c和Utilities.c。Tuto

19、r.c是一个只用到标准C语言的简单程序,它用Fibonacci数列的前10个数初始化一个数组,并把结果打印到stdout;Utilities.c包含计算Fibonacci数列的实用程序。 EWARM允许生成若干个源文件组。用户可以根据工程需要来组织自己的源文件(但在本例中没有必要)。 在“Workspace”中选择希望添加文件的目的地,可以是工程或源文件组。本例直接选择project。,6.2.2.1 在EWARM中生成一个新工程, 选择主菜单“Project-Add Files”打开添加文件窗口。选择安装目录“ARMtutor”下的上述2个文件,单击“打开”按钮,把它们添加到“Project

20、1”目录下。,6.2.2.1 在EWARM中生成一个新工程,设置工程属性。生成新工程和添加文件后就应该为工程设置属性。EWARM允许为任何一级目录和文件单独设置属性,但是用户必须为整个工程设置通用的编译链接“Build”属性。 选择通用属性。选中“Workspace”中的“project1-Debug”,然后选择主菜单“Project -Options”,打开工程通用属性窗口。也可以先选择“project1-Debug”,然后选择鼠标右键命令中的“Options”。 在打开的“Options”窗口左边的“Category”中选择“General Options” 。然后分别在:,6.2.2.1

21、 在EWARM中生成一个新工程,“Target”的页面中选择“Device”,单击右边的按钮选择ST的芯片,“Endian Mode”选择“Little”,其余的采用默认选项; “Output”页面中,“Output file”条目下选择“Executable”; “Library Configuration”页面中,“Library”条目下选择“Normal”。,6.2.2.1 在EWARM中生成一个新工程, 选择编译器属性。在“Options”窗口的“Category”中选择“C/C+ Compiler”,打开“C/C+Compliler”属性窗口,如图6.9所示。 在“Preproces

22、sor”页面中,在Additional include directories中加入项目中相应的头文件所在的目录,其他采用默认选项。单击“OK”按钮,确认选择的属性。 对于设置工程属性窗口中的其他信息,由于本例比较简单,所以不再涉及。,6.2.2.2 编译和链接应用程序,编译和链接(Build)工程程序,同时生成一个编译器列表文件(Compiler List File)和一个链接器存储器分配文件(Linker Map File)。 (1) 编译源文件。 选择“Workspace”中“utilities.c”文件。 选择主菜单“Project-Compile”,或单击工具条中的“Compile”

23、按钮,或按鼠标右键选择“Compile”命令。编译结束后在Build窗口中出现如编译处理信息。,6.2.2.2 编译和链接应用程序,用同样的方法编译tutor.c。编译完成后在“My projects”目录下将生成一批新的子目录。因为我们在建立新工程时选择“Debug”配置,所以在“My projects”目录下自动生成一个“Debug”子目录。“Debug”子目录下又包含另3个子目录,名字分别为List、Obj、Exe。它们的用途如下: List 目录下存放列表文件,列表文件的后缀是lst; Obj 目录下存放Compiler和Assembler生成的目标文件,这些文件的后缀为.o和.pbi

24、,可以用做IARILINK链接器的输入文件; Exe 目录下存放可执行文件,这些文件的后缀为.out,可以用做IAR C-SPY调试器的输入文件,注意在执行链接处理之前这个目录是空的。,6.2.2.2 编译和链接应用程序,单击“project-Debug”前面的“+”按钮将目录展开。可以从自动生成的Output目录中看到所有生成的输出文件名以及反映相互依赖关系的头文件名。如图所示为编译处理后的文件结构。,6.2.2.2 编译和链接应用程序,(2) 查看编译器列表文件。通过改变编译器属性中的优化级别(Optimization)来观察List 文件是如何自动更新生成的代码量的。 List文件的结构

25、。双击“Workspace”窗口中的“Utilities.lst”,打开List文件,它包含以下信息: 文件头:显示编译器的版本信息,列表文件生成时间,Source文件、List文件和Object文件的名字和路径,编译命令行及属性等信息。 文件体:显示为每条源语句生成的汇编代码和二进制代码,以及变量如何被分配到不同的段。 文件尾:显示所需的堆栈、程序代码以及数据存储器的总量,同时报告错误和警告信息。,6.2.2.2 编译和链接应用程序, 选择主菜单“Tools- Options”弹出“IDE Options”对话框,选择“Editor”页面。选择“Scan for Change Files”属

26、性。此属性将自动打开编辑窗口中的文件,目前是Utilities.lst文件,单击“OK”按钮即可。,6.2.2.2 编译和链接应用程序, 选中“Workspace ”窗口中的“Utilities.c”,按鼠标右键选择弹出框中的“Options”。从弹出的对话框左边的“Category”中选择“C/C+ Compiler”并确定“Override inherited settings”。打开“Optimization”页面,把优化级别从“None”改定为“High”,然后单击“OK”按钮。 重新编译“Utilities.c”,请注意此时编辑窗口中的“Utilities.lst”文件已经自动被刷新

27、。文件尾显示的代码大小已经因优化级别的升高而减小。 对本例而言,“Optimization”应选择“None”,在链接处理前应该将优化级别恢复到原来的设置,这时应选中“Utilities.c”,按鼠标右键选择弹出框中的“Options”。选择“C/C+ Compiler”并取消“Override inherited settings”。最后重新编译“Utilities.c”。,6.2.2.2 编译和链接应用程序,(3) 链接应用程序。 选中“Workspace”窗口中的“Project-Debug”,然后选择主菜单“Project- Options”,弹出“Options”对话框,在左边的“C

28、ategory”中选择“Linker”,显示“IAR ILINK”的各属性页面。,6.2.2.2 编译和链接应用程序,本例全部采用默认的链接处理属性。在“Output”页面中,选中“Include debug information in output”选项;在“Extra Output”页面中,选中“Use command line option”选项;在“Config”页面中,选中“Override default”选项。在下面的文本栏中输入ST的“Linker”文件。需要强调一下输出文件格式和链接器(Linker)命令文件的选择方法: 输出文件格式。选择合适的输出格式十分重要。用户可能需

29、要将输出文件送给一个调试器进行调试,这时就要求输出格式带有调试信息。本例采用适合C-SPY调试器的默认输出属性,它们是Debug information for C-SPY、With runtime control mod和With I/O emulation mod。说明链接将stdin和stdout指向C-SPY的I/O窗口的低级例程。,6.2.2.2 编译和链接应用程序,链接器命令文件。在链接器命令文件中,用于段(Segment)控制的ILINK命令行是用来放置段的。熟悉链接器命令文件和段的放置十分重要,用户可以从ARM IAR C/C+ Compiler Reference Guide

30、中了解更多信息。 本例使用默认的链接器命令文件,如果用户要检查链接器命令文件,则需用合适的文本编辑器,如EWARM的编辑器。也可以打印出来,检查各项定义是否符合要求。 单击“OK”按钮保存“IAR ILINK”属性。 选择主菜单“Project-Make”或用鼠标右键选择“Make”命令,链接目标文件,生成可执行代码。“Build”消息窗口中将显示链接处理的消息。链接的结果将生成一个带调试信息的代码文件project.out和一个存储器分配(MAP)文件project.map。,6.2.2.2 编译和链接应用程序,(4) 查看MAP文件。双击“Workspace”中的project.map文件

31、名,编辑器窗口中将显示该MAP文件。从MAP文件中我们可以了解以下内容: 文件头中显示链接器版本,输出文件名以及链接命令使用的属性。 CROSS REFERENCE段显示程序入口地址。 RUNTIME MODEL段显示使用的运行时模块的属性。 MODULE MAP段显示所有被链接的文件。每个文件中,将列出作为应用程序一部分加载的有关模块的信息,包括各段及其声明的全局符号。 SEGMENTS IN ADDRESS ORDER段列出了组成应用程序所有段的起始地址、结束地址、字节数、类型和对齐标准等。 END OF CROSS REFERENCE段落显示总的代码和数据字节数。 到此为止,已经生成pr

32、oject.out应用程序并可以用于在IAR C-SPY中调试。,6.2.3 用C-SPY调试应用程序,本例使用C-SPY的模拟器(Simulator)来展现IAR C-SPY调试器的基本特点。前面各节生成的project.out应用程序已经可以用C-SPY调试器进行调试。用户利用调试器可以查看变量、设置断点、观察反汇编代码、监视寄存器和存储器、在Terminal I/O窗口打印输出。使用C-SPY调试应用程序步骤如下。 (1) 调试。在开始调试之前必须设置几个C-SPY属性,具体操作如下。 选择主菜单“Project-Option”,选择“Category”中的“Debugger”。在“Se

33、tup”页面的“Driver”下拉菜单中选择“Simulator”,同时选择“Run to main”,单击“OK”按钮。如果用户已经购买了IAR的JTAG仿真器,请选择“J-Link”。在Download页面中,打开“Use flash load”选项,并设定相应的“Flash Loader”文件。,6.2.3 用C-SPY调试应用程序, 选择主菜单“Project-Debug”或工具条上的“Debugger”。IAR C-SPY将开始装载“project.out”。除了已经打开的窗口外,将显示一组C-SPY专用窗口。 (2) 组织窗口。在EWARM中可以固定窗口(所谓Dock),也可以组织

34、成书签形式让它们浮动。在改变浮动窗口的大小时,其他窗口不受影响。 在开始调试前请确认C-SPY调试窗口的各部分内容已经显示在屏幕上。在编辑器窗口中应能看到源文件Tutor.c、Utilities.c以及“Debug Log”消息窗口。,6.2.3 用C-SPY调试应用程序,(3) 检查源语句。 检查源语句,双击“Workspace”中的Tutor.c; 在编辑器显示文件Tutor.c后,用“Debug-Step Over”命令(或F10),步进到init_fib函数调用语句; 用“Debug -Step Into”命令(或F11)进入函数init_fib; 继续用“Step Into”命令直到

35、for循环语句结束; 再用“Step Over”命令回到for循环语句的开始。请注意,当前是在函数调用级上而不是语句级步进。,6.2.3 用C-SPY调试应用程序,(4) 检查变量。C-SPY允许在源程序上查看变量或表达式,可以在执行程序过程中跟踪它们值的变化。查看变量的方法有几种,在源码窗口用鼠标双击变量名,然后打开Locals、Live Watch或Auto窗口。 利用“Auto”窗口查看变量。选择“View-Auto”打开“Auto”窗口。“Auto”窗口显示最近修改过的表达式的当前值,单步执行程序并观察变量的变化。 设置一个“Watchpoint”,利用“Watch”窗口查看变量。选择

36、“View-Watch”打开“Watch”窗口。请注意“Watch”窗口和“Auto”窗口按书签形式显示。按以下步骤在变量i上设置一个“Watchpoint”。,6.2.3 用C-SPY调试应用程序,单击“Watch”窗口中的虚线框,当输入区出现时输入i,然后按Enter键。也可以从编辑器窗口拖一个变量到“Watch”窗口中。 双击init_fib函数中的root数组名,将其拖到“Watch”窗口。“Watch”窗口将显示i和root的值。将root展开观察每个元素的值。 继续单步执行,观察i和root值的变化。 从“Watch”窗口中除去一个变量时,只需将其选中然后删除。,6.2.3 用C-

37、SPY调试应用程序,(5) 设置和监视断点。IAR C-SPY具有强大的断点功能。设置断点最简单的方法是将光标定位到某条语句,然后按鼠标右键选择“Toggle Breakpoint”命令。实验方法如下: 设置断点。用下述方法在get_fib(i)语句上设置断点。在编辑器窗口显示utilities.c。单击要设置断点的语句,选择主菜单的“Edit-Toggle Breakpoint”,也可以单击工具条上的“Toggle Breakpoint”按钮,这时该语句上将出现断点标记。如果要查看刚定义的断点,选择主菜单“View-Breakpoint”打开“Breakpoint”窗口。在“Debug Lo

38、g”窗口也将显示有关断点执行的信息。,6.2.3 用C-SPY调试应用程序, 执行到断点。选择主菜单“Debug-Go”或者单击工具条上的“Go”按钮都可以让程序执行到断点。“Watch”窗口将显示root 表达式的值。Debug Log 窗口将显示关于断点的信息。 消除断点。可用主菜单“Edit-Toggle Breakpoint”或按鼠标右键选择“Toggle Breakpoint”。,6.2.3 用C-SPY调试应用程序,(6) 在反汇编窗口上调试程序。通常,在CC+程序上调试应该更快速和更直接,但是如果用户希望在反汇编程序上调试,C-SPY也提供了这种功能,而且C-SPY允许在两种方式

39、上方便地切换。反汇编程序的调试方法如下。 单击Reset 按钮复位应用程序。 调试时反汇编窗口通常是打开的。如果还没打开可以选择主菜单“View-Disassembly”打开反汇编窗口。可以看到汇编程序与C程序一一对应。用上面介绍的几种单步命令执行程序观察结果。,6.2.3 用C-SPY调试应用程序,(7) 监视寄存器。寄存器窗口允许用户监视和修改CPU寄存器的内容,具体方法如下。 选择主菜单“View-Register”打开寄存器窗口,如图6.21所示。 用Step Over命令执行下一条指令,观察寄存器窗口中数据的变化; 关闭寄存器窗口。,6.2.3 用C-SPY调试应用程序,(8) 查看

40、存储器。用户可以在存储器窗口监视所选择的存储器区域。下面是检查与变量root有关的存储器内容。 选择主菜单“View-Memory”打开存储器窗口。 激活Utilities.c窗口并双击变量root,用鼠标将其拖到存储器窗口。 如果希望以16-bit显示数据,在存储器窗口顶部的下拉菜单中选择2x Units命令。如果C语言应用程序的init_fib函数未初始化所有的存储器单元,则继续执行单步,同时观察存储器的内容是如何修改的。用户可以在存储器窗口修改存储单元的内容,只需把插入点放在希望修改的地方,然后输入新值就可以了。 关闭存储器窗口。,6.2.3 用C-SPY调试应用程序,(9) 观察Ter

41、minal I/O。用户有时可能希望调试应用程序中的stdin和stdout结构,但是又没有实际的硬件支持,C-SPY 允许用户使用Terminal I/O模拟stdin和stdout。 说明:Terminal I/O只有在使用了链接输出文件属性With I/O emulation mod时才可用。也就是说,stdin和stdout指向Terminal I/O的低级例程将被链接进应用程序。 选择主菜单“View-Terminal I/O”显示I/O操作的输出。Terminal I/O窗口显示的内容取决于应用程序执行了多少。,6.2.3 用C-SPY调试应用程序,(10) 执行程序到结束。 选择

42、主菜单Debug-Go或单击工具条上的Go按钮。因为只有一个断点,所以程序一直执行到结束。同时在Debug Log窗口显示已经到达程序Exit的消息。 如果要求复位应用程序,选择主菜单“Debug-Reset”或单击工具条上的“Reset”按钮。 如果要退出C-SPY,选择“Debug-Stop Debugging”,或单击工具条上的“Stop Debugging”按钮。,6.1硬件系统简介 6.2IAR Embedded Workbench集成开发环境 6.3 visualSTATE代码生成和在目标系统中执行 6.4 用C-SPY调试应用程序,第六章目录,6.3.1 目标代码结构,这部分简单

43、介绍一下由IAR visualSTATE Coder模块生成的代码结构,这个工具能把一个状态机模型转换成C代码模块,从而可以与其他模块结合起来形成应用的最终目标代码。 Coder把一个状态机模型翻译成一个C格式的源代码模块(通常是ANSI-C格式),这个代码模块有一个表格形成的结构,所有状态机模型中的转换以列表中的一个条目出现,这种列表的形式使代码非常紧凑,也很容易实现把代码从某个芯片平台移植到另一个芯片平台。 Coder每次可以生成一个visualSTATE系统的代码,如果这个系统包含多个visualSTATE规则库,那么这些规则库将被合并。为了生成一个系统,用户必须指定一个visualST

44、ATE项目:系统在那里被存放以及系统的名字,6.3.1 目标代码结构,被生成的代码具有定义的很好的API,用来与设备驱动程序或其他软件组件连接。 visualSTATE API Layer(应用程序接口层) visualSTATE Global layer(全局层) visualSTATE Local Layer(局部层),6.3.1 目标代码结构,下图显示了由状态机模型翻译过来的代码(Proj.c,ProjData.c和相联系的库SEMLibB.c),如何能与设备驱动以及与芯片硬件相关的代码配合使用。状态机和环境之间的互动是通过以下来实现的: 事件 动作 共享的变量,6.3.1 目标代码结构

45、,运行的可预测性 由状态机产生的代码是完全正确的,因此在运行阶段也是可预测的,比如下一次将执行哪一个转换。让我们再讨论一下第四章的交通灯控制器的实例。 我们总是可以确定下一次将执行哪一个转换,这可以从对转换的监控或事件的顺序性得到保证。假设在两个方向上都是红灯,即状态是NS_red和EW_red,那么可以通过事件ON_EW和ON_NS来决定在NS方向或EW方向变成绿灯。如果开发者没有对这两个转换设置监控,IAR visualSTATE Verificator将会报出错信息。在这个例子里,不难看出监控可以确保在任何状态下,只有一个转换是可能的,但是在很复杂的模型中,这种情况将很难被看出来。,6.

46、3.2 实际运行环境,visualSTATE实际运行环境包括两部分: (1) Coder自动生成的系统 (2) 与不同服务目的相对应的不同的配置文件里的visualSTATE API函数 在visualSTATE接受事件以前,事件必须被预处理,这种预处理把一个物理事件(比如微处理器某个接口上产生的一个中断)上转化为一个visualSTATE事件。这种变换通常是一个瞬间的任务,经过变换后,被检测到的事件可以根据它的优先级而被保存在队列里。允许使用几个队列,每个队列处理某种类型或优先级的事件。,6.3.2 实际运行环境,下图显示了一个实时操作系统,它带有4个进程/任务(P1.P4)和3个独立的vi

47、sualSTATE模型(系统),A、B和C。在进程1中(P1),模型A和模型B被处理了,也就是说它们两个同时被激活了,而开发者将通过visualSTATE API调用来决定哪一个模型在运行时被优先处理。在进程3里(P3),有一个模型将被处理,因为操作系统的特性,这个模型将不会在A和B执行的同时被执行(我们假设操作系统处于非优先模式)。P2和P4是一般的进程,他们处理与visualSTATE没有直接关系的其他进程。,6.3.3 目标代码的资源需求,在目标芯片上,visualSTATE提供了能生成一个非常紧凑和高效代码的模型以及API库。 在目标芯片上,visualSTATE包括两个组件。 模型数

48、据需要的资源根据特定模型对应的代码大小而定,然而,一个重要的特性是模型对应的代码大小与模型的复杂度基本呈线性关系。 visualSTATE API几乎是一个固定的尺寸,它的大小与目标处理器的编译器以及API配置方式有关(也就是说,什么函数被激活或没有被激活),它与模型的复杂度只有很小的关系。,6.3.3 目标代码的资源需求,下图的表格是visualSTATE API应用于3个不同微处理器时的一些典型配置,表格总结了visualSTATE API在运行时需要的程序(代码)的空间。 3个不同的微处理器/编译器的大小如下: (1) 8位: IAR Motorola 68HC11编译器(小内存模式)。

49、 (2) 16位:IAR Hitachi H8编译器(小内存模式)。 (3) 32位:IAR National Semiconductor CR32编译器(小内存模式)。,6.1硬件系统简介 6.2IAR Embedded Workbench集成开发环境 6.3 visualSTATE代码生成和在目标系统中执行 6.4 用C-SPY调试应用程序,第六章目录,6.4.1 开始调试,在开始调试之前必须设置几个C-SPY选件。具体操作如下: 选择主菜单Project-Option,选择Category中的Debugger。在Setup页面,在Driver的下拉菜单中选择Simulator,同时选择R

50、un to main,单击OK。 如果用户已经购买了IAR的 JTAG仿真器,请选择J-Link. 选择主菜单Project-Debug或工具条上的Debugger按钮。IAR C-SPY将开始装载project1.d79,除了已经打开的窗口外,将显示一组C-SPY专用窗口。,6.4.2 组织窗口,在EWARM中可以固定窗口(所谓dock),也可以组织成书签形式,也可以让它们浮动。改变浮动窗口的大小时其他窗口不受影响。 注意EWARM IDE窗口最底部的状态条中包含如何安排窗口的有用信息。 在开始调试前请确认如图6.38所示的各个窗口和内容已经显示在屏幕上。在编辑器窗口应能看到源文件Tutor

51、.c和Utilities.c以及Debug Log消息窗口。,6.4.3 检查源语句,(1) 检查源语句,双击Workspace中的Tutor.c; (2) 在编辑器显示文件Tutor.c后,用Debug-Step Over命令(或F10)步进到init_fib函数调用语句; (3) 用Debug-Step Into命令(或F11)进入函数init_fib。 (4) 继续使用Step Into命令直到for循环语句; (5) 再用Step Over命令回到for循环的头。请注意,现在是在函数调用级上而不是语句级步进。,6.4.4 检查变量,C-SPY允许在源程序上查看变量或表达式,所以可以在执

52、行程序过程中跟踪它们的值的变化。查看变量的方法有几种,在源码窗口用鼠标双击变量名、然后打开Locals、Live Watch或Auto窗口。 利用Auto窗口查看变量: 选择View-Auto打开Auto窗口。Auto窗口显示最近修改过的表达式的当前值,单步执行程序观察变量如何变化。,6.4.4 检查变量,设置一个Watchpoint,利用Watch窗口查看变量: 选择View-Watch打开Watch窗口。请注意Watch窗口和Auto窗口按书签形式显示。按以下步骤在变量i上设置一个Watchpoint。 单击Watch窗口中的虚线框,当输入区出现时输入i,然后按Enter键。也可以从编辑器窗口拖一个变量到Watch窗口。 双击init_fib函数中的root数组名,将其拖到Watch窗口。 Watch窗口将显示i和root的值。将root展开观察每个元素的值。 继续执行单步,观察i和root值的变化。 从Watch窗口中除去一个变量时,只需选择它然后删除。,6.4.5 设置和监视断点,IAR C-SPY具有强大的断点功能。设置断点最简单的方法是将光标定位到某条语句,然后按鼠标右键选择Toggle Breakpoint命令。实验方法如下: 设置断点 用下面方法在get_fib(i)语句上设置断

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论