1、 Measuring our success is your success ! 1 HELLODSP 版权所有 请勿用于商业 用途 违者必究 第 3 课 CCS 的 常用操作 作者: 顾卫 钢 同学们 , 大家好 , 第 3 课 终于姗 姗来 迟了 , 大 家都 等急了 吧, 实在 不好 意思 。 今天 我们 要一 起来 学习 的是 CCS 的一 些常 用操 作, 虽然只是 一个 课 时 的时 间, 但是通 过本 节课 内容 的学 习,我 相信 您大 概能 够掌 握用 CCS 对 DSP 进行 开发 时所 需要的 一些 必备 的知 识。 中国有 句古 话叫 “ 磨刀 不误砍柴 工” , 如果
2、 您将 CCS 这把 常用的 利刃 磨锋 利了 , 那么我相 信为 您的 DSP 开发 过程节 省不 少的 工夫 。 在上节课 的学 习过 程中 , 其实大 家应该 已经 学会 了如 何配 置 CCS Setup, 如何在 CCS 中打开 一个 工程 , 如何 在工程中 移除 或者 添加 文件 , 如 何创建 一个 新的 工程 。 那么 这些 作为 您已 经具 有的 知识, 我们 不再 重复 讲述 了, 下 面将 为您 介绍 在 CCS 中 如何编 译程 序, 如何 调试 程序, 如何 统计 代码 执行 的时间 等内 容。 今天所 用到 的工 程 “volume1.rar” 在附件 中,这个其
3、 实是 CCS 自带的 一个 例程 ,我们只 是对 其稍 微做 了些 修改 。 如果您 目前 还没 有仿真器 和开 发板 , 那么 只能做一 些软 仿真 的工 作, 请将您 的 CCS Setup 中的 system configuration 栏内的 My System 设置 成“F2812 Device Simulator” 。如 果您 已经 有了硬 件工 具, 那么 您可 以 根据各 家公 司相 应的 510 仿真器 的配 置信 息进 行配 置。 1. 了解 CCS 的布局 和结 构 Measuring our success is your success ! 2 HELLODSP 版
4、权所有 请勿用于商业 用途 违者必究 上节课 已经 为大 家介 绍过 目前 CCS 的各个 版本 了, 现有的 资料 中很 少对 CCS3.3 版本进 行介 绍的 , 所以 我们 今天主 要针 对 CCS3.3 给 大 家详细 介绍 ,其 他的 版本 您可以 参看 现有 的一 些资 料,在 我们 网站 上就 有很 多, 大家可 以自 行下 载研 究。 首先让我们 来了 解一 下 CCS3.3 打开 时的 界面, 以及 它的布 局和 结构 。 在上面 的图 中我们 可以 通过 各个 工具 栏或者 窗口 的名 称就 能大 概知道 这些 工具 或者 区域 的功能 了。 菜单栏 和 CCS 所有功 能
5、相关 的菜 单都 在这 里面 。 编译工 具栏 编译 程序 时常用 的一 些工 具。 调试工 具栏 调试 程序 时常用 的一 些工 具。 工程文 件框 打开 的工 程所有 文件 会按 类别 放在 这里, 便于 我们 编程 时在 各个文 件之 间的 切换 。 代码编 辑区 顾名 思义 ,代码 都是 在这 里编 辑完 成的了 ,是 我们 最主 要的 工作区 域。 编 译信息输 出区 编译时 产生的信 息会在这 个区域 内输出, 能让我们 直观的 了解到正 在编译哪 个文件 , 编译过 程中 是否 产生 了错 误,而 这些 错误 是哪 些, 由于什 么原 因引 起的 ,这 些内容 都会 显示 在这
6、里。 在这里 我觉 得值 得一 提的 是 CC3.3 和 CCS2.2 工具 栏的区 别,CCS2.2 工具栏 的图如 下面 所示 ,我们将 其和 CCS3.3 的工具 栏比 对之 后发现 CCS.2 中的 探针 工具 已经不 在 CCS3.3 的工具 栏中了 , 这是 因为 CCS3.3 中的 断点就 包含 了先 前版 本的 探针功 能, 如果您 用的 是 CCS3.3, 看的 是低 版本 的 CCS 教程 , 那估计 您 会很郁 闷, 怎么找 也找 不到 探针 工具 ,所以 一定 要在 这里 跟大 家说一 下。 2. 开始调 试程 序 在开始 这部 分内 容之 前, 请将附 件中 的 vo
7、lume1 文件夹复 制到 MyProjects 文件夹下 ,并 打开 CCS ,打 开 Volume1.pjt 。 通常 您在 写 完程序 之后 做的 第一 步工 作是什 么呢 ?对 的, 就是 要编译 工程 , 看看我 们所 写 的 代码是 否具 有语 法错 误, 这是第 一步, 也是很 关键 的一步 , 如果语 法都 错了 , 那就 无从 谈起 功能 了。 点击 编译工 具栏 的 rebuild all 按钮 ,开 始编 译工 程 volume1.pjt 。 编译之 后, 发现 volume1.pjt 有错误, 错误 提示 如下 图 所示。 这是 我们 故意 设置 的一个 错误 , 目的
8、是 来让 大 家体验 一下 如何 分析 和修 改提示 的错 误。 这里 ,错 误提示 是在 “Volume.c” 文件的 第 43 行需要 一个 “; ” , 我们双 击该 条错 误提 示信 息, 光标 会自 动移 到这 个 文件的 第 43 行 ,我们发 现代码是 “asm(“ edis“) ” ,确实 少了一 个分 号。 我们 添加 “; ” 之后 ,保 存一 下, 然 后重新 编译 ,错 误就 消失 了。 希望大 家能 将平 时学 习或 者开发 过程 中的 错误 提示 信息以 及您 相应 的解 决方 案记录 下来 , 和大 家共 享 一下 , 我们会 集中 整理 , 以提 供给后来 的朋
9、 友参 考。 错误是很 让人头 疼的 事情 , 而且千变 万化 , 但是 要是 有一个 参考的 方案 ,肯 定会 给遇 到问题 的朋 友不 少帮 助。 而常见 的一 些错 误肯 定都 是类似 的。 在编译 完成 之后 , 我们 就 要来下 载程 序并 进行 功能 调试了 。 如果 您是 软件 仿真,那直 接点 击“File”,”Load Measuring our success is your success ! 3 HELLODSP 版权所有 请勿用于商业 用途 违者必究 Program” ,打 开对 话框 ,在工程 文件 夹下 面的 Debug 文件夹 下, 选中 volume1.out
10、 ,点击打 开, 便开 始下 载程序 了。 如果您 是有 仿真器和 开发 板了 , 并且 将仿真器 、 开发 板和 电脑 连接好了 , 此时 去点 击 File 菜单, 发现 Load Program 选项 是 灰色的 , 也 就是 说没 办法 下 载程序 , 这 是怎 么回 事呢。 这又 是 CCS3.3 版本和 CCS2.2 版本的 区别 了。 我们 先看 一下 CCS 的最 左下 角,会 发现提 示信 息是 :Disconnected,如下 图所 示, 也就是 说仿真 器没 有成 功将 CCS 和目标 板连 接起 来。 请 点击菜 单栏中 的“Debug” ,“ Connect” ,我们
11、 会发现 刚才左 下角的 提示信 息已 经改了 。仿真 器已经 完成 将 CCS 和目 标板 上的 DSP 连接起 来。 这时 候, 我 们再 去看菜 单栏 中的 “File” 菜 单, 其 中的 “ Load program” 已经变 成可 用了 ,然 后根 据上面 和软 仿真 一样 的方 法,将 volume1.out 文件 下载到 目标 板上 2812 的 RAM 中。注 意, 这里 是调 试, 所以将 程序 下载 到 RAM 。 等到最 后您 要固 化程 序的 时候, 就得 下载 到 FLASH 了, 因为断 电之 后,RAM 里面所有的 数据 都会 消失 。 如何烧 写 FLASH,
12、在 以后 的学习中 会涉 及到 。 软仿真 的时 候可 能不 会出 现问题 , 但 是在 用仿 真器 下载程 序的 时候 我这 跳出 了下面 的问 题, 因为 也是 常见 问题所 以把 它列 出来 : 这个错误提示是数据校验错误在地 址 0x3FFC0, 请核对存储映射文件。不同的硬件环境可能问题会不一样 , 我们就 以这 个为 例。 我们 检查一 下我 们 的 CMD 文件 ,发现 有这 么一 行代 码: PAGE 0 : RESET(R) : origin = 0x3fffc0, length = 0x2 0x3fffc0 正好是这一 部分 内容的起始地址 ,肯能这 段地址有问题或 者咋了
13、, 不是很清楚,那 就修改一 下这 个起始 地址 看看 , 将其改 为 0x3ffc2 , 编译 下载 后 还 是有问 题, 索性 将其 改为 0x3ffff, 跳过一 段, 编译 下载, OK 了! 老激动 了, 咱终 于可 以在 2812 上 跑程 序了 。下 面我 们来了 解一 下这 几个 按钮 ,以便 于下 面操 作: Run ,就 是跑的 意思 ,按 一下这 个按 钮, 程序 就开 始运行 了。 Halt ,暂 停、 停止 、终 止 的意思 ,按 一下 这个 按钮 ,程序 就停 下来 了。 Animate,激励 的意 思, 从图上 我们 也能 看到 ,这 个 小人 充满 了能 量在
14、飞快 的奔跑 。 Run 和 Animate 的区别 , 我的理解 是 Run 是整常 的跑 , 如果遇 到断 点,即障 碍的 话 它就停 下来 了。 而 Animate 是在充 满能 量的 飞 奔 ,啥 也阻挡 不了 它, 所以 就算 有断点 ,它 照常 跑, 这些 障碍它 是不 放在 眼里 的。 在程序 没有 运行 之前 ,Halt 按钮是 灰色 的。 好了 , 赶紧按一 下 Run 按钮, 让程 序跑起 来吧 , 这是 Halt 就高 亮可用 了。 这时 , 我 们可 以看见 在 CCS 下 方的 信息 输出区 域显 示了 “hello dsp !” 这个 程序 的具 体内 容我 们 不
15、做研 究, 只 是用 来作 为 学习 CCS 操作的 一个 工具 而已。 如 果想 让程 序停 止 , 那按一 下 Halt 按钮, 程 序就 Measuring our success is your success ! 4 HELLODSP 版权所有 请勿用于商业 用途 违者必究 嘎然而 止了 ,停 下来 的那 行代码 前会 有一 个黄 色的 小箭头 。 接下来 ,向 大家 介绍 调试 代码时 常用 的一 些操 作。 (1 ) 如何添 加断 点 我 们调试代 码时有时 候想看 看某一行 或者某几 行代码 是否有执 行,或者 想看看 执行前后 变量的一 些变化 , 那么我 们就 需要 在这
16、行或 者这几 行代 码前 加上 断点 了。 加上断 点的 方法 很简 单, 只要 在该行 代码 前双 击就 行。 双击 之后 , 这行 代码 前面会 出现 一个红色 圆块 。 另外一 种添 加断 点的 方法, 就是 在刚 才的 编译 工具栏 上, 点一 下那 个小手 图形 的按钮 , 前天 是你要 把光 标移动 到想 要设 置断 点的 哪一行 上 。 我 还是推 荐大 家 使 用第一 种方 法, 简便 。这 时运 行 Run 按钮 ,程 序就 会在断 点处 停下 ,黄 色的 小箭头 又出 现了 。 那如何 取消 断点 呢, 在刚 刚设置 断点 的那行再 双击 一下 , 代 表断 点的红 色标
17、记就消 失了 , 断点也 就被 取 消 了。 如 果想 要清 除文 件内 的所有 断点 , 那 么我 们可 以按一 下刚 才小 手按 钮旁 边的那 个打 了叉 叉的 小手 按钮 “Debug :Remove all breakpoints” 。 (2 ) 如何单 步调 试 让我们 来了 解一 下 CCS 给 我们提 供的 调试 工具 吧。 调试工 具栏 上分 两类 ,一 类是用 于在 源代 码中 调试 的, 另一类 是用 于在 汇编 代码 中调试 的。 Source-single step 就 是源 代码单 步调 试了 ,这 个很 好理解 ,就 是按 一下 ,走 一步的 模式 。 Source
18、-step over 这个 按 钮是指 在单 步执 行时 , 如果 在函 数内 遇到 子函 数,那么 不会进 入子 函数 内单 步 执行, 而是 将子 函数 整个 执行完 再停 止, 也就 是把 子函数 整个 作为 一步 。 Source-step out 当 单步 执行到 子函 数内 时, 用 step out 就可 以执 行完 子函 数余下部 分, 并返 回到 上 一层函 数。 用于汇 编调 试的 两个 工具 Assembly-single step 和 Assembly-step over 含义 和上 面源文 件调 试的 两个 类似 , 就不再 重复 叙述 了。 理解 这些工 具, 对于
19、 我们 正确 快速的 调试 代码 会带 来很 好的帮 助。 (3 ) 如何使 用 watch window Watch window 的作 用是 来 观察程 序运 行过 程中 的各 个变量 的值 。调 用 watch window 的方 法是 点击 菜单 栏 的”View ”,”watch window” ,这 时 watch window 就会 显示 在 CCS 下方 的信 息区 域,如 下图 所示 : 如果我是想 观察 某个 特定 的变量 , 那怎 么操 作呢 。 也很简 单, 我们只 要在 代码中选 中这 个变 量, 然后右键 “Add to watch window” ,这个变 量就
20、会显 示在 watch window 中。 我们可 以看 到,str 是一个结 构体 变量 , 当 点击 其前 面的 加号 时,就 能将 该变 量展 开, 其各个 成员 变量 的值 也会 被一并 列出 。这 也是 通过 watch window 来查 看结 构体 中各 个变量 的方 法。 Measuring our success is your success ! 5 HELLODSP 版权所有 请勿用于商业 用途 违者必究 (4 )其他一 些操 作 我们在调试程序的时候经常想让程序从 Main 函数开使运行,那怎么定位呢?我们点击菜单栏中 的”Debug”,”Go main”就可以了。 我
21、们会 想要 是调 试的 时候 将源文 件和 汇编 文件 放在 一起那 就好 了, 因为 我们既能看 到源 文件 中代 码的 执行 情况, 又能 看到 汇编 指令 的执行 情况 ,这 样方 便多 了。CCS 也给 我们 设计 了 这一个 功能 ,点 击菜 单栏 中的 “View”,“ Mixed Source/Asm”就能 实现 了。 我们看 到, 每一行 源代 码下 面就会 有相 应的 汇编 代 码, 黄色的 指针 指示 源代 码, 绿色的指 针指 示汇 编代 码。 如果要 取消 源代 码和 汇编 代码在 一个 文件 内的 话, 重复刚 才的 操作 就可 以了 。 3. 统计代 码运 行时 间
22、 接下来 我们 来学 习在 CCS3.3 中 如何 统计 代码 的运 行 时间, 这是 很有 趣的 一部 分内容 。 首先, 我们将 代码的 阅览模 式设 置成 前面 的源 码和汇 编同 时显 示的 模式 。 Measuring our success is your success ! 6 HELLODSP 版权所有 请勿用于商业 用途 违者必究 然后, 点击菜 单栏 中的 “Profile” “Clock” ”Enable”, 来使能 CLOCK 功能。 接下 来点 击 “Profile” “Clock” “View” , 在 CCS 最下 面会 出现 一个 类似于 秒表 的工 具, 旁边
23、 显示数 字“0” 。 我们关 注 main 函数 这一 块 ,在代 码“int *input = ”前面 设置 断点,然 后点 击 Run,这样 程 序就会 停在 这一 行代 码前 面,而 且黄 色指 针指 示源 码,绿 色指 针指 向汇 编。 这时 ,我 们会 发现 ,底下 的 CLOCK 工具 开始 显示 数字啦 ,显 示的 是 753,当 然不同 的环 境显 示的 数字 应该 是不一 样的 。 这应 该就 是从开始 执行 到 这一语 句所 花的时 间了 ,那 753 的单 位是什 么呢 ?不 会是 s 吧,一 想肯定 不是 ,这 753 的单位是“CPU Cycles” ,CPU 的时
24、钟 周期 。 我们来 统计 一下 汇编 指令 的执行 时间 吧, 点击 一下 Assembly-single step 。汇编指令 下移 一行 ,CLOCK 工具 显示 754 , 也就 是刚 才这 句代码 执行 了 1 个 CC。 那 如何统 计执 行一 段代 码所 花的时 间呢 , 在 需要 统计 的那 段代码 开始 和结 束的 地方 分别设 置断 点, 如下 图所 示。 Measuring our success is your success ! 7 HELLODSP 版权所有 请勿用于商业 用途 违者必究 将两个 地方 的 CLOCK 工 具 显示的 值相 减就 能得 到这 一段代 码的 执行 时间 了。 怎么样 ,是 不是 很有 趣? 通过今 天的 学习 , 我们 掌 握了使 用 CCS 开发 DSP 的一些常 用操 作, 这是最 最基本的 , 如果 我们 想 要学会更 加高级 的一 些功 能, 那么 我们只 有好 好专 研 TI 提供 的 CCS 文档, 并且 反复 尝 试琢磨 了。 今天 布置 给大 家的 题目是 如何 使用 CCS3.3 来 显示图 表? 希望 有会 的同 学能出来讲 讲, 也希 望大 家能够将 自己 使用 CCS 的一 些 技巧拿 出来 和大 家分 享。