<!-- Start of markdown souce --> #教学大纲 介绍代码调试器使用环境,以及如何调试C2000 LaunchPad。 这篇教学使用**C2000Ware**的软件。如果你在使用**ControlSuite**,请参照另一篇[教学](https://software-dl.ti.com/ccs/esd/training/workshop/ccsv7/c2000/site/)。 #准备阶段 **软件** * **[Code Composer Studio v8.3.0](https://processors.wiki.ti.com/index.php/Download_CCS)** 或更高版本。 * 所有与**C2000**相关的内容。 **硬件** - [F28379D LaunchPad (LAUNCHXL-F28379D)](https://www.ti.com/tool/launchxl-f28379D) ![](./images/launchxl-f28379d.jpg) 用迷你USB连接**LaunchPad**与电脑。 #LAB 1 - 开始 目标 - 导入项目 - 加载项目至**LaunchPad** - 运行项目 涉及概念 - Eclipse相关 (Workspace, Workbench, Perspectives, Views, Projects) - Resource Explorer(资源探索) ##运行Code Composer Studio (CCS)并打开Resource Explorer(资源探索)界面 1. 运行Code Composer Studio (CCS) 2. 选择您想要储存项目的工作文件夹。 3. 在**Getting Started**页面选择**Browse Examples**。 ##Resource Explorer(资源探索) **Resource Explorer**包含了所有TI远程客户端和您本地已下载的可以使用的项目。 1. 通过左上角的 *Select a device or board* 选择您正在使用的设备或板子。针对本篇教程请选择 **F28379D**。 2. 通过*Software -> C2000Ware -> Chinese -> Devices -> F28379D -> 示例* 选择**位域**。 3. 点击 **Download and install** 下载并安装项目至本地。(如果您要使用其他范例,同样也要下载并安装) ![](./images/rex_download_1_c.png) 点击确认安装,一旦下载完成,Resource Explorer将会出现绿色箭头标记的 **C2000Ware** 相关内容,表示其已在本地可用。 4. 通过 **Software -> C2000Ware -> Chinese -> Devices -> F28379D -> 示例 ->位域 ->CPU1 ** 选择 **timed_led_blink**,点击 **Import to IDE** 导入至IDE。 ![](./images/import_1.png) 这样会导入项目至您的工作文件夹。您可以在 **Project Explorer** 中看到项目内容。 ![](./images/import_2.png) 5. 选择*Run -> Debug* 运行项目。或者您可以选择工具栏里的 **Debug** 按钮。 接下来会自动运行 - 存储源文件(如果需要) - 建立项目 - 开始调试(CCS会调至 **CCS Debug** 模式) - 连接CCS与目标板 - 加载项目至**LaunchPad** - 运行程序 <br> 不想一下子完成所有步骤? (**Debugger Options**) 如果针对一个设备的调试是第一次运行,将弹出的对话框问您所选**CPU**(如果项目支持多核也会出现)。 6. 取消选择 **C28xx_CPU2**,点击 **OK**。 ![](./images/debug_launch_1.png) CCS会调至调试模式并暂停在<tt>main()</tt> ![](./images/debug_launch_2_c.png) 7. 选择 **Run -> Resume** 或点击上方工具栏的 **Resume** 继续程序。 程序会继续运行使LED灯闪烁。 ![](./images/f28379d_blinking.jpg) 8. 选择 **Suspend** 暂停程序。 ![](./images/restart_c.png) 9. 选择 **Restart** 重启程序。 #LAB 2 - 基本调试概念 目标 这部分教程将使用LED闪烁的例子。具体将被讲解的内容: * Breakpoints * Watchpoints * Profile Clock * Disassembly View * Other Views ### Breakpoints(中断点) 中断点是标记某处的代码,使运行中断的点。一旦中断, 我们可以观察<tt>registers/memory/etc.</tt>中的值,更好的了解程序运行。这在调试中尤为重要。 [[b 软件中断点和硬件中断点 **硬件中断点** 常用于 **Flash**, 每个目标板可以使用的数量有限(C2000可以使用2个)。 **软件中断点** 常用于 **RAM**, 使用数量几乎不受限制。 更多相关信息可以在[这里找到](https://processors.wiki.ti.com/index.php/How_Do_Breakpoints_Work)。 ]] 1. 如果您的SimpleLink LaunchPad正在运行。 请确保您正在 **Debug**(调试)界面并 **Suspend**(暂停)程序。 如果不是, 选择 **Run &rarr; Debug** 运行程序。 2. 点击 **View &rarr; Breakpoints** 打开 **Breakpoints view**。 3. 在**CCS Debug**界面,打开**LEDBlink.c**,找到第176行,双击本行左边缘,在 **RAM**中设置 **软件中断点** 。当代码运行到这一行时,程序会暂停。 ![](./images/breakpoint_1.png) 4. 点击 **Run &rarr; Resume**,程序暂停在中断点处。 5. 反复点击 **Resume** 运行/暂停程序,注意到红色LED闪/灭交替。 6. 在 **Breakpoints** 界面移除中断点。或者双击中断点代码左侧蓝色标志。 ![](./images/breakpoint_2.png) 7. 选择 **Run -> Restart** 或者点击工具栏的 **Restart** 重启项目。 ### Watchpoints(观察点) 观察点是中断点的一种,用来追踪观察某个地址储存的值。 1. 如果您的SimpleLink LaunchPad正在运行。 请确保您正在 **Debug**(调试)界面并 **Suspend**(暂停)程序。 如果不是, 选择 **Run &rarr; Debug** 运行程序。 2. 在**Breakpoints** 界面,点击**New (down arrow) &rarr; Hardware Watchpoint**。 ![](./images/watchpoint_1.png) 3. **Location** 一栏填写`CpuTimer0.InterruptCount`,**Memory** 一栏填写 **Write**,点击 **OK**。 ![](./images/watchpoint_2.png) 4. 在**Breakpoints** 界面,鼠标右击已经添加的**hardware watchpoint**,选择 **Breakpoint Properties...** 更改设置。 ![](./images/watchpoint_3.png) 5. 展开**Type**,**With Data**设置为**Yes**,**Data Value**设置为**0x20**,点击**Apply and Close**。当**CpuTimer0.InterruptCount**的值变为**0x20**时,程序将会暂停。 ![](./images/watchpoint_4.png) 6. 切换至 **编辑模式**,找到第176行,选择 **CpuTimer0.InterruptCount**,右键选择 **Add Watch Expression...**,添加 **CpuTimer0.InterruptCount** 至 **Expressions view**。 ![](./images/watchpoint_5.png) 7. 点击 **Expressions view**继续运行程序至程序暂停。**Expressions view** 中 **CpuTimer0.InterruptCount** 的 **Value** 一栏变成 **32** (0x20)。 ![](./images/watchpoint_6.png) 8. 移除中断点。 ![](./images/watchpoint_7.png) 9. 选择 **Run -> Restart** 或者点击工具栏的 **Restart** 重启项目。 ### Profile Clock(分析器时钟) 分析器时钟用来测量运行时间,多用于测量代码中某两行之间的运行时间。 1. 如果您的SimpleLink LaunchPad正在运行。 请确保您正在 **Debug**(调试)界面并 **Suspend**(暂停)程序。 如果不是, 选择 **Run &rarr; Debug** 运行程序。 2. 点击 **Run &rarr; Clock &rarr; Enable**。一个时钟的标志将会在CCS右下方角落出现。 ![](./images/profile_1.png) 3. 双击 *LEDBlink.c 第176行左侧。**Breakpoints**界面将会出现一个中断点。 ![](./images/profile_2.png) 4. 点击 **Run &rarr; Resume** 运行程序,触发中断点,程序暂停。注意到此时右下角的时钟右边显示了一个数字(~30M)。这是从程序开始运行到现在的**clock cycle**。 ![](./images/profile_3.png) 5. 双击时钟图标,清零记录。 ![](./images/profile_5.png) 6. * 点击**Run &rarr; Resume**。程序会继续运行至下一次中断点并暂停。此时右下角时钟图标右侧的数字大约在30M(每两次闪烁之间)。 7. * 多次点击**Run &rarr; Resume**。发现右下角时钟图标右侧的数字大约增长30M(每两次闪烁之间)左右。 8. 移除中断点。 ### Disassembly View反汇编展示 1. 选择 **Run -> Restart** 或者点击工具栏的 **Restart** 重启项目。此时程序将会暂停在 *main()*。 2. 点击 **View &rarr; Disassembly** 打开 **Disassembly** 界面。默认打开档期那运行代码反汇编语言。程序计数器的地址被蓝色箭头指示。 {{b 您可以通过更改 **location box**中的地址查看不同位置的反汇编语言。例如**0x2600** 或 **main**。}} 3. 点击 **Disassembly** 中的 **Show Source**展示源代码和反汇编语言。 ![](./images/disassembly_1.png) ### Other Views(其他调试功能) #### Registers View(寄存器) The **Registers view**用来展示和编辑外设寄存器上的值。 ![](./images/registers_1.png) #### Modules View(模块试图) The **Modules view** 允许浏览已加载的调试符号。这在不以项目为单位的调试中尤为重要。 ![](./images/memory_allocation_1.png) ##总结 Lab 1讲解了如何在**Code Composer Studio**中导入并运行使用**C2000**项目。 Lab 2讲解了如何在**Code Composer Studio**中调试代码。 <!-- End of markdown source --> <div id="footer"></div>