cc,ccs,ccui飚车世界ccs有什么用区别

新里程碑:Cocos2d-x v3.0正式版本发布
编辑:dx586
发布时间: 15:38
历过半年多的精心打磨,Cocos2d-x v3.0正式版本最终发布!相比于去年9月份的Cocos2d-x v3.0-alpha版,正式版本在渲染器、性能、兼容性、稳定性等方面都得到了质的提升,并新增对WinPhone8的支持。
Cocos2d-x v...
历过半年多的精心打磨,Cocos2d-x v3.0正式版本最终发布!相比于去年9月份的Cocos2d-x v3.0-alpha版,正式版本在渲染器、性能、兼容性、稳定性等方面都得到了质的提升,并新增对WinPhone8的支持。Cocos2d-x v3.0下载地址:Cocos2d-x v3.0 Release note:Cocos IDE入门指南:此外,引擎团队更分别针对C++、Lua、JavaScript三种编程接口的使用体验做了大量提升,我们来看一下各语言的优化:C++基础底层优化:新渲染器、新API、性能飞跃新的渲染器——更优雅, 更灵活,更易用;可创建渲染队列,每个节点独立发布渲染指令,分解draw命令,实现批量渲染;所有OpenGL集中在渲染器中,使跨平台更加容易;同时,通过创建一个自定义的渲染命令,用回调函数放入渲染逻辑而保留了自定义定制OpenGL的功能。新修改过的API——使用C++11特性取代了 Objective-C 的特性,稳定性与可读性得到提升; 重做了许多容器,直接包装了Std,可自动保存,使用起来更加方便;将object慢慢移除使用,改成Ref来继承;另外还做了基于内存引用技术池,可自动释放内存,方便管理。性能/兼容性/内存分配优化——利用自动剪裁技术,大场景游戏流畅度得到了2-8倍的提升,而Auto-Batching自动模拟合并功能的性能已接近于手调;sortall Children经优化排序算法后加快10倍,visit经过做缓存加快了3倍;兼容性方面提升至90.71%,达到一些国外引擎的三倍,在中国安卓平台上非常好用;CPU平均占用率也降低了36%。增强Lua语言体验: 开发快,测试快,上线快新版本为开发者增强了Lua体验,核心的改进主要有几个方面:1、使用bindngs-generator生成Lua绑定,大大减少了编写pkg文档的工作量;2、对于V3.0新增功能基本做了绑定,例如new Label,EventDispatcher和physics等,同时对原有的一些c++功能也进行了绑定,例如websocket,xmlHttpRequest,Spine,AssetManager和OpenGL相关函数的绑定3、绑定时自动实现了模块化的工作,当前在Lua可以使用的模块有cc,ccs,ccui,sp,gl4、使用ScriptHandlerMgr统一管理Lua function的注册以及反注册5、对于一些类直接使用Lua table传递,例如Point,Rect和Size等6、增加了Lua脚本直接调用ObjectC和Java代码新产品线Cocos2d-JS:HTML5+JSB高效整合原Cocos2d-html5与Cocos2d-JSB现正式整合为一个新的产品线——Cocos2d-JS,为开发者提供一致的使用体验、功能支持,以及清晰的工作流。Cocos2d-JS安装包包含完整的HTML5引擎与JSB运行库,命令行工具提供三步搞定Web与Native全平台部署的便捷功能。首先,Cocos2d-JS统一了使用JS进行开发的开发体验,将HTML5引擎与JSB的API高度统一起来,新文件目录结构使HTML5开发和JSB开发完全共享游戏代码,全平台部署工具也统一了开发后的发布与测试过程,一次开发全平台运行在Cocos2d-JS上将成为再自然不过的开发体验。其次,Cocos2d-JS的发布亦完成了HTML5引擎从2.x到3.0 alpha的飞跃,核心的改进主要有极大简化的游戏启动代码,全新的JS风格API,更强大的事件管理器,以及更易用的单例对象。在3.0正式版之前还将增加提升性能的Bake Node与更加易用的Action API。工具方面,除了全平台部署工具,Cocos2d-JS还提供模块化配置能力,可将引擎中不需要的东西全部剔掉。后续将新增界面工具来自动完成打包压缩,目前最小引擎版本打包完之后为120K。同时,可视化调试工具可获得当前场景的结构树,进行排版调整、属性修改、简化UI调试等工作。此外,Intel还贡献BENCHMARK工具用于在不同机型、浏览器上跑分,帮助项目定位推出市场之后能覆盖到哪些用户。CocoStudio 新增Code IDE:打造完整工具链引擎之外,Cocos2d-x团队的愿景更是成为一个跨平台游戏开发的完整工具链,包含从快速原型开发到最终完成一个高性能产品,帮助开发者降低成本与缩短周期,推动开发者生态圈。工具链的第一部分是框架,调API使用SDK,包括渲染器、场景管理等;第二部分是CocoStudio编辑器;第三部分是工具集。目前CocoStudio已更新至v1.3版本,优化体验的同时新增了大量新功能、新亮点:动画编辑器增加批量操作动画帧,以及洋葱皮与动画曲线功能;UI编辑器支持扩展UI插件;场景编辑器提供炫酷的触发器功能,让开发者不写代码即可做游戏。此外,CocoStudio v2.0版本也在紧锣密鼓地进行中,将实现跨平台,计划支持JS与LUA绑定,规划于今年底前发布。本次,CocoStudio还新增了基于Eclipse的跨平台Code IDE ,专为 Cocos2d-x Lua & JavaScript 开发人员准备。通过Cocos IDE,可方便地创建游戏工程、编写并且调试代码、实时查看代码修改效果、最终直接发布成一个可上架的安装包。在广大开发者与contributor的支持与陪伴下,Cocos2d-x已经成为全球在手机游戏开发商及独立开发者中占有率最高的游戏引擎,在过去30年中,中国没有第二个团队在基础产品及技术上在全球获得如此高的接受度与占有率。本次v3.0正式版本将致力打造一个新的里程碑,以开源高效的最新提升,为开发者带来更加流畅友好的开发过程,见证开发者创造新的奇迹。
暂无相关推荐
2014ChinaJoy导游指南大全
射雕英雄传手游超好玩礼包
太极熊猫3:猎龙至尊豪华礼包
霹雳江湖新版本媒体礼包
元气战姬学院手游独家尊享礼包
(C) Copyright (C)
超好玩 All Rights Reserved当前位置: >>
第一章CCS 概述第一章CCS 概述本章概述 CCS(Code Composer Studio)软件开发过程、CCS 组件及 CCS 使用的文件和变量。 CCS 提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、 嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率
。1.1 CCS 概述CCS 提供了基本的代码生成工具,它们具有一系列的调试、分析能力。 CCS 支持如下所示的开发周期的所有阶段。设计概念性规划编程和编译创建工程文件、 编写源程序和配 置文件调试语法检查、探 测点设置和日 志保存等分析实时调试、统 计和跟踪在使用本教程之前,必须完成下述工作: t 安装目标板和驱动软件 。按照随目标板所提供的说明书安装。如果 你正在用仿真器或目标板,其驱动软件已随目标板提供,你可以按产 品的安装指南逐步安装。 t 安 装 CCS. 遵 循 安 装 说 明 书 安 装 。 如 果 你 已 有 CCS 仿 真 器 和 TMS320c54X 代码生成工具,但没有完整的 CCS,你可以按第二章和第 四章所述的步骤进行安装。 t 运行 CCS 安装程序 SETUP. 你可以按步骤执行第二章和第四章的实 验。SETUP 程序允许 CCS 使用为目标板所安装的驱动程序。 CCS 包括如下各部分: t CCS 代码生成工具:参见 1.2 节 t CCS 集成开发环境(IDE) :参见 1.3 节 t DSP/BIOS 插件程序和 API:参见 1.4 节1 第一章CCS 概述t RTDX 插件、主机接口和 API:参见 1.5 节 CCS 构成及接口见图 1-1。图 1-1CCS 构成及接口2 第一章CCS 概述1.2 代码生成工具代码生成工具奠定了 CCS 所提供的开发环境的基础。图 1-2 是一个典 型的软件开发流程图,图中阴影部分表示通常的 C 语言开发途径,其它部 分是为了强化开发过程而设置的附加功能。图 1 - 2 软件开发流程图 1-2 描述的工具如下: t C 编 译 器 (C com p iler) 产 生 汇 编 语 言 源 代 码 , 其 细 节 参 见 comp TMS320C54x 最优化 C 编译器用户指南。 t 汇 编 器 (assembler) 把 汇 编 语 言 源 文 件 翻 译 成 机 器 语 言 目 标 文 件,机器语言格式为公用目标格式(COFF) ,其细节参见 TMS320C54x 汇编语言工具用户指南。 t 连接器 (linker) 把多个目标文件组合成单个可执行目标模块。它3 第一章CCS 概述一边创建可执行模块,一边完成重定位以及决定外部参考。连接器的 输入是可重定位的目标文件和目标库文件,有关连接器的细节参见 TMS320C54x 最优化 C 编译器用户指南和汇编语言工具用户指南。 t 归档器 ( archiver ) 允许你把一组文件收集到一个归档文件中。归 归档器( archiver) 档器也允许你通过删除、替换、提取或添加文件来调整库,其细节参 见 TMS320C54x 汇编语言工具用户指南。 t 助 记 符 到 代 数 汇 编 语 言 转 换 公 用 程 序 ( mnimonic_to_algebric utility) assembly translator utility ) 把含有助记符指令的汇编语言源文 件转换成含有代数指令的汇编语言源文件,其细节参见 TMS320C54x 汇编语言工具用户指南。 t 你 可 以 利 用 建 库 程 序 ( library_build utility ) 建 立 满 足 你 自 己 utility) 要求的“运行支持库”,其细节参见 TMS320C54x 最优化 C 编译器用户 指南。 t 运行支持库 (run_time_s upport libraries) 它包括 C 编译器所支 (run_time_support 持的 ANSI 标准运行支持函数、编译器公用程序函数、浮点运算函数 和 C 编译器支持的 I/O 函数,其细节参见 TMS320C54x 最优化 C 编译 器用户指南。 t 十六进制转换公用程序 (hex conversion utility) 它把 COFF 目标 文 件 转 换 成 TI-Tagged 、 ASCII-hex 、 Intel 、 Motorola-S 、 或 Tektronix 等目标格式, 可以把转换好的文件下载到 EPROM 编程器中, 其细节参见 TMS320C54x 汇编语言工具用户指南。 t 交叉 引用列表器 ( cross_reference lister ) 它用目标文件产生参 lister) 照列表文件,可显示符号及其定义,以及符号所在的源文件,其细节 参见 TMS320C54x 汇编语言工具用户指南。 t 绝对列表器 ( absolute lister ) 它输入目标文件,输出.abs 文件, 绝对列表器( lister) 通过汇编.abs 文件可产生含有绝对地址的列表文件。如果没有绝对 列表器,这些操作将需要冗长乏味的手工操作才能完成。4 第一章CCS 概述1.3 CCS 集成开发环境CCS集成开发环境(IDE)允许编辑、编译和调试DSP目标程序。1.3.1 编辑源程序CCS允许编辑C源程序和汇编语言源程序,你还可以在C语句后面显 示汇编指令的方式来查看C源程序。集成编辑环境支持下述功能: t 用彩色加亮关键字、注释和字符串。 t 以圆括弧或大括弧标记C程序块, 查找匹配块或下一个圆括弧或大括 弧。 t 在一个或多个文件中查找和替代字符串,能够实现快速搜索。 t 取消和重复多个动作。 t 获得“上下文相关”的帮助。 t 用户定制的键盘命令分配。5 第一章CCS 概述1.3.2 创建应用程序应用程序通过工程文件来创建。 工程文件中包 括C源程序、汇编源程序、目标文件、库文件、连 接命令文件和包含文件。编译、汇编和连接文件 时,可以分别指定它们的选项。在CCS中,可以选 择完全编译或增量编译,可以编译单个文件,也 可以扫描出工程文件的全部包含文件从属树,也 可以利用传统的makefiles文件编译。1.3.3 调试应用程序CCS提供下列调试功能: t 设置可选择步数的断点 t 在断点处自动更新窗口 t 查看变量 t 观察和编辑存储器和寄存器 t 观察调用堆栈 t 对流向目标系统或从目标系统流出的数据采用探针工具观察,并收 集存储器映象 t 绘制选定对象的信号曲线 t 估算执行统计数据 t 观察反汇编指令和C指令 CCS提供GEL语言,它允许开发者向CCS菜单中添加功能。6 第一章CCS 概述1.4 DSP/BIOS 插件在软件开发周期的分析阶段,调试依赖于时间的例程时,传统调试方法 效率低下。 DSP/BIOS插件支持实时分析,它们可用于探测、跟踪和监视具有实时性 要求的应用例程,下图显示了一个执行了多个线程的应用例程时序。图 1-3应用例程中各线程时序DSP/BIOS API 具有下列实时分析功能: t 程序跟踪( Program tracing )显示写入目标系统日志(target log) 程序跟踪( tracing) 的事件,反映程序执行过程中的动态控制流。 t 性能监视 ( Performance monitoring ) 跟踪反映目标系统资源利用 monitoring) 情况的统计表,诸如处理器负荷和线程时序。 t 文件流( File streaming )把常驻目标系统的I/O对象捆绑成主机文 文件流( streaming) 档。 DSP/BIOS 也提供基于优先权的调度函数,它支持函数和多优先权线程 的周期性执行。1.4.1 DSP/BIOS 配置在CCS环境中,可以利用DSP/BIOS API定义的对象创建配置文件,这类 文件简化了存储器映象和硬件ISR矢量映象, 所以, 即使不使用DSP/BIOS API 时,也可以使用配置文件。 配置文件有两个任务: t 设置全局运行参数。 t 可视化创建和设置运行对象属性,这些运行对象由目标系统应用程 序的DSP/BIOS API函数调用,它们包括软中断,I/O管道和事件日志。7 第一章CCS 概述在CCS中打开一个配置文件时,其显示窗口如下:DSP/BIOS对象是静态配置的,并限制在可执行程序空间范围内,而运行 时创建对象 的API调 用需要目标 系统额 外 的开销(尤 其是代 码 空间) 。静态 配置策略通 过去除 运 行代码能够 使目标 程 序存储空间 最小化 , 能够优化内 部数据结构 ,在程 序 执行之前能 够通过 确 认对象所有 权来及 早 地检测出错 误。 保存配置文件时将产生若干个与应用程序联系在一起的文件, 这些文件 的细节参见1.7.2。1 . 4 . 2 DSP/BIOS API 模块传 统 调 试 ( debuging ) 相 对 于 正 在 执 行 的 程 序 而 言 是 外 部 的 , 而 DSP/BIOS API 要求将目标系统程序和特定的 DSP/BIOS API 模块连接在一 起。通过在配置文件中定义 DSP/BIOS 对象,一个应用程序可以使用一个或 多个 DSP/BIOS 模块。 在源代码中, 这些对象声明为外部的, 并调用 DSP/BIOS API 功能。 每个 DSP/BIOS 模块都有一个单独的 C 头文件或汇编宏文件,它们可以 包含在应用程序源文件中,这样能够使应用程序代码最小化。 为了尽量少地占用目标系统资源, 必须优化 和汇编源程序) (C DSP/BIOS API 调用。 DSP/BIOS API 划分为下列模块,模块内的任何 API 调用均以下述代码 开头。 t CLK 。片内定时器模块控制片内定时器并提供高精度的 32 位实时逻 CLK。8 第一章CCS 概述辑时钟,它能够控制中断的速度,使之快则可达单指令周期时间,慢 则需若干毫秒或更长时间。 t HST 。主机输入/输出模块管理主机通道对象,它允许应用程序在目 HST。 标系统和主机之间交流数据。主机通道通过静态配置为输入或输出。 t HWI 。 硬件 中 断模 块 提 供对 硬 件 中 断 服务 例 程的 支 持 , 可 在配 置文 HWI。 件中指定当硬件中断发生时需要运行的函数。 t IDL 。 休眠 功 能模 块 管 理休 眠 函 数 , 休眠 函 数在 目 标 系 统 程序 没有 IDL。 更高优先权的函数运行时启动。 t LOG 。日志模块管理 LOG 对象,LOG 对象在目标系统程序执行时实时 LOG。 捕 捉 事 件 。 开 发 者 可 以 使 用 系 统 日 志 或 定 义 自 己 的 日 志 , 并 在 CCS 中利用它实时浏览讯息。 t MEM 。 存储 器 模块 允 许 指定 存 放 目 标 程序 的 代码 和 数 据 所 需的 存储 MEM。 器段。 t PIP 。 数据 通 道模 块 管 理数 据 通 道 , 它被 用 来缓 存 输 入 和 输出 数据 PIP。 流。这些数据通道提供一致的软件数据结构,可以使用它们驱动 DSP 和其它实时外围设备之间的 I/O 通道。 t PRD 。周期函数模块管理周期对象,它触发应用程序的周期性执行。 PRD。 周期对象的执行速率可由时钟模块控制或 PRD_tick 的规则调用来 管理, 而这些函数的周期性执行通常是为了响应发送或接收数据流的 外围设备的硬件中断。 t RTDX 。实时数据交换允许数据在主机和目标系统之间实时交换,在 RTDX。 主机上使用自动 OLE 的客户都可对数据进行实时显示和分析, 详细资 料参见 1.5。 t STS 。 统计 模 块管 理 统 计累 积 器 , 在 程序 运 行时 , 它 存 储 关键 统计 STS。 数据并能通过 CCS 浏览这些统计数据。 t SWI 。 软件 中 断模 块 管 理软 件 中 断 。 软件 中 断与 硬 件 中 断 服务 例程 SWI。 (ISRs)相似。当目标程序通过 API 调用发送 SWI 对象时,SWI 模块 安排相应函数的执行。软件中断可以有高达 15 级的优先级,但这些 优先级都低于硬件中断的优先级。 t TRC 。 跟踪 模 块管 理 一 套跟 踪 控 制 比 特, 它 们通 过 事 件 日 志和 统计 TRC。 累积器控制程序信息的实时捕捉。如果不存在 TRC 对象,则在配置文 件中就无跟踪模块。 有关各模块的详细资料,可参见 CCS 中 的在线帮助,或 TMS320C54 × DSP/BIOS 用户指南。9 第一章CCS 概述1.5 1. 5 硬件仿真和实时数据交换TI DSPs提供在片仿真支持,它使得CCS能够控制程序的执行,实时监视 程序运行 。增强 型JTAG连接提 供了对 在片 仿真的支 持,它 是一 种可与任 意 DSP系统相连的低侵扰式的连接。仿真接口提供主机一侧的JTAG连接,如TI XSD510。为方便起见,评估板提供在板JTAG仿真接口。 在片仿真硬件提供多种功能: t DSP的启动、停止或复位功能 t 向DSP下载代码或数据 t t t t 检查DSP的寄存器或存储器 硬件指令或依赖于数据的断点 包括周期的精确计算在内的多种记数能力 主机和DSP之间的实时数据交换(RTDX)CCS提供在片能力的嵌入式支持;另外,RTDX通过主机和DSP APIs提供 主 机 和 DSP之 间 的 双 向 实 时 数 据 交 换 , 它 能 够 使 开 发 者 实 时 连 续 地 观 察 到 DSP应用的实际工作方式。在目标系统应用程序运行时,RTDX也允许开发者 在主机和DSP设备 之 间传送数 据,而 且这 些数据可 以在使 用自 动OLE的客 户 机上实时显示和分析,从而缩短研发时间。 RTDX由目标系统和主机两部分组成。小的RTDX库函数在目标系统DSP上 运行。开发者通过调用RTDX软件库的API函数将数据输入或输出目标系统的 DSP,库函数通过在片仿真硬件和增强型JTAG接口将数据输入或输出主机平 台,数据在DSP应用程序运行时实时传送给主机。图 1-4RTDX系统组成 RTDX 系统组成10 第一章CCS 概述在主机平台上,RTDX库函数与CCS一道协同工作。显示和分析工具可以 通过COM API与RTDX通信, 从而获 取目 标 系统数 据,或 将数 据 发送给DSP应 用例程。开发者可以使用标准的显示软件包,诸如National Instruments’ LabVIEW,Quinn-Curtis’ Real-Time Graphics Tools,或Microsoft Excel。 同时,开发者也可研制他们自己的Visual Basic或Visual C++应用程序。图 1-5RTDX实例 RTDX 实例RTDX能 够 记 录 实 时 数 据 , 并 可 将 其 回 放 用 于 非 实 时 分 析 。 下 述 样 本 由 National Instruments’ LabVIEW 软件产生。在目标系统上,一个原始信号 通 过 FIR滤 波 器 , 然 后 与 原 始 信 号 一 起 通 过 RTDX发 送 给 主 机 。 在 主 机 上 , LabVIEW显示屏通过RTDX COM API获取数据,并将它们显示在显示屏的左边。 利用信号的功率谱可以检验目标系统中FIR滤波器是否正常工作。处理后的 信号通过LabVIEW,将其功率谱显示在右上部分;目标系统的原始信号通过 LabVIEW的FIR滤波器 ,再将 其功率 谱显 示 在右下 部分。 比较 这 两个功 率谱 便可确认目标系统的滤波器是否正常工作。 RTDX适合于各种控制、伺服和音频应用。例如,无线电通信产品可以通 过RTDX捕 捉语音 合成 算法的输 出以检 验语 音应用程 序的执 行情 况;嵌入 式 系统也可 从RTDX获益 ;硬磁盘 驱动 设计者 可以利用 RTDX测试他 们的应用 软 件,不会因 不正确 的 信号加到伺 服马达 上 而与驱动发 生冲突 ; 引擎控制器 设 计 者 可 以 利 用 RTDX 在 控 制 程 序 运 行 的 同 时 分 析 随 环 境 条 件 而 变 化 的 系 数。对于这 些应用 , 用户都可以 使用可 视 化工具,而 且可以 根 据需要选择 信息显示方式。未来的 TI DSPs 将增加RTDX的带宽,为更多的应用提供更11 第一章CCS 概述强的系统可视性。关于RTDX的详细资料,请参见CCS中RTDX在线帮助。12 第一章CCS 概述1.6 1. 6 第三方插件第三方软件提供者可创建AxtiveX插件扩展CCS功能, 目前已有若干第三 方插件用于多种用途。13 第一章CCS 概述1.7 1. 7 CCS 文件和变量本节简述 CCS 文件夹、CCS 的文件类型及 CCS 环境变量。1 . 7 . 1 安装文件夹安 装 进 程 将 在 安 装 CCS的 文 件 夹 ( 典 型 情 况 为 : c:\ti) 中 建 立 子 文 件 夹。此外,子文件夹又建立在Windows目录下(c:\windows or c:\winnt) 。 C:\ti包含以下目录: t b in in.各种应用程序 t c5400 \ bios c5400\bios。DSP/BIOS API的程序编译时使用 的文件 t c5400 \ cgtools c5400\cgtools.Texas instruments源 代 码 生 成工具 t c5400 \ examples c5400\examples.源程序实例 t c5400 \ rtdx c5400\rtdx. RTDX文件 t t t t c5400\tutorial.本手册中使用的实例文件 c5400 \ tutorial cc\bin.关于CCS环境的文件 cc \ bin cc\gel.与CCS一起使用的GEL文件 cc \ gel docs.PDS格式的文件和指南 docst myprojects myprojects.用户文件夹1 . 7 . 2 文件扩展名以下目录结构被添加到Windows目录: t ti \ drivers. ti\drivers.各种DSP板驱动文件 t ti \ plugins. ti\plugins.和CCS一起使用的插件程序 t ti \ uninstall. ti\uninstall.支持卸载CCS软件的文件 当使用CCS时,你将经常遇见下述扩展名文件: t project.mak. project.mak.CCS使用的工程文件 t program.c.C程序源文件 program.c.14 第一章CCS 概述t program.asm. 汇编程序源文件 t filename.h. filename.h.C程序的头文件,包含DSP/BIOS API模块的头文件 t filename.lib. filename.lib.库文件 t project.cmd. project.cmd.连接命令文件 t program.obj. program.obj.由源文件编译或汇编而得的目标文件 t program.out. program.out.(经完整的编译、汇编以及连接的)可执行文件 t project.wks. 存储环境设置信息的工作区文件, t program.cdb.配置数据库文件。采用DSP/BIOS API的应用程序 需要 program.cdb. 这类文件,对于其它应用程序则是可选的。 保存配置文件时将产生下列文件: programcfg.cmd.连接器命令文件 programcfg.cmd. programcfg.h54.头文件 programcfg.h54. programcfg.s54.汇编源文件 programcfg.s54.1 . 7 . 3 环境变量安 装 程 序 在 autoexec.bat文 件 中 定 义 以 下 变 量 ( 对 Windows 95和 98) 或环境变量(对于Windows NT): 表1-1 环境变量 描 述 变 量 C54X_A_DIR 由 汇 编 程 序 使 用 的 搜 索 表 和 用 于 DSP/BIOS、 RTDX以 及 代 码 生 成 工 具 的 包 含 文 件 。 可 参 见 TMS320C54X汇编语言工具用户指南。 C54X_C_DIR 由 编 译 程 序 和 连 接 程序 使 用 的 搜 索 表 和 用于 DSP/BIOS、 RTDX以 及 代 码 生 成 工 具 的 包 含 文 件 。 可 参 见 TMS320C54X 最 佳 C编 译 器 用 户 指 南。 PATH 添 加 到 路 径 定 义 中 的文 件 夹 列 表 。 缺 省 将添 加 文 件 夹 c:\ti\c5400\cgtools\bin 和 c:\ti\bin。15 第一章CCS 概述1.7.4 增加 DOS 环境空间如果使用的是Windows 95,你可能需要增加DOS界面的环境空间,以便 支持建立一个CCS应用所需的环境变量。 把下一行添加到config.sys文件中,然后重新启动计算机: shell=c:\ /e:4096 /p16 第二章开发一个简单的应用程序第二章开发一个简单的应用程序本 章 使 用 hello world实 例 介 绍 在 CCS中 创 建 、 调 试 和 测 试 应 用 程 序 的 基本步骤;介绍CCS的主要特点,为在CCS中深入开发DSP软件奠定基础。 在使用本实例之前,你应该已经根据安装说明书完成了CCS安装。建议 在使用CCS时利用 目 标板而不 是仿真 器。 如果没有CCS而只 有 代码生成 工具 和Code Composer或者是利用仿真器在进行开发,你只要按第二章和第四章 中的步骤执行即可。2 . 1 创建工程文件在 本章 中 , 将 建立 一 个 新的 应 用 程 序, 它 采 用标 准 库 函 数来 显 示 一条 hello world 消息。 1. 如 果 CCS 安 装 在 c:\ti 中 , 则 可 在 c:\ti\myprojects 建 立 文 件 夹 hello1 。 若 将 CCS 安 装 在 其 它 位 置 , 则 在 相 应 位 置 创 建 文 件 夹 ( hello1。 ) 2. 将 c:\ti\c5400\tutorial\hello1 中的所有文件拷贝到上述新文件夹。 3. 从 Windows Start 菜单中选择 Programs→Code Composer Studio ‘C5400 →CCStudio。(或者在桌面上双击 Code Composer Studio 图标。)注 : CCS 设置17 第二章开发一个简单的应用程序如果第一次启动 CCS 时出现错误信息,首先确认是否已经安装了 CCS。如果利用 目标板进行开发,而不是带有 CD-ROM 的仿真器,则可参看与目标板一起提供的文档 以设置正确的 I/O 端口地址。4. 选择菜单项 Project→New。 5. 在 Save New Project As 窗 口 中 选 择 你 所 建 立 的 工 作 文 件 夹 并 点 击 Open。 键入 myhello 作为文件名并点击 Save, 就创建了 myhello.mak CCS 的工 程 文 件, 它 存储 你的 工 程 设置 , 并且 提供 对 工 程所 使 用的 各种 文 件的引用。18 第二章开发一个简单的应用程序2 . 2 向工程添加文件1. 选择 Project→Add Files to Project,选择 hello.c 并点击 Open。 2. 选择 Project→Add Files to Project,在文件类型框中选择*.asm。 选择 vector.asm 并点击 Open。该文件包含了设置跳转到该程序的 C 入口点的 RESET 中断(c_int00)所需的汇编指令。(对于更复杂的程 序,可在 vector.asm 定义附加的中断矢量,或者,可用 3.1 节上所说 明的 DSP/BIOS 来自动定义所有的中断矢量) 3. 选择 Project→Add Files to Project,在文件类型框中选择*.cmd。 选择 hello.cmd 并点击 Open,hello.cmd 包含程序段到存储器的映射。 4. 选择 Project→Add Files to Project,进入编 译 库 文 件 夹 ( C:\ti\c5400\cgtools\lib) 在 。 文件类型框中选择*.o*,*.lib。选择 rts.lib 并点击 Open,该库文件对目标系统 DSP 提供运 行支持。 5. 点 击 紧 挨 着 Project、 Myhello.mak、 Library 和 Source 旁边的符号+展开 Project 表,它称 之为 Project View。注 : 打开 Project View如果看不到 Project View,则选择 View→Project。如果这时选择过 Bookmarks 图标,仍看不到 Project View,则只须再点击 Project View 底部的文件图标即可。6. 注意包含文件还没有在 Project View 中出现。在工程的创建过程中, CCS 扫描文件间的依赖关系时将自动找出包含文件, 因此不必人工地向 工程中添加包含文件。在工程建立之后,包含文件自动出现在 Project View 中。 如果需要从工程中删除文件,则只需在 Project View 中的相应文件上 点击鼠标右键,并从弹出菜单中选择 Remove from project 即可。 在编译工程文件时,CCS 按下述路径顺序搜索文件: t 包含源文件的目录 t 编译器和汇编器选项的 Include Search Path 中列出的目录(从左 到右) t 列在 C54X_C_DIR(编译器)和 C54X_A_DIR(汇编器)环境变量定19 第二章开发一个简单的应用程序义中的目录(从左到右) 。20 第二章开发一个简单的应用程序2 . 3 查看源代码1. 双击Project View中的文件hello.c,可在窗口的右半部看到源代码。 2. 如想使窗口更大一些,以便能够即时地看到更多的源代码,你可以选择 Option→Font使窗口具有更小的字型。 /* ======== hello.c ======== */#include &stdio.h& #include &hello.h& #define BUFSIZE 30 struct PARMS str = { , 213, 9432, &str }; /** ======== main ========**/ void main() { #ifdef FILEIO char scanStr[BUFSIZE]; char fileStr[BUFSIZE]; size_t readS FILE * #endif /* write a string to stdout */ puts(&hello world!\n&); #ifdef FILEIO /* clear char arrays */ for (i = 0; i & BUFSIZE; i++) {21 第二章开发一个简单的应用程序scanStr[i] = 0 /* deliberate syntax error */ fileStr[i] = 0; } /* read a string from stdin */ scanf(&%s&, scanStr); /* open a file on the host and write char array */ fptr = fopen(&file.txt&, &w&); fprintf(fptr, &%s&, scanStr); fclose(fptr); /* open a file on the host and read char array */ fptr = fopen(&file.txt&, &r&); fseek(fptr, 0L, SEEK_SET); readSize = fread(fileStr, sizeof(char), BUFSIZE, fptr); printf(&Read a %d byte char array: %s \n&, readSize, fileStr); fclose(fptr); #endif }当没有定义FILEIO时, 采用标准puts()函数显示一条hello world消息, 它只是一 个简 单程序 。当定义 了FILEIO后 (见2.5节) 该程序 给出一个 输 , 入提示,并将输入字符串存放到一个文件中,然后从文件中读出该字符串, 并把它输出到标准输出设备上。22 第二章开发一个简单的应用程序2 . 4 编译和运行程序CCS 会自动将你所作的改变保存到工程设置中。在完成上节之后,如果 你退出了 CCS,则通过重新启动 CCS 和点击 Project→Open,即可返回到你 刚才停止工作处。注 : 重新设置目标系统 DSP如果第一次能够启动 CCS,但接下来得到 CCS 不能初始化目标系统 DSP 的出错 信息则可选择 Debug→Reset DSP 菜单项。若还不能解决上述问题,你可能需要运行 你的目标板所提供的复位程序。为了编译和运行程序,要按照以下步骤进行操作: 1. 点 击 工 具 栏 按 钮 或选择 Project→Rebuild All ,CCS 重新编译、 汇编 和 连 接工 程 中的 所有 文 件 ,有 关 此过 程的 信 息 显示 在 窗口 底部 的 信息框中。 2. 选择 File→Load Program,选择刚重新编译过的程序 myhello.out(它 应该在 c:\ti\myprojects\hello1 文件夹中,除非你把 CCS 安装在别 的 地 方 )并 点 击 Open。 CCS 把 程 序 加 载 到 目 标 系 统 DSP 上 , 并 打 开 Dis_Assembly 窗口,该窗口显示反汇编指令。 (注意,CCS 还会自动打 开 窗 口 底 部 一 个 标 有 Stdout 的 区 域 , 该 区 域 用 以 显 示 程 序 送 往 Stdout 的输出。 ) 3. 点击 Dis_Assembly 窗口中一条汇编指令(点击指令,而不是点击指令 的地址或空白区域) 。按 F 1 键。CCS 将搜索有关那条指令的帮助信息。 这是一种获得关于不熟悉的汇编指令的帮助信息的好方法。 4. 点 击 工 具 栏 按 钮 或选择 Debug→Run。注 : 屏幕尺寸和设置工具栏有些部分可能被Build窗口隐藏起来,这取决于屏幕尺寸和设置。为了看 到整个工具栏,请在Build窗口中点击右键并取消Allow Docking选择。当运行程序时,可在Stdout窗口中看到hello world消息。23 第二章开发一个简单的应用程序2 . 5 修改程序选项和纠正语法错误在前一节中,由于没有定义 FILEIO,预处理器命令(#ifdef 和#endif) 之间的程序没有运行。在本节中,使用 CCS 设置一个预处理器选项,并找 出和纠正语法错误。 1. 选择 Project→Options。 2. 从 Build Option 窗口的 Compiler 栏的 Category 列表中选择 Symbles。 在 Define Symbles 框中键入 FILEIO 并按 Tab 键。 注意,现在窗口顶部的编译命令包含-d 选项,当你重新编译该程序时, 程序中#ifdef FILEIO 语句后的源代码就包含在内了。 (其它选项可以 是变化的,这取决于正在使用的 DSP 板。 )3. 点击 OK 保存新的选项设置。 4. 点击(Rebuild All)工具栏按钮或 选 择 Project → Rebuild All。无论何时,只要工程选项改变,就必须重新编译所有文件。 5. 出现一条说明程序含有编译错误的消息, 点击 Cancel。 Build tab 区 在24 第二章开发一个简单的应用程序域移动滚动条,就可看到一条语法出错信息。6. 双击描述语法错误位置的红色文字。注意到 hello.c 源文件是打开的, 光标会落在该行上: fileStr[i] = 0 7. 修改语法错误(缺少分号) 。注意,紧挨着编辑窗口题目栏的文件名旁 出现 一 个星 号 (*) 表明 源 代码 已 被修 改 过。 当 文件 被 保存 时 ,星 号 , 随之消失。 8. 选择 File→Save 或按 Ctrl+S 可将所作的改变存入 hello.c。 9. 点击(Incremental Build)工具栏按钮或 选择 Project→Build, CCS 重新编译已被更新的文件。25 第二章开发一个简单的应用程序2 . 6 使用断点和观察窗口当 开发 和 测 试 程序 时 , 常常 需 要 在 程序 执 行 过程 中 检 查 变量 的 值 。在 本节中,可用断点和观察窗口来观察这些值。程序执行到断点后,还可以 使用单步执行命令。 1. 选择 File→Reload Program. 2. 双击 Project View 中的文件 hello.c。可以加大窗口,以便能看到更 多的源代码。 3. 把光标放到以下行上: fprintf(fptr, “%S”, scacStr); 4. 点 击 工 具 栏 按 钮或按 F9, 该行显示为高亮紫红色。 (如果愿意 的话,可通过 Option→Color 改变颜色。 ) 5. 选择 View→Watch Window。CCS 窗口的右下角会出现一个独立区域, 在程序运行时,该区域将显示被观察变量的值。 6. 在 Watch Window 区域中点击鼠标右键,从弹出的表中选择 Insert New Expression。 7. 键 入 表 达 式 *scanStr 并 点 击 OK。 8. 注意局部变量*scanStr 被列在 Watch window 中,但由于程序 当前并未执行到该变量的 main()函数,因此没有定义。 9. 选择 Debug→Run 或按 F5。 10. 在 相 应 提 示 下 , 键 入 goodbye 并点击 OK。注意,Stdout 框以 蓝色显示输入的文字。 还应注意,Watch Window 中显 示出*scanStr 的值。在键 入 一个 输 入字 符 串之 后 ,程 序 运行 并 在断 点 处停 止 。程 序 中将 要26 第二章开发一个简单的应用程序执行的下一行以黄色加亮。 11. 点击(Step Over)工具栏按钮或 数 fprintf()之后。 12. 用 CCS 提供的 step 命令试验: ■ Step Into (F2) ■ Step over (F10) ■ Step Out (Shift F7) ■ Run to Cursor (Ctrl F10) 13. 点 击 工 具 栏 按 钮 或按 F5 运行程序到结束。 按 F10 以便执行到所调用的函27 第二章开发一个简单的应用程序使用观察窗口观察 2 .7 使用观察窗口观 察 structure 变量观察窗除了观察简单变量的值以外,还可观察结构中各元素元素的值。 1. 在 watch Window 区域中点击鼠标右键,并从弹出表中选择 Insert New Expression。 2. 键入 str 作为表达式并点击 OK。显示着+str={…}的一行出现在 Watch Window 中。+符号表示这是一个结构。回顾 2.3,类型为 PARMS 的结构 被声明为全局变量,并在 hello.c 中初始化。结构类型在 hello.h 中 定义。 3. 点击符号+。CCS 展开这一行,列出该结构的所有元素以及它们的值。4. 双击结构中的任意元素就可打开该元素的 Edit Variable 窗口。 5. 改变变量的值并点击 OK。注意 Watch Window 中的值改变了,而且其颜 色也相应变化,表明已经该值已经人工修改了。 6. 在 Watch Window 中选择 str 变量并点击右键,从弹出表中选择 Remove Cuurent Expression。在 Watch Window 中重复上述步骤。 7. 在 Watch Window 中点击右键,从弹出表中选择 Hide 可以隐藏观察窗 口。 8. 选择 Debug→Breakpoits。在 Breakpoints tab 中点击 Delete All, 然后点击 OK,全部断点都被清除。28 第二章开发一个简单的应用程序2 .8 测算源代码执行时间在本节中,将使用 CCS 的 profiling 功能来统计标准 puts()函数的执 行情况,可以把这些结果与 3.4 节中采用 DSP/BIOS API 显示 hello world 消息的相应结果相比较。 1. 选择 File→Reload Program。 2. 选择 Profiler→Enable Clock。 标记 “√” 出现在 Profile 菜单 Enable Clock 项的旁边,该选项使能就可计算指令周期。 3. 在 Project View 中双击文件 hello.c. 4. 选择 View→Mixed Source/ASM,灰色的汇编指令紧随在 C 源代码行后 面。 5. 将光标放在下述行上: puts(“hello world!\n”); 6. 点 击 工 具 栏 按 钮 (Toggle Profile_point),该 C 源代码行和第 一条汇编指令被用绿色加亮。 7. 向下移动滚动条,将光标停在以下行上:for (i = 0; i&BUFSIZE;i++);{8. 点 击 工 具 栏 按 钮或者在该代码行上点击右键并从弹出菜单中选择 Toggle Profile Pt。有关 测 试点 的 统计 数 据报 告 显示 自 前一 个 测试 点 或程 序 开始 运 行以 来 到本测试点所需的指令周期数。本例中,第二个测试点的统计数据报告显 示自 puts()开始执行到该测试点所需的指令周期数。 9. 选择Profile→View Statistics,窗口底部出现一个显示测试点统计数 据的区域。29 第二章开发一个简单的应用程序10. 通过拖拽该区域的边缘可调整其大小。注 : 上图中的line数可能会不同 上图中的 line数可能会不同 line本手册中 屏幕上所 显示的line数可 能会和 当前所使用的 软件版本 显示的line数 不同。11. 点 击 (RUN) 工 具 栏 按 钮或按F5键运行 该程序 并在提示窗口 中键入一串字符。 12. 注 意 对 第 二 个 测 试 点 所 显 示 的 指 令 周 期 数 , 它 应 该 大 约 为 2800个 周 期 (显示的实际数目可能会变化) ,这是执行puts()函数所需的指令周期 数。由于这些指令只执行了一次,所以平均值、总数、最大值和最小值 都是相同的。注 : 目标系统在测试点处于暂停状态只要程序运行到一 个测试点,它 就会自动 暂停。所以, 当使用测 试点时,目标 系统应用程序可能不能满足实时期限的要求。 (用RTDX则可能实现实时监控,这可参 见1.5节。 )13. 在进入下一章之前(完成2.9节以后) ,执行以下步骤释放测试期间所占 用的资源: t 进入profiler菜单并撤消 Enable Clock使能。 t 点 击 鼠 标 右 键 从 弹 出 菜 单 中 选 择 Hide从 而 关 闭 Profile Statistcs 窗口。 t 进入profiler→profile_points, 选择Dlete All并点击OK。 t 进入View菜单,并撤消 Mixed Source/ASM使能。30 第二章开发一个简单的应用程序2 .9 进一步探索为了进一步探究 CCS,可作如下尝试: t 在 Build Option 窗口中,检查与编译器、汇编器和连接器有关的 域,注意这些域中值的变化是怎样影响所显示的命令行的,可在 CCS 中参见在线帮助了解各种命令行开关。 t 设置某些断点。选择 Debug→Breakpoints,注意在 Breakpoints 输 入框中可以设置条件断点,只有当表达式的值为真时,程序才会在断 点处暂停。也可以设置各种硬件断点。2 . 10 进一步学习为了掌握关于使用 CCS 的更多的技巧,可参见有关 CCS 的在线帮助或 CCS 用户指南(PDF 格式) 。31 第三章开发 DSP/BIOS 程序第三章开发 DSP/BIOS 程序本 章 通 过 使 用 DSP/BIOS 优 化 第 二 章 中 的 hello world 实 例 介 绍 DSP/BIOS 及如何创建、编译、调试和测试使用 DSP/BIOS 编写的程序。 基本要求:CCS 的 DSP/BIOS 组件,目标板。3.1 创建配置文件实现 hello world 程序的另一种方法是使用 DSP/BIOS API 的 LOG 模块, 它能在嵌入式程序中提供基本运行服务。对于实时 DSP 上的应用而言,API 模块是最优的。与诸如 put()这样的 C 库函数调用不同,API 无需中止目标 板中运行的应用程序就能进行实时分析。此外,API 代码比标准 C 库函数 的 I/O 占用空间少且运行快, 根据程序需要可使用一个或多个 DSP/BIOS 模块。 本章使用 DSP/BIOS API 修改第二章中的应用程序 (如果要跳过第二 章,则须从 2.1 和 2.2 节开始)。 在使用 DSP/BIOS API 的程序中必须创建一个配置文件,它定义了程序 中使用的所有 DSP/BIOS 对象。本节介绍如何创建配置文件。 1. 如 果 已 经 关 闭 了 CCS, 则 重 新 开 始 。 选 择 Project→ Open 重 新 打 开 c:\ti\myprojects\hello1 文件夹中的 myhello.mak 项目(如你安装 其它地方,则在所安装的地方打开含有 myprojects 的文件夹。 )2. 选 择 File→ New→ DSP/BIOS32Config, 弹 出 一 个 含 有 “ c54xx.cdb”和 第三章开发 DSP/BIOS 程序“sd54.cdb”的窗口。 3. 在 此 窗 口 中 选 择 与 你 的 系 统 板 相 适 应 的 DSP 模 板 , 然 后 点 击 OK (TMS320C54X DSP/BIOS 用户指南阐述了怎样创建一个用户模板) ,将 出现 上 面这 样 一个 窗 口, 点 击左 边 的+和-字符 能 扩张 和 收缩 列 表单 , 窗口右边显示窗口左边选中对象的属性。 4. 在 LOG-Event Log Manager 处点击鼠标右键, 从弹出菜单中选择 Insert LOG, 这时创建一个名为 LOG0 的 LOG 对象。 5. 在 LOG0 处点击鼠标右键,从弹出菜单中选择 Rename,键入 trace 即改 变此对象名称为 trace。6. 选 择 File → Save 。 在 弹 出 窗 口 中 选 择 你 的 工 作 路 径 ( 通 常 是 c:\ti\myprojects\hello 1) ,并将此配置保存为 myhello.cdb,实际 上创建了下述文件: t myhello.cdb 保存配置设置 t myhellocfg.cmd t myhellocfg.s54 t myhellocfg.h54 连接命令文件 汇编语言源文件 由 myhellocfg.h54 包含的汇编语言头文件33 第三章开发 DSP/BIOS 程序3.2 向工程添加 DSP/BIOS 文件回顾上节所建立的配置文件,它实际上包括四个新文件 myhello.cdb、 myhellocfg.cmd、myhellocfg.s54、myhellocfg.h54。本节介绍如何向工 程添加这些文件并删除被取代的文件。 1. 选择 Project→Add Files to Project 在弹出窗口的文件类型框中选 择配置文件(*.cdb) ,然后选择 myhello.cdb 并点击 Open。注意此时 在 Project View 中 的 DSP/BIOS Config 文 件 夹 下 面 包 含 配 置 文 件 myhello.cdb。另外,myhellocfg.s54 作为源文件出现在 source 文件 夹中。注意在编译工程文件的过程中,CCS 在扫描文件间的依赖关系时 自动向工程中添加包含文件(在此添加的是 myhellocfg.h54) 。 2. 输出文件名必须与.cdb 文件名匹配(myhello.out 和 myhello.cdb) 。 选择 Project→Options 将出现 Build Option 窗口, 然后选择 Linker , 在 Output Filename 栏中确认输出文件名为 myhello.out,点击 OK。 3. 再次选择 Project→Add Files to Project,在弹出窗口的文件类型 栏中选择 Linker Command File(*.cmd), 再选择文件 myhellocfg.cmd 并点击 Open,随之产生如下消息框:4. 点 击 Yes , 则 加 入 新 生 成 的 配 置 文 件 myhellocfg.cmd 并 取 代 hello.cmd。 5. 在 Project View 中的 vectors.asm 源文件上点击鼠标右键,然后从 弹出菜单中选择 Remove from project。DSP/BIOS 配置文件将自动定 义硬中断矢量。 6. 在 RTS.lib 库文件处点击鼠标右键将它从 project 中删除。该库已经 由 myhellocfg.cmd 文件自动包含。 7. 双击程序 hello.c 打开并编辑该文件,在弹出的代码框中如果显示了 汇编指令,则选择 View→Mixed Source/ASM 可隐藏汇编代码。 8. 源 文 件 中 需 修 改 的 内 容 如 下 。 ( 可 以 从 c:\ti\c5400\tutorial\hello2\hello.c 中复制和粘贴)由于 puts()34 第三章开发 DSP/BIOS 程序和 LOG_printf 使用同样的资源, 你必须确保使用下面的主函数取代当 前存在的主函数。/* ======== hello.c ======== */ /* DSP/BIOS header files*/ #include &std.h& #include &log.h& /* Objects created by the Configuration Tool */ extern LOG_O /* ======== main ======== */ Void main() { LOG_printf(&trace, &hello world!&); /* fall into DSP/BIOS idle loop */ }9. 注意源程序中的下述几点: (1)C 源程序中包含 std.h 和 log.h 头文件。所有使用 DSP/BIOS API 的程序都必须包含头文件 std.h 和 log.h。 LOG 模块中头文件 log.h 在 定义了 LOG_Obj 的结构并阐述了 API 的功能。源代码中必须首先包含 std.h,而其余模块的顺序并不重要。 (2)源程序中声明了配置文件中创建的 LOG 对象。 (3)主函数中,通过调用 LOG_printf,将 LOG 对象的地址(&trace) 和 hello world 信息传到 LOG_printf。 (4)主函数返回时,程序进入 DSP/BIOS 空循环,DSP/BIOS 在空循环 中等待软中断和硬中断信号,第五、六、七章将阐述这些内容。 10. 选择 File→Save 或按 Ctrl+S 保存修改后的源程序。 11. 选 择 Project → Optins , 在 弹 出 窗 口 中 选 择 Compiler , 然 后 选 择 Category 中的 Symbols,并在 define symbols 中删除 FILEIO, 然后 点击 OK。 12. 点 击 工 具 栏 按 钮 或选择 Project→Rebuild All 。35 第三章开发 DSP/BIOS 程序3 .3 用 CCS 测试由于使用 LOG 的程序只写了一行,没有更多的内容需要分析。在第五、 六、七章中将用更多的方法分析程序功能。 1. 选择 File→Load Program 选取 myhello.out 并点击 open。 2. 选择 Debug→Go Main。 3. 选 择 Tools → DSP/BIOS → Message Log , 在 CCS 窗 口 底 部 出 现 一 个 Message Log 窗口。 4. 在 Message Log 窗口中点击鼠标右键,从弹出的菜单中选择 Property Page。 5. 选择 trace 作为监视对象,然后点击 OK。缺省的刷新频率为 1 秒。 (如 果要修改刷新频率, 可选择 Tools→DSP/BIOS→RTA Control Panel。 在 RTA Control Panel 处点击鼠标右键,选择 Property Page 并选取 一个新的刷新频率,点击 OK。 ) 6. 选择 Debug→Run 或按 F5。 hello world 信息将出现在 Message Log 区 域内。7. 选择 Debug→Halt 或按 Shift F5 暂停程序运行。主函数返回后,程序 在 DSP/BIOS 空循环中等待中断信号,欲了解空循环的更多信息,请参 见 3.5 节。 8. 在 Message Log 中点击鼠标右键,然后选择 Close 关闭 Message Log。 在下一节中将使用 Profiler,因此必须关闭 Message Log。 9. 选 择 Tools → RTDX 启 动 RTDX 插 件 , 并 从 下 拉 的 菜 单 中 选 取 RTDX disable,然后点击鼠标右键并选择 Hide。注意: 在某些目标系统中 Profiling 和 RTDX 不能同时使用 。 注意 :在使用 Profiling 前, 关闭使用 RTDX 的工具, Message Log 或其它的 DSP/BIOS 如 插件。特别是在使用 DSP/BIOS 插件后,必须确保 RTDX 无效,选 Tools → RTDX 启36 第三章开发 DSP/BIOS 程序动 RTDX 插 件, 并从下拉菜单中选取 RTDX 反之亦然,如 2.8 节所述。disable, 然后点击鼠标右键再选择 Hide。当试图同时使用 Profiling 和 RTDX 时将导致错误信息,见上图。37 第三章开发 DSP/BIOS 程序3.4 测算 DSP/BIOS 代码执行时间LOG_printf 所需的指令周期数,可像前面的 puts()一样,利用 CCS 的 功能来测算。 1. 选择 File→Reload Program。 2. 选择 Profiler→Enable Clock,在 Enable Clock 旁边可见到√。 3. 在 Project View 中,双击 hello.c 文件。 4. 选择 View→Mixed Source/ASM,则灰色的汇编指令紧随 C 源程序。 5. 将光标放在 LOG_printf(&trace, &hello world!&)行上。 6. 点 击 工 具 栏 按 钮 (Toggle Profile-point), 则 这 一 行 和 其 下 一行的汇编指令变为绿色高亮显示。 7. 向下 移 动 滚动 条 ,把 光标 放 在 程序 结 尾的 大括 号 所 在的 行 上, 然后 点 击工具栏按钮 (Toggle Profile-point), 你 可 能 会 认 为 在 程 序的 return 行上设置了第二个测试点。但是,要注意直到大括号后一 直没有相应的汇编语言显示出来。如果在 return 这一行上设置了测试 点,CCS 将在程序运行时自动纠正这一问题。 8. 选择 Project→View Statistics。 9. 点击(Run)工具栏按钮或 按 F5 运行程序。 10. 注意在第二个测试点显示的指令周期数为 58(实际中可能稍有不同) ,这是执行 LOG_printf 函数需要的指令周期数。由于字符串的格式化在 PC 主机上、而不是在目标系统 DSP 上完成,因此调用 LOG_printf 的效 率很高。LOG_printf 需要的 58 个指令周期,而在第二章结束时测试的 put()则需要 2800 个指令周期。在应用程序中调用 LOG_printf 监视系 统状态对程序执行几乎没有影响。 11. 点 击 工 具 栏 按 钮 或按 Shift F5 暂停程序运行。 12. 在进行下一章的工作之前(3.5 节结束之后)做下述工作,释放测试时 占用的资源。t t38进入 Profiler 菜单,撤消 Enable Clock 前的“√” 。 在 Profiler Statistics 窗口中点击鼠标右键,并从打开的菜单选 择 Hide 第三章开发 DSP/BIOS 程序t t t t选取 Profiler→Profile-points,然后选择 Delete All ,点击 OK。 进入 View 菜单,撤消 Mixed Source/ASM 前的“√” 。 关闭所有的源文件和配置窗口。 选择 Project→Close 关闭 Project39 第三章开发 DSP/BIOS 程序3.5 进一步探索为进一步了解 CCS,试作如下工作: t 加 载 myhello.out 并 在 LOG_printf 行 设 置 断 点 , 选 取 Debug→ Breakpoints 并 在 IDL_F_loop 上 设 置 断 点 。 在 弹 出 对 话 框 的 ( Location 栏中键入 IDL_F_loop,并点击 Add) 。 运 行 程 序 在 第 一 个 断 点 处 , 使 用 View → CPU Registers → CPU Registers 观察寄存器值。注意:当主函数执行时,INTM=1 表明中断非使 能。 运行到下一个断点 注意现在INTM=0,表明中断使能。注意在执行程序时将重复遇到该断点。 启动进程和主函数执行完毕后, DSP/BIOS应用程序将进入空循环的后台 线程。空循环由IDL 模块管理, 直到程序暂停时才结束工作;它在中断使 能有效时循环, 且允许响应任一ISR中断信号, 能满足实时任务处理的要求。 第五、六、七章将进一步阐述ISRs和DSP/BIOS的软中断。 t 在MS-DOS窗口中,键 入以下命令行可运行sectti.exe程序。如 果安 装路径不是c:\ti,则须将路径修改为安装了CCS 的目录路径。cd c:\ti\c5400\tutorial\hello1 sectti hello.out & hello1.prn cd ..\hello2 sectti hello.out & hello2.prn比 较 hello1.prn和 hello2.prn文 件 可 以 发 现 使 用 stdio.h和 DSP/BIOS 时 存 储 器 段 和 空 间 大 小 的 差 别 。 与 使 用 stdio 中 的 puts() 函 数 相 比 , DSP/BIOS调用LOG_printf时.text段占用的空间小。有关sectti工具的其它 信息可参见TMS320C54x DSP/BIOS 用户指南。3.6 进一步学习进 一 步 学 习 使 用 CCS 和 DSP/BIOS, 请 参 见 CCS中 的 在 线 帮 助 , 也 可 参 见CCS 用户指南和TMS320C54x DSP/BIOS 用户指南。40 第四章算法和数据测试第四章算法和数据测试本章说明创建和测试一个简单算法的过程并介绍CCS附加功能。 本章将创建一个完成基本信号处理的程序,并在下两章继续介绍。 可 用 存 储 在 PC机 文 件中 的 数 据 来 建 立 和 测试 一 个 简 单 的 算 法 ,也 可 利 用CCS的探针断点、图形显示、动态运行和GEL文件。4.1 打开和查看工程在CCS中打开一个工程文件并查看此工程中源文件和库文件。 1. 若CCS安装在c:\ti, 那么就在c:\ti\myprojects下创建 文件夹 volume1 (若CCS安装在其它位置,那么就在相应位置创建文件夹volume1) 。 2. 将 文 件 夹 c:\ti\c5400\tutorial\volume1中 的 所 有 文 件 复 制 到 新 文 件 夹。 3. 如 果 CCS 应 用 程 序 还 未 运 行 , 则 在 开 始 菜 单 中 选 择 Program → Code Composer Studio’C5400 → CCStudio。 4. 选择Project → Open并在volume1中选择volume.mak文件并点击Open。 5. 由于Project已经移动,CCS将显示一个对话框指示没找到库文件。点击 Browse键 ,按路 径c:\ti\c5400\cgtools\lib找到 并选中rts.lib。(如 果CCS安装在其它位置,那么在安装文件夹里找c5400\cgtools\lib)。6. 点击符 号+ 展开Project View, 在Project中包 含VOLUME.MAK、 Include、Libraries、Source。 该Project中的主要文件有: t volume.c 包含main()函数的C源程序 t volume.h 源程序volume.c包含的头文件,其 中定义了各种常数和结构。 t l oad.asm 此文件包含load子程序,该子程序41 第四章算法和数据测试是 一 个 能 从 C函 数 中 调 用 的 简 单 汇 编 循 环 子 程 序 ,该 函 数 有 一 个 入 口 参数、执行所需的指令周期为(31*argument)+13。 t vectors.asm 此文件在第二章使用过,它定义了DSP的中断向量表 t volume.cmd 连接命令文件,它将各段映射到存储器中。 t rts.lib 为DSP目标系统提供运行支持。42 第四章算法和数据测试4.2 查看源程序在Project View窗口 中双击 volume.c volume.c文件,源程序就显示在CCS窗口的 右边。 注意实例中的下面几部分: t 主函数打印完信息后,应用程序处于无限循环状态。在此循环中, 主函数调用dataIO和processing()函数。 t processing()函数将 增益与输入缓存区中的各值相乘并将结果存入 输出缓存区;同时也调用汇编Load子程序,该子程序占用的指令周期 取决于传递给它的processingLoad值。 t dataIO函数是一个空函数,它的作用类似于return语句。可利用CCS 中的探针(Probe Point)功能把主机文件中的数据读取到inp_buffer 缓存区,此法优于用C代码来完成I/O功能。#include &stdio.h& #include &volume.h& /* Global declarations */ int inp_buffer[BUFSIZE]; /* processing data buffers */ int out_buffer[BUFSIZE]; int gain = MINGAIN; /* volume control variable */ unsigned int processingLoad = BASELOAD; /* processing load */ /* Functions */ extern void load(unsigned int loadValue); static int processing(int *input, int *output); static void dataIO(void); /* ======== main ======== */ void main() { int *input = &inp_buffer[0]; int *output = &out_buffer[0]; puts(&volume example started\n&); /* loop forever */43 第四章算法和数据测试while(TRUE) { /* Read using a Probe Point connected to a host file. */ dataIO(); /* apply gain */ processing(input, output); } } /* ======== processing ======== * * FUNCTION: apply signal processing transform to input signal. * PARAMETERS: address of input and output buffers. * RETURN VALUE: TRUE. */ static int processing(int *input, int *output) { int size = BUFSIZE; while(size--){ *output++ = *input++ * } /* additional processing load */ load(processingLoad); return(TRUE); } /* ======== dataIO ======== * * FUNCTION: read input signal and write output signal. * PARAMETERS: none. * RETURN VALUE: none. */ static void dataIO() { /* do data I/O */ }44 第四章算法和数据测试4.3 为 I/O 文件增加探针断点本节介绍探针断点(Probe Point)的使用方法。探针可以从PC机的文件 中读取数据,它是开发算法的一个有效工具。其使用方法如下: t 将来自PC主机文件中的输入数据传送到目标系统的缓存器中供算法 使用。 t 将 来 自 目 标 系 统 缓 存 器 中 的 输 出 数 据 传 送 到 PC主 机 的 文 件 中 供 分 析。 t 用数据更新窗口,如图形窗口。 与断 点类似 ,它 们都挂起 目标 系统来 完成自己 的动 作,但 存在如下 几 个方面的差别 : t 探针立即中止目标系统,完成一个操作后,再恢复目标系统的运行。 t 断点暂停CPU直到人工恢复其运行为止,且更新所有打开的窗口。 t 探针允许自动执行文件的输入或输出,而断点则不行。 本 章 介 绍 如 何 利 用 探 针 把 PC机 文 件 内 容 传 送 到 目 标 系 统 中 作 为 测 试 数 据使用。当 到达探 测 点时,同时 使用断 点 更新所有打 开的窗 口 ,这些窗口 包括输入和 输出数 据 的图形窗口 。第七 章 将阐述管理 输入和 输 出数据流的 两种方法。 1. 点 击 工 具 栏 按 钮 或选择Project→Rebuild All 。 2. 选择File→Lode Program并选取volume.out ,然后点击Open。 3. 在Project View窗口中,双击volume.c文件。 4. 将 光 标 置 于 主 函 数 中 的 dataIO( )这 一 行 上 。 DataIO函 数 起 占 位 符 作 用。现在,它是一个很好的与探针断点相连接的地方,以便于从PC机文 件输入数据。 5. 点 击 工 具 栏 按 钮 (Toggle Probe Point) ,则光标所在行变为兰 色高亮。 6. 选择File→File I/O,在File I/O 对话窗中可选择输入和输出文件。 7. 在File Input 栏中,点击Add File。 8. 选择sine.dat 文件。 注意:在文件类型框中可以选择数据格式,sine.dat 文件包含正弦波 形的16进制值。45 第四章算法和数据测试9. 点 击 Open , 将 该 文 件 添 加 到 File I/O 对 话 框 的 列 表 上 , 接 着 出 现 sine.dat文件控制窗口(CCS窗口可以覆盖它) 。在运行程序时,可用这 个窗口开始、停止、重复、或快速前进来控制数据文件。10. 在 File I/O对 话 框 中 , 将 Address修 改 为 inp_buffer, Length修 改 为 100,选中Wrap Around。t Address栏中的值指定来自文件的数据将要存放的位置, inp_buffer 是由 volume.c volume.c文件声明为BUFSIZE的整数数组。 t Length栏中的值指定每次探针到达时读入多少个数据样点, 使用100 是因为BUFSIZE常数已由 volume.h volume.h(0x64)设置为100。 t 当探针到达文件结尾时,Wrap Around选 项使CCS从文件的开始读数 据 。 即使 数 据 样 点 只 含 有1000个 值且 每 次 探 针 到达 时 读 取100个 值, 也可将数据看作连续的数据流。 11. 点击Add Probe Point,Break\Probe\Profile Points 对 话窗 的Probe Point栏就会出现。 12. 加亮(对话框中)显示的第五步的断点设置。 13. 点击Connect栏尾处的下箭头,在其下拉菜单中选择sine.dat 文件。 14. 点击Replace。 Probe Point列表将显示探测点已连接到sine.dat 文件。 15. 点击OK。 File I/O对话框则显示文件现已被连接到探测点。 16. 在File I/O对话框,点击OK。46 第四章算法和数据测试4.4 显示图形如果现在就运行程序的话,你将无法了解到更多的程序运行时的信息。 可以在 inp_buffer 和 out_buffer数组的地址范围内设置观察变量,但需 要设置很多变量,而且是按数字形式显示而非图形形式。 CCS 提供 了多种 用图形 处理数 据的 方 法。在 本例中 ,你 将 看到一 个基 于时间绘制的图形。本节介绍图形的打开,下节介绍程序的运行。 1. 选择View→Graph→Time/Frequency。 2. 在弹出的Graph Property Dialog对话窗 中, 将 Graph Title,Start Address, Acquisition Buffer Size, Display Data Size, Data Type, DSP Autoscale和 Maximum Y-value 的属性改 变为如下图所示。向 下滚动或 调整 dialog 框的大小可看到所有的属性。3. 4. 5. 6.点击OK,出现输入缓存的一个图形窗。 在上述窗中右击鼠标,从弹出的菜单中选择Clear Display。 再次选择View → Graph → Time/Frequency。 改变Graph Title的 属性为Output Buffer,改变Start Address的属性 为Out_buffer,其余的设置都不变。7. 点击OK,又出现一个图形窗,在该图形窗内右击鼠标,从弹出的菜单中 选择Clear Display。47 第四章算法和数据测试4.5 执行程序和绘制图形到目 前为止 ,你 已经放置 好了 一个探 针,它可 临时 暂停目 标系统, 将 数据从PC主机传送到目标系统,并将恢复目标系统应用程序的运行。但是, 探针不能刷新图形。 在本节中, 将设置一个可刷新图形的断点, 使用Animate 命令在遇到断点后,自动恢复目标系统应用程序的运行。 1. 在C源程序volume.c窗口中,将光标放置在dataIO行。 2. 点 击 ( Toggle Breakpoint) 工 具 栏 按 钮 或按F9, 该行显示为红 色和蓝色高亮(除非用Option→Color改成其它颜色) ,表明在这一行已 经设置了断点和探针。在同一行上既放置探针又放置断点,它能够使目 标系统只暂停一次而完成两个操作:数据传输和图形刷新。 3. 重新安排窗口以便能同时能看到这两个图形。 4. 点 击 工 具 栏 按 钮 或按F12运行程序。 Animate命令与Run命令相似, 它使目标系统应用程序一直运行到断点,随后,目标系统应用程序暂停 并刷新窗口。但是,与Run命令不同的是,Animate命令恢复目标系统应 用程序运行到下一个断点,而且此过程是连续的,直到目标系统被人工 停 止 。 所 以 , Animate 命 令 可 看 作 运 行 - 中 断 - 继 续 ( run-break Ccontinue)过程。 5. 注意每个图形包含2.5个周期的正弦波形,且在程序运行过程中两个图 形反向。每次到达探测点时,CCS 从sine.dat文件中得到100个值,再 将这100个值写入inp_buffer地址。符号 相反是因为输入缓冲区包含的 值是从sine.dat文件中读取的, 而输出缓冲区最后的值是经过函数处理 后得到的。注意: 目标系统运行程序在探测点暂停 注意 :不管何时到达探测点,CCS都能暂时停止目标系统。因此,如果使用了探针,目 标系统应用程序就不 能 满足实时期限的要求 。 在本开发阶段只测试 算 法,以后将用 RTDX和DSP/BOIS分析实时性能。48 第四章算法和数据测试只使用测试点和Run命令也能刷新图形,4.10节将详细介绍。49 第四章算法和数据测试4.6 调节增益回顾 4.2 节,processing 函数将增益与输入缓存区中的各值相乘并将 结果存入输出缓存区;在一个 While 循环中用如下语句完成此功能。*output++ = *input++ *该语句将增益与输入缓存区中的各值相乘并将结果存放在 out_buffer 中相应的位置上。gain 初始化为 MINGAIN,而 MINGAIN 已经在 volume.h 中定义为 1。要改变输出幅度得修改 gain 值。修改 gain 值的一 种方法是采用观察变量。 1. 选择 view→Watch Window 2. 在 Watch 窗中右击鼠标, 并从弹出菜单中选择 Insert New Expression。 3. 在 Expression 区敲入 gain 并单击 OK,变量值出现在 Watch 窗口。4. 如 果 程 序 已 暂 停 , 点 击 工 具 栏 按 钮 程序。 5. 在 Watch 窗口中双击 gain。(Aminate),重新开始运行6. 在 Edit Variable 窗口中修改 gain 值为 10,并点击 OK。 7. 注意在 Output Buffer 图形中信号幅度变化反映了增益的提高。50 第四章算法和数据测试4.7 观察范围外变量你曾使用 Watch Window 观察过变量并改变变量的值。但当你想查看的 变量的作用域不在当前设置的断点范围内时,则可使用访问堆栈来查看。 1. 点 击 工 具 栏 按 钮 或按 Shift F5 暂停程序运行。 2. 用 CCS 重新查看 volume.c 程序。注意在主函数与 processing 函数中 已经定义了变量*input,但它没有在数据输入输出函数中定义。 3. 在 显 示 源 程 序 volume.c 的 窗 口 中 , 把 光 标 放 置 在 dataIO()函 数 的 return 行上。 4. 点 击 工 具 栏 按 钮 或按 F9,该行变为红色高亮显示(除非你用 Open→Color 改变颜色) 。 5. 点击 F5 执行程序,CCS 将自动把断点移到相应函数的下一条汇编指令 处。对话框通知你将把断点移到下一行。6. 点击 OK 7. 按下 F5,程序运行直到 dataIO()函数末尾的断点处暂停。 8. 在 Watch 窗 口 中 点 击 鼠 标 右 键 并 从 弹 出 菜 单 中 选 择 Insert New Expression。 9. 在 Expression 区键入*input 并点击 OK。10. 注意在 Watch 窗口中显示该变量是一个未知符号,这说明*input 没有 在 dataIO()函数内定义。11. 选择 View→Call Stack,则可看到相邻的堆栈窗与观察窗。51 第四章算法和数据测试12. 在堆栈窗中点击 main()就可在主函数范围内查看*input 的值。13. 可 以 点 击 堆 栈 窗 底 部的 地 址 以 便 看 清 楚 gain 是 全 局 变 量 , 而 *input 则不是。 (地址的变化依赖于正使用的 DSP) 14. 在堆栈窗中点击鼠标右键并从弹出菜单中选择 Hide。 15. 将光标放置在 datdIO()函数中的 return 之后的行上, 撤消第 4 步中放 置的断点,点击工具栏按钮或 单击 F9。52 第四章算法和数据测试4.8 使用 GEL 文件CCS 提供了修改变量的另一种方法,该方法使用一种扩展语言 GEL 来 创建可修改变量的小窗口。 1. 选择 File→Load GEL。在 Load GEL File 对话框中选择 volume.gel 文 件 并 点 击 Open, 这 个 选 项 是 在 上 步 加 载 GEL 文件时自动增加的。 2. 选择 GEL→Application Control→Gain,弹出如右图所 示的小窗口。 3. 如 果 程 序 已 经 暂 停 , 点 击 工 具 栏 按 钮 ( Animate) 。 注 意 即 使 在弹出的 gain 小窗口中值为零,其实 gain 的当前值并未改变。只有 滑动指针时 gain 值才发生变化。 4. 在 gain 窗口中用滑动指针改变 gain 值,则在 Output Buffer 窗口中 的正弦波形幅度相应改变。 此外, 无论任何时候移动滑动指针, Watch 在 窗口的变量 gain 的值将随之改变。 5. 点 击 工 具 栏 按 钮 或按下 Shift F5 暂停程序运行。 6. 为了了解 Gain GEL 函数的工作情况,点击 Project View 中 GEL 文件 前的 +符号,然后在 VOLUME.GEL 文件上双击鼠标便可查看其内容:menuitem &Application Control& dialog Load(loadParm &Load&) { processingLoad = loadP } slider Gain(0, 10 ,1, 1, gainParm) { gain = gainP }Gain 函数定义的滑动指针范围:0 到 10,其步长为 1。当移动滑动指 针时,变量 gain 的值将随滑动指针的改变而改变。53 第四章算法和数据测试4.9 调节和测试 processing 函数在第二章中曾使用测试点(profile-points)测试 puts()所需的指令 周期数。现在,来使用测试点查看变量 processingLoad 改变后的结果,此 结果将传递给汇编 Load 程序。 ProcessingLoad 初始化为 BASELOAD, 而 BASELOAD 在 volume.h 中定义为 1。 1. 选择 Profiler→Enable Clock,确保 Enable Clock 使能。 2. 在 Project View 中,双击 volume.c 文件。 3. 选择View→Mixed Source/ASM使能,查看C源程序及其相应汇编指令。 4. 把光标放置在 load(processingLoad) 行后的汇编指令上。 5. 6. 7. 8. 点击工具栏按钮 或点击鼠标右键选择Toggle Profile Pt。 把光标放置在 return(true) 行后的汇编指令上。 点击工具栏按钮 (Toggle Profile-point)。 选 择 Profiler → View Statistics。 在 Profile Statistics 窗 口 中 的 location栏 显 示 了 新 增 测 试 点 对 应 的 汇 编 指 令 或 地 址 。 可 以 通 过 改 变 Statistics area区 域 的 大 小 查 看 更 多 内 容 ; 或 者 在 Statistics area 区 域 内 点 击 鼠 标 右 键 , 选 择 Allow Docking可 在 一 个 单 独 窗 口 中 显 示 Statistics。 9. 点 击 工 具 栏 按 钮 或按F12。 10. 注意在第二个测试点处显示的最大周期数大约为44 (真实值可能不同) , 当processingLoad=1时,它表明执行Load程序所需的指令周期数。 11. 选择GEL→Application Control→Load。12. 在load域输入2,然后点击Execute,则对应于第二个测试点的最大周期 数改变为75。每当processingLoad增加1时,指令周期数就增加31。这 些指令周期数表明load函数的执行时间, load函数包含在load.asm文件 中。 13. 在Profile Statistics窗口中点击鼠标右 键,从弹出菜单中选 择Clear54 第四章算法和数据测试All,这将把Statistics复位为0。平均值、最大值和最小值都等于当前 processingLoad的指令周期数。 14. 点击工具栏按钮 或按Shift F5暂停程序运行。 15. 在第五章开始之前,先执行下列步骤释放在本节中使用的资源 t 关闭Load、 Gain控制 窗口、sine.dat控 制 窗口以及Time/Frequency 图形窗。 t 选择File→File I/O并点击Remove File删除sine.dat文件。 t 选择Profiler菜单撤消Enable Clock前的“√” 。 t 在 Profile Statistics 窗 口 中 点 击 鼠 标 右 键 并 在 弹 出 菜 单 中 选 择 Hide。 t 选择Debug→Breakpoints,然后选择Delete All并点击OK。 t 选择Debug→Probe Points,然后选择Delete All并点击OK。 t t t t 选择Profiler→profile-point,然后选择Delete All并点击OK。 选择View菜单撤消MixedSource/ASM前的“√” 。 关闭打开的窗口和工程(Project→Close)。 在project View中的volume.gel上击鼠标右键并选择Remove。t 在Watch Window中删除表达式并隐藏Watch Window。55 第四章算法和数据测试4.10 进一步探索为了进一步了解CCS,试做如下工作: t 把processingLoad加到Watch Window,当使用Load GEL 控制时,在 Watch Window中processingLoad的值将被更新。 t 在 Watch Window 中 点 击 鼠 标 右 键 , 在 弹 出 菜 单 中 选 择 Insert New Expression,并点击Help按钮则可得到你可以使用的数据格式。试用 各 种 不 同 的 格 式 。 例 如 : 你 可 键 入 *input, x作 为 Expression观 察 正 弦输入数据的16进制格式。 t 在volume.h文件 中把 BUFSIZE修改为0x78(或120)并重新编译, 然后 重 新 加 载 程 序 。 选 择 File→ File I/O, 将 对 话 框 中 Length值 修 改 为 0x78 。 选 择 View → Graph → Time/Frequency , 在 弹 出 的 图 表 中 将 Acquisition Buffer Size和Display Data Size均修改为0x78,这将 使 缓 存 器 存 入 3个 完 整 的 正 弦 波 而 不 是 2.5个 。 点 击 工 具 栏 按 钮 (Animate),注意缓冲器输入输出波形是同相的。 t 试着使用时钟数来实现测试点的统计计数。用断点代替测试点,选 择Profiler→View Clock。将程序运行到第一个断点, 双击clock使 统计数清零。再次运行程序,时钟则显示了程序运行到第二个断点的 周期数。 t 使用探针重复4.3节到4.5节,这次只使用探针和Run命令。由于一个 探测点只能对应一个操作,所以需要设置三个探测点。现在,有两个 图形需要刷新,一个文件作为输入,每一个操作都有各自的探针。 注意每一个探测点必须设置在不同的代码行上。结果,目标系统需 要暂停三次, 而且在目标系统运行时, 操作不能在同一个探测点完成。 由于上述原因,本节中将探针和断点结合比只使用探针更有效。 t 为 了 练 习 用 CCS编 译 工 程 文 件 。 将 c:\ti\c5400\tutorial\volume1 文件夹中的所有文件拷贝到一个新文件夹中。首先,删除volume.mak 文 件 , 然 后 使 用 CCS的 Project 菜 单 项 中 的 Project→ New 和 Project →Add File重建工程。可参见4.1节。56 第四章算法和数据测试4.11 进一步学习进一步学习关于Probe Points、graphs、animation和GEL文件的知识, 请参见CCS中的在线帮助或CCS用户指南。57 第五章程序调试第五章 程序调试本章介绍程序调试技术和几个 DSP/BIOS 插件模块。 在本章中,将修改第四章的应用程序实例创建一个多线程的实例并为 调试目的查看执行性能,还可以了解有关 DSP/BIOS 的更多的功能,其中包 括 Execution Graph、实时分析控制板(RTA Control Panel)、Statistics View 和 CLK、SWI、STS、TRC 模块。 基本要求:目标板和 CCS 的 DSP/BIOS 组件。5.1 打开和查看工程首先在 CCS 中打开工程,查看工程中的源文件和库文件。 1. 如果 CCS 安装在 c:\ti 目录下,就创建 c:\ti\myprojects\volume2 目 录。(如果 CCS 安装在其它位置,就在相应位置创建 volume2 目录) 2. 将 目 录 c:\ti\c5400\tutorial\volume2 下 的 所 有 文 件 拷 贝 到 新 目 录 下。 3. 从 WINDOWS“开始”菜单中选择“程序”→Code Composer Studio 5400 →CCStudio 4. 选 择 Project → Open , 在 文 件 夹 中 选 择 volume.mak 文 件 并 点 击 Open 。 点 击 Project、VOLUME.MAK、 DSP/BIOS Config 和 Source 后面的+号展开 Project View。 根据配置文件创建的 volumecfg.cmd 文件 包含许多 DSP/BIOS 头文件(不需要检查所 有的头文件) 工程中的文件包括 : t volume.cdb 配置文件。 t volume.c 包含 main()函数的 C 源程序 t volume.h 包含在 volume.c 中的头文件,它定义了各种常数和结 构,它与前一章所用的 volume.h 文件相同。 t load.asm 此文件包含 Load 子程序,该子程序是一个能从 C 函数58 第五章程序调试中调用的简单汇编循环子程序。 它与前一章中所用的 load.asm 相同。 t volumecfg.cmd t volumecfg.s54 t volumecfg.h54 连接命令文件,在保存配置文件时创建 汇编源文件,在保存配置文件时创建 头文件,在保存配置文件时创建59 第五章程序调试5.2 查看源程序本章 通 过由 第 四章 的 应用 程 序修 改 而得 的 程序 实 例来 介 绍实 时 操作 。 该实例采用片内定时器中断模拟周期性的外部中断实现数据的输入/输出, 只需对其稍加修改就可真正通过外部中断实现数据的输入/输出。 1. 在 Project View 中双击 volume.c,则源程序显示在 CCS 窗口的右半部 分。 2. 注意本实例中的下述几个方面: t 数据类型的变化。DSP/BIOS 提供的数据类型适用于其它处理器,它 的绝大部分数据类型与 C 语言的数据类型相对应。 t C 源程序中包括三个 DSP/BIOS 头文件:std.h、 log.h 和 swi.h, 而且 std.h 必须放在其它 DSP/BIOS 头文件之前。 t 配置文件中创建的对象声明为外部变量。你可在下一节查看配置文 件。 t 主 函 数 不 再 调 用 dataIO 和 processing 函 数 , 而 仅 仅 是 在 调 用 LOG_printf 显示信息后返回, 这将使应用程序进入 DSP/BIOS 空循环, 而后由 DSP/BIOS 处理各线程。 t processing 函数由 processing_SWI 软中断调用,软中断的优先级 低于所有硬件中断。但也可以用硬件中断 ISR 直接完成信号处理。然 而, 信号处理可能需要大量机器周期而无法在下一次中断信号到达之 前完成,这将妨碍中断信号的处理。 t dataIO 函数调用 SWI_dec,SWI_dec 利用软中断作计数器减法。当 计数器为 0 时,软中断就安排函数的执行并复位计数器。 dataIO 函数仿真基于硬件的数据 I/O, 一个典型的程序就是在缓存区 积累数据,直到有足够的处理数据为止。本实例中,每当 processing 函数运行一次, dataIO 函数就执行 10 次, 计数器的减计数由 SWI_dec 控制。#include &std.h& #include &log.h& #include &swi.h& #include &volume.h& /* Global declarations */60 第五章程序调试Int inp_buffer[BUFSIZE]; /* processing data buffers */ Int out_buffer[BUFSIZE]; Int gain = MINGAIN; /* volume control variable */ Uns processingLoad = BASELOAD; /* processing load value */ /* Objects created by the Configuration Tool */ extern LOG_O extern SWI_Obj processing_SWI; /* Functions */ extern Void load(Uns loadValue); Int processing(Int *input, Int *output); Void dataIO(Void); /* ======== main ======== */ Void main() { LOG_printf(&trace,&volume example started\n&); /* fall into DSP/BIOS idle loop */ Debugging Program Behavior /* ======== processing ======== * * FUNCTION: Called from processing_SWI to apply signal * processing transform to input signal. * PARAMETERS: Address of input and output buffers. * RETURN VALUE: TRUE. */ Int processing(Int *input, Int *output) { Int size = BUFSIZE; while(size--){ *output++ = *input++ * } /* additional processing load */ load(processingLoad); return(TRUE); } /* ======== dataIO ======== * * FUNCTION: Called from timer ISR to fake a periodic61 第五章程序调试* hardware interrupt that reads in the input * signal and outputs the processed signal. * PARAMETERS: none * RETURN VALUE: none */ Void dataIO() { /* do data I/O */ /* post processing_SWI software interrupt */ SWI_dec(&processing_SWI);62 第五章程序调试5.3 修改配置文件对于本实例,DSP/BIOS 的配置文件已经创建。在本节中,你可以查看 缺省配置中的对象。 1. 在 Project View 双击 volume.cdb 文件(在 DSP/BIOS 的 Config 文件 夹中) 2. 点击 CLK、 LOG 和 SWI managers 旁边的符号+。 3. 点击 LOG 中的 trace 项,你可以从窗口的右半部分查看它的特性。这 些特性与 3.1 节创建的 trace LOG 是一样的。 volume.c 调用 LOG_printf 将 volume example started 写入这个 log 中。 4. 在 LOG 对象 LOG_system 上鼠标右键,从弹出菜单选择 Properties。你 可以看到该对象的属性对话窗。在程序运行时,它记录各种 DSP/BIOS 模块的系统跟踪事件。5. 将 buflen 域的值修改为 512,点 击 OK。 6. 高 亮 度 显 示 CLK 目 标 dataIO_CLK。注意,当 CLK 目标 被激活时才调用_dataIO 函数, 它 是 volume.c 中的数据 I/O 函数。注 : 前缀与 C 函数名称63 第五章程序调试由于保存配置文件时会产生汇编语言文件,所以 C 函数名称要加一下划线作前 缀。此下划线前缀是约定由汇编转而访问 C 函数的一种标记。 其细节可参见 ( TMS320C54x 最佳化 C 编译器用户指南有关 C 语言和汇编语言接口部分) 。 此规则仅适用于用户编写的 C 函数,对于配置文件产生的对象或 DSP/BIOS API 调用则无须加下划线前缀,因为相应的两种名称会自动建立,一种会被加上前缀, 一种则不会有前缀。7. 由于 dataIO 函数不再在主函数中被调用,那由什么事件来激活该 CLK 对象呢?要想找到答案,在 CLK-Clock Manager 对象上点击鼠标右键 并从弹出菜单中选择 Properties, 你将看到 Clock Manager Properties 对话窗口。 注意,在 Enable CLK Manager 项前有可选标记,当选中时由定时器中 断驱动 CLK 管理器。 8. 不作任何变动仅点击 Cancel 关闭 Clock Manager Properties 对话窗 口。9. 展开 HWI 对象查看 HWI_TINT 的属性,其中断源是 DSP 定时器,当片内 定时器引起中断时,它运行 CLK_F_isr 函数。CLK 对象函数的运行是由 CLK_F_isr 硬件中断服务函数引发的,它的优先级高于软中断,一旦运 行便不会被打断。 (由于 CLK_F_isr 已经保护了寄存器现场,所以 CLK 函数 不 需 要象 硬 件中 断服 务 程 序中 正 常情 况下 须 做 的那 样 保存 和恢 复 现场。 ) 10. 在 软 中 断 对 象 processing_SWI 上 点 击 鼠 标 右 键 并 从 弹 出 菜 单 中 选 择 Properties。64 第五章程序调试t function 软中断激活时运行 processing 函数,见 5.2 节。 t mailbox mailbox 域 的 值 可 控 制 何 时 运 行 软 中 断 。 有 几 种 API 调用会影响 mailbox 的值,并且所产生的值将决定是否登记软中断。 当软中断被登记时, 具有最高优先级的软中断或硬中断服务例程将运 行。 t arg0, arg1 传 递 给 processing 函 数 的 inp_buffer 和 out_buffer 的地址。 11. 不作任何改变仅点击 Cancel 关闭 Properties 对话窗口, 。 12. 由于 processing 函数不再在主函数中运行,那什么事件将导致 SWI 对 象运行其函数?在源程序 volume.c 中, SWI_dec 被 dataIO 函数调用, 它递减 mailbox 域中的值,当 mailbox 域中的值为 0 时,则登记软中 断。所以,data_CLK 对象运行 dataIO 函数 10 次,SWI 对象就运行其 函数一次。 13. 选择 File→Close,将询问是否保存修改过的 volume.cdb 文件。点击 Yes 保 存 , 保 存 时 将 产 生 volumecfg.cmd 、 volumecfg.s54 和 volumecfg.h54。 14. 点 击 工 具 栏 按 钮 或选择 Project→Build。65 第五章程序调试5 .4 用 Execution Graph 查看任务执行情况当在 processing 函数中设置探测点并使用图形方式观察输入输出结果 时(见前一章) ,你已经完成了信号处理算法的测试。本阶段注意的焦点应 该是明确任务可以满足实时期限的要求。 1. 选择 File→Load 并选取 volume.out,然后点击 OK。 2. 选择 Debug→Go Main,程序运行到主函数的第一条语句。 3. 选择 Tools→DSP/BIOS→RTA Control Panel, 在 CCS 窗口底部将出现几个可选项。 4. 在 几 个 可 选 项 所 在 窗 口 区 域 内 点 击 鼠 标 右 键 , 取消 Allow Docking 显示方式或选择 Float in Main Windows 方式显示 RTA Control Panel。 调整窗口尺寸以便看到所有选项。 5. 在选择框内放置选中标志使能 SWI 和 CLK, 并使 能 global host enable,如右图示。 6. 选 择 Tools → DSP/BIOS → Execution Graph 。 Execution Graph 出现在 CCS 窗口底部,并可调整其显示方式和大小。 7. 在 RTA Control Panel 上点击鼠标右键并从弹出菜单中选择 Property Page。 8. 确认 Message Log/Execution Graph 的刷新频率为 1 秒,然后点击 OK。 9. 点 击 或选择 Debug→Run,则 Execution Graph 显示如下。10. 在 Time 行的标记给出了 Clock Manager 运行一次 CLK 函数的时间。按 标记计算 processing_SWI 执行的时间间隔。在此有 10 个标记表明: dataIO_CLK 对象每执行 10 次,processing_SWI 对象就执行一次。这 正如所预料的一样,因为被 dataIO 函数递减的 mailbox 域的起始值为 10。66 第五章程序调试5.5 修改和查看 load 值使用 Execution Graph,你可以看到该程序满足其实时期限的要求。然 而, 一个典型应用程序的信号 processing 函数所要完成的任务会比将数据 乘以一个系数并将结果拷贝到另一缓冲区中更复杂、耗费的周期数更多。 为此,可以通过增加 Load 函数占用的指令周期来模拟这样的复杂任务。注 : 在本实例中 Load 值 下面的 Load 值适用于以 100MIPS 运行的 C549 的。 如果所采用的 C54x 是以不同 速率的运行的,则需要将值乘以该 C54x 的 MIPS/100。如果不知道该 MIPS 值,可打 开 volume.cdb 查看称之为 DSP MIPS 的 Global Setting 属性(CLKOUT) 。1. 选择 Tools→DSP/BIOS→CPU Load Graph,将出现一个空白的 CPU Load Graph 窗口。 2. 在 RTA Control Panel 上 点 击 鼠 标 右 键 并 从 弹 出 菜 单 选 择 Property Page。 3. 将 Statistics View/CPU Load Graph 中的 Refresh Rate 修改为 0.5 秒并点击 OK。注意当前 CPU 的 load 值非常低。 由于Statistics View和CPU Load仅将少量数 据从目标板传送到主机,因此你可以频繁地 刷新这些窗口数据而不会对运行程序造成大 的 影 响 。 Message Log和 Execution Graph 传 送 的 数 据 是 有 关 配 置 文 件 中 定 义 的 LOG 对 象 的缓存长度属性的,其数据量大,因此不能 频繁地刷新这两个窗口。 4. 选择 File→Load GEL 并选择 volume.gel,然后点击 Open。 5. 选择 GEL→Application Control→Load。 6. 键入 3000 作为新的 load 值,然后点击 Execute,CPU 负荷增加到 7% 左右。 7. 在 Execution Graph 项点右键,从弹出菜单选择 Clear,注意此时程序 仍满足其实时期限的要求。在 processing_SWI 函数各次执行之间存在 10 个时间标记。 8. 使用 GEL 控制修改 load 值为 5000,然后点击 Execute。 9. 在 Execution Graph 区域内点击鼠标右键并从弹出菜单中选择 Clear。67 第五章程序调试在 processing_SWI 函数执行期间出现了一个时间标记,这意味着程序 不满 足 实时 期 限的 要 求吗 ? 不, 它 只表 明 运行 程 序的 功 能正 确 。能 够 引起 CLK 对象的服务例程运行的硬中断能够中断软中断服务例程的执 行,而在软中断服务例程再次运行之前,它能够完成自己的任务。 10. 使用 GEL 控制修改 load 值为 3000,然后点击 Execute。CPU 的负荷增 加到 95%左右。11. 在 Execution Graph 区域内点击鼠标右键并从弹出菜单中选择 Clear。 因为 processing_SWI 在 10 个时间标记发生之前完成,所以程序仍满 足实时期限的要求。12. 使用 GEL 控制修改 load 值为 35000,然后点击 Execute。由于刷新过 程在 空 闲 任务 中 实现 ,而 空 闲 任务 在 该程 序中 具 有 最低 优 先级 ,所 以 CPU Load Graph 窗口 和 Execution Graph 窗口将停止频繁刷新甚至 于可以停止刷新。又由于其它高优先级线程占用了 CPU 的全部处理时 间, 因 此 无足 够 的时 间用 于 主 机控 制 完成 更新 。 此 时, 程 序不 满足 其 实时期限的要求。 13. 选择 Debug→Halt, 这将暂停程序的运行并刷新 Execution Graph 窗口。 当应用程序不满足实时期限

我要回帖

更多关于 飚车世界ccs有什么用 的文章

 

随机推荐