《嵌入式第五章.doc》由会员分享,可在线阅读,更多相关《嵌入式第五章.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、5.1 Tornado简介Tornado是由美国风河系统公司(Wind River System 公司,WRS)推出的高性能实时操作系统VxWorks的开发平台,它包括一套完整的面向嵌入式系统的开发和调试工具。Tornado是集成了编辑器、编译器、调试器于一体的高度集成的窗口环境,给嵌入式系统开发人员提供了一个不受目标机资源限制的超级开发和调试环境。Tornado开发系统包含三个高度集成的部分:1.运行在目标机上的高性能、可裁剪的实时操作系统VxWorks;2.运行在宿主机的强有力的交叉开发工具和实用程序,可对目标机上的应用程序进行跟踪和调试;3.连接宿主机和目标机的多种通讯方式,如:以太网,
2、串口线,ICE或ROM仿真器等。Tornado环境采用主机-目标机交叉开发模型,应用程序在主机的Windows环境下编译链接生成可执行文件,下载到目标机,通过主机上的目标服务器与目标机上的目标代理程序的通信完成对应用程序的调测、分析。Tornado交叉开发环境Tornado的功能特点集成性集成了编辑、编译、调试、仿真测试、项目管理等方面的一系列工具 开放性作为一开放环境,Tornado与目标机的连接通过统一接口进行,接口提供丰富的API,用户可方便的定制和扩展各开发工具 Tornado集成开发环境:Tornado IDE(集成开发环境)使用户创建和管理工程,建立和管理宿主机与目标机之间的通信以
3、及运行、调试和监控VxWorks应用变得非常方便。Tornado集成开发环境的核心工具:(1)编辑器(Editor) - Tornado的源代码编辑器1提供基本的代码文字编辑功能 2支持C和C+语法格式的高亮显示 3与Tornado的编译器进行了集成 Project Facility可根据编译器给出的错误或警告信息直接定位到Editor窗口相应源代码处 4与Tornado的调试器也进行了集成 Editor窗口能跟踪代码的执行,实现源代码级的调试(2)工程配置工具(Project Facility) -图形化的核心配置工具(WindConfig) 实现了工程管理的自动化;实现了对VxWorks配
4、置自动化,主要是可以进行自动的依赖性分析、代码容量计算和自动剪裁等。(3)C/C+编译环境(C/C+ Compiler) 是个交叉编译器;提供一系列的工具来支持C/C+语言;允许开发者迅速产生高效简洁的代码。 (4)图形化的交叉调试器(CrossWind/WDB) 是远程的源代码集成调试器;支持任务级和系统级调试;支持混合代码显示;支持多目标机同时调试。 (5)C语言命令shell工具(WindSh) 是个功能强大的命令解释器;可以直接解释执行C语句表达式;可以直接调用目标机上的C函数;可以直接访问系统符号表中登记的变量;可以直接执行TCL语言。(6)目标机系统状态浏览器(Browser) 提
5、供目标机系统的全面状态总结;允许开发者监视独立的目标系统对象:任务、信号灯、消息队列、内存分配、堆栈、符号表等。(7)集成仿真器(VxSim) 提供与真实的目标机一致的调试和仿真运行环境;允许开发者在没有BSP、操作系统配置和目标机硬件的情况下,使用Tornado迅速开始工作。集成仿真器(VxSim)(8)集成的软件逻辑分析仪(WindView for Integrated Simulator) 提供了运行在集成仿真器上的应用程序的详细的动态行为;图形化显示了任务、中断和系统对象相互之间的复杂关系。(9) 主机目标机连接配置工具(Launcher) 允许开发者配置主机和目标机的连接方式;提供了
6、对开发环境的管理功能。(10)代码预分析工具(WindNavigator) 提供源程序代码分析浏览;图形化显示函数调用关系;快速进行代码定位。(11)增量加载器(Incremental Loader) 可以动态的加载新增加的模块并在目标机和内核实现动态链接运行,不必重新下载内核以及未改动的模块,加快开发速度。VxWorks操作系统运行组件VxWorks操作系统主要的运行组件:虚拟内存接口VxVMI 闪存文件系统TrueFFs for Tornado 支持紧密耦合共享内存多处理器结构的VxMP 支持紧密耦合分布式多处理器结构的VxDCOM 支持松散耦合分布式多处理器结构的VxFusion 多媒体
7、库WindML for VxWorks5.2 使用调试和分析工具使用Tornado及其目标仿真器VxSim,开发调试一个Downloadable Image的工程项目:(1) 创建一个工作空间和工程项目 (2) 在工程项目中创建应用程序 (3) 编译链接生成目标映象Downloadable Image(4) 在主机上,将目标映象下载到目标机VxSim(5) 目标映象的运行调试 包:使用 WindSh启动运行程序使用 Browser 观察目标机内存使用情况使用 WindView 逻辑分析器动态分析任务的调度过程使用CrossWind进行debug1 创建工程项目 (1) 启动 Tornado T
8、ornado安装完成后,选择 Windows 的菜单【开始】【程序】【 Tornado2.2 】【 Tornado 】,开始 Tornado,出现如图5-16所示的【 Create Project in New/Existing Workspace 】对话框 如果没有出现如图5-16所示的【 Create Project in New/Existing Workspace 】对话框 , 单击 Tornado 的【 File 】【 New Project. 】菜单。出现【 Create Project inNew/Existing workspace 】对话框。选择创建一个可下载的 (downl
9、oadable) 应用程序 , 如图 5-17 所示。 (2) 单击【 OK 】按钮 , 出现如图5-18所示的 Tornado 应用程序向导,通过此向导创建新的项目。 在图5-18的对话框中, 键入: 项目名称 项目文件的存放路径和目录名 项目描述(可选项) 工作空间的名称和工作空间文件的存放位置 本例中: 项目名称为Projectl“ 项目位置为 C:嵌入式系统基础Project1“ 工作空间为 C:嵌入式系统基础Project1Workspace1.wsp“单击【 Next 】按钮,出现如图 5-19 所示的对话框 ,在这里可以设置应用程序(3) 的工具链。这里从下拉列表中选择使用默认的
10、工具链名称 SIMNTgnu (4) 单击【 Next 】按钮,出现如图5-20 所示的向导的最后一步 , 确认向导前面的选择 (5) (单击【 Finish 】按钮,出现如图5-21 所示的工作空间窗口。工作空间窗口的标题指示工作空间的名称 , 整个工作空间由【Files 】、【 VxWorks 】和【 Builds 】三项选项卡组成 2 在工程项目中创建应用程序 本示例使用Tornado2.2targetsrcdemostart下的例程cobble.c,将该例程的源文件增加到项目 2 在工程项目中创建应用程序 “cobble.c”是一个模拟数据采集系统的多任务的应用程序 (详见教材P100
11、) 第一个任务 (tCosmos) 模拟 ISR, 产生新的数据 第二个任务 (tSchlep) 采集数据 第三个任务 (tCrunch) 计算处理采集的数据, 并得出结果 第四个任务 (tMonitor) 监测这个结果并显示出来。 2 在工程项目中创建应用程序 (l) 从 Tornado 的安装目录“c: Tornado2.2targetsrcdemostart ”下将 “cobble.c” 文件复制到项目所在的目录。 注:这里的Tornado安装目录是默认的安装目录是 c: Tornado2.2 ,项目所在的目录是 C:嵌入式系统基础Project1 (2) 在工作空间的【 Files 】
12、选项卡的 Projectl Files 上右击,选择快捷菜单中的【 Add Files.】 如图 5-22 所示。在出现的【 Add Source File to Project1 】对话框中选择 cobble.c (3) 在工作空间的 Projectl Files 目录下可以看到源文件和可以创建的Downloadable目标映象文件Project1.out,如图5-23所示 3 将项目编译链接生成程序映象 (1) 首先查看默认的项目编译链接的属性。选择工作空间中的【 Builds 】选项卡,打开Project1 Builds目录,右击此目录下的默认创建名称 SIMNTgnu,在快捷菜单中选择
13、【 Properties】,如图5-24 所示。 (2) 出现编译链接属性对话框,如图 5-25 所示。在此对话框中,可以设置编译、汇编、链接的选项。在【 C/C+compiler 】选项卡中 , 可以看到默认地选择了 “Include debug info”, 复选框 , 此选项确保当编译项目的时候具有调试信息 , 且无优化编译 (3) 在工作空间中的【 Bui1ds 】选项卡的 Project1 Builds 目录下, 右击 SIMNTgnu,在快捷菜单中选择【 Build Project1.out 】,如图 5-24 所示。 Tornado 在创建项目之前,出现【 Dependencie
14、s 】对话框(见下图),告知cobble.c文件没有产生 Makefile 依赖关系 (4) 单击【 OK 】按钮 , 开始创建项目。在【 Build Output 】窗口显示项目的编译链接信息(5) ,如图 5-27 所示 若【 Build Output 】窗口中显示了错误和告警信息,则双击错误或告警信息,就会打开相应的源文件,通过指针指示发生错误或告警所在行,进行相应错误的修改,完成后重新Build一次。 4 将程序映象下载到目标机中 可以从工作空间的【 Files 】选项卡上下载程序映象 , 并开始目标机集成仿真器的运行调试。 (l) 打开工作空间窗口中的【 Files 】选项卡,在 P
15、rojectl Files 上右击选择快捷 菜单中的【 Download Project1.out】, 如图 5-28 所示 (2) 单击【是】,出现如图 5-30 所示的【 VxSim-Lite Launch 】对话框。选择默认的Standard simulator 选项 (4) 之后,Tornado提示需要启动一个目标服务器(Target Server),如图 5-32 所示。 注意 , 一次只能运行 VxWorks 目标仿真器的一个实例;如果要关闭仿真器,需要关闭 VxWorks 仿真器窗口 目标服务器管理所有的Tornado主机工具之间以及Tornado与目标之间的通信。目标服务器的名
16、称约定为 “ 目标名主机名 ”,本实例中,目标服务器的名称为 vxsimjsw,在 “Tornado Launch” 工具栏上显示了此目标服务器的名称,如图 5-33 所示 5 程序的运行调试1. 配置与启动运行调试器 (1) 从 Tornado 主窗口 , 选择菜单【 Tools 】【 Options 】【 Debugger】,在自动附着到任务 Auto attach to tasks 选项栏中选择 Always 单选按钮,以便当发生异常时调试器自动附着到任务上,如图 5-36 所示。单击【 OK 】,关闭【 Options 】对话框。 (2) 单击 “Tornado Launch” 工具栏
17、上的Debugger调试器按钮 , 就开始使用CrossWind调试器了 (3) 程序的启动运行 程序的启动运行即可通过CrossWind,也可通过命令行的调试工具WindSh。本实例中采用WindSh启动程序运行 WindSh一个 C 语言的命令解释器 ,可以通过在WindSh的 命令行激活任何已经下载到目标机上的例程。WindSh同时也包含了它自己的一套命令集 , 用于管理任务、访问系统信息、调试等 单击 “Tornado Launch” 工具栏上的Shell按钮 ,就启动WindSh了。在Shell窗口中命令行上输入主例程名字progStart(),则程序启动运行,如图5-36此时可使用
18、CrossWind进行断点设置、单步跟踪等调试 (1) 单击“Tornado Launch” 工具栏上的浏览器按钮 , 就可以开始使用浏览器了 (2) 当出现浏览器窗口后 , 从下拉列表中选择 Memory Usage, 并单击周期性刷新按钮 , 这样就会每隔几秒更新显示。可以看到类似如图 5-37 所示的内存使用情况 可以看到应用程序的内存使用量无限增大,内存被无限制地消耗了,出现了内存泄漏(即使用完毕的内存空间没有被释放) 3使用WindView动态跟踪程序查找错误 WindView 是实时应用程序的逻辑分析器,是一个动态的可视化的实时调试工具 在启动WindView之前需要配置WindV
19、iew,之后运行WindView就可跟踪程序的实时运行情况 在WindView的运行时间内,它将指定的事件信息记录下来,如ContextSwitch(任务的上下文切换)、Task State Transition(任务的状态转移)、Additional Instrumentation(附加的事件)等; 跟踪运行结束后,WindView将记录下来的信息传递给Tornado集成开发环境进行解析,以图形化的方式将程序运行过程中发生的各种信息显示出来,以便开发者分析解决问题 (1) 单击 Tornado Launch工具栏上的WindView Config 按钮,就可显示【 WindView Cont
20、rol 】窗口,同时出现【Collection Configuration】对话框,如图 5-38 所示 在【Collection Configuration 】对话框的下拉列表中选择 Additional Instrumentation , 单击 【 OK 】 (2) 单击【 WindView Control】 窗口的 “Start WV” 按钮 ,开始收集数(3) 几秒钟后,单击 “Look for Event Log” 按钮 ,更新数据收集的状态 (4) 当达到数据缓冲的 50% 以上的时候 , 单击 “Stop WV” 按钮 , 停止收集数据。(5) 在 Shell 的命令行上键入命令
21、停止当前的应用程序 ( 本例中通过键入 progStop 来停止当前的应用程序 ),然后才能将 WindView 数据从模拟目标仿真器上传到主机。 (6) 单击【 WindView Control 】窗口的 “Upload” 按钮 , 将数据上传到主机 (7) 当上传完成后 ,出现一个消息框提示上传完成,单击消息框的【 OK 】按钮 , 显示记录的数据图形化视图如图5-40所示。可以使用 “WindView” 工具栏上的放大和缩小按钮 改变显示的范围大小 在图5-40中的小旗标用于指示信号量状态、水平线指示任务的状态 ( 如执行、阻塞、就绪等 ),例如: 从以上显示的任务视图中可以看出,tCr
22、unch 始终处于 Ready 状态 , 永远没有获得执行 4查找并修改程序错误 (bug ) (1)重新返回应用程序创建状态关闭Browser和WindView Control及其任务视图窗口;点击CrossWind工具栏上的Stop Debugging按钮 ,停止CrossWind的运行 右击Windows任务栏上的Target Server红色小图标,在弹出的快捷菜单上点击【 Shutdown】,关闭目标服务器Target Server,如图5-41所示;然后关闭目标仿真器窗口。此时重新返回到应用程序创建状态 (2) 在工作空间的【 Files 】选项卡中双击 “cobble.c” 文件
23、 ,在编辑器中打开此文件。找到 progStart() 函数,发现 tCrunch 的优先级(240)比 tMonitor的优先级(230)低,导致 tCrunch 永远不被执行,结果数据永远不被处理,节点永远没有从链表中删除,因此内存使用量无限增大,内存被无限制地消耗了(3) 将两个任务的优先级颠倒 , 即tidCrunch=taskspawn(tCrunch,230,0,STACK_SIZE,(FUNCPTR)crunch,0,0,0,0,0,0,0,0,0,0); tidMonitor=taskspawn(tMonitor,240,0,STACK_SIZE,(FUNCPTR)monito
24、r,0,0,0,0,0,0,0,0,0,0);(4) 选择【 Build 】【 Rebuild Al1 】,重新编译链接生成目标程序映象 (5) 重复4节中所有操作步骤,将新的目标程序映象下载到目标机,并启动目标机VxSim和相应的目标服务器 (6) 运行CrossWind和WindSh,在WindSh命令行上输入命令 progStart启动程序运行。此时发现在仿真器窗口和WindSh窗口中均显示了错误信息 , 如图 5-42 和图 5-43 所示 此时CrossWind调试器将自动打开编辑器窗口,指向错误产生的crunch() 函数的位置 if (!(pDiv = NULL) & (*pDi
25、v != 0) /* if (pDiv != NULL) & (*pDiv != 0) */ result = sampleSum / (*pDiv); /* 这里产生被 0 除的错误 (7) 再次Stop Debugging,关闭目标服务器和目标仿真器,重新返回应用程序创建状态 (8) 修改以上 bug 的方法是用下面被注释掉一行语句代替上一行语句,保存文件。修改后的程序代码为: /* if (!(pDiv = NULL) & (*pDiv != 0) */ if (pDiv != NULL) & (*pDiv != 0) result = sampleSum / (*pDiv); (9)
26、重复4节中所有操作步骤,将新的目标程序映象下载到目标机,并启动目标机VxSim和相应的目标服务器 (10) 运行CrossWind和WindSh,在WindSh命令行上输入命令 progStart启动程序运行 此时在仿真器窗口和WindSh窗口中显示运行信息均正常,如图 5-44 和图 5-45 所示 (11) 使用WindView动态跟踪程序,从任务运行视图可以看出,所有的任务都按照一定的次序获得了执行,包括 tCrunch 使用浏览器Browser查看内存使用情况,可以看到,内存消耗只是在一定的范围内循环,应用程序的内存没有无限增大 , 消灭了内存泄漏 (12) 至此,程序的错误修改调试完毕。最后,在 WindSh 中输入 progStop 命令停止程序的运行