#教学大纲
介绍代码调试器使用环境,以及如何调试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**
- 运行程序
不想一下子完成所有步骤? (**Debugger Options**)
如果针对一个设备的调试是第一次运行,将弹出的对话框问您所选**CPU**(如果项目支持多核也会出现)。
6. 取消选择 **C28xx_CPU2**,点击 **OK**。
![](./images/debug_launch_1.png)
CCS会调至调试模式并暂停在main()
![](./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(中断点)
中断点是标记某处的代码,使运行中断的点。一旦中断, 我们可以观察registers/memory/etc.中的值,更好的了解程序运行。这在调试中尤为重要。
[[b 软件中断点和硬件中断点
**硬件中断点** 常用于 **Flash**, 每个目标板可以使用的数量有限(C2000可以使用2个)。 **软件中断点** 常用于 **RAM**, 使用数量几乎不受限制。 更多相关信息可以在[这里找到](https://processors.wiki.ti.com/index.php/How_Do_Breakpoints_Work)。
]]
1. 如果您的SimpleLink LaunchPad正在运行。 请确保您正在 **Debug**(调试)界面并 **Suspend**(暂停)程序。 如果不是, 选择 **Run → Debug** 运行程序。
2. 点击 **View → Breakpoints** 打开 **Breakpoints view**。
3. 在**CCS Debug**界面,打开**LEDBlink.c**,找到第176行,双击本行左边缘,在 **RAM**中设置 **软件中断点** 。当代码运行到这一行时,程序会暂停。
![](./images/breakpoint_1.png)
4. 点击 **Run → Resume**,程序暂停在中断点处。
5. 反复点击 **Resume** 运行/暂停程序,注意到红色LED闪/灭交替。
6. 在 **Breakpoints** 界面移除中断点。或者双击中断点代码左侧蓝色标志。
![](./images/breakpoint_2.png)
7. 选择 **Run -> Restart** 或者点击工具栏的 **Restart** 重启项目。
### Watchpoints(观察点)
观察点是中断点的一种,用来追踪观察某个地址储存的值。
1. 如果您的SimpleLink LaunchPad正在运行。 请确保您正在 **Debug**(调试)界面并 **Suspend**(暂停)程序。 如果不是, 选择 **Run → Debug** 运行程序。
2. 在**Breakpoints** 界面,点击**New (down arrow) → 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 → Debug** 运行程序。
2. 点击 **Run → Clock → Enable**。一个时钟的标志将会在CCS右下方角落出现。
![](./images/profile_1.png)
3. 双击 *LEDBlink.c 第176行左侧。**Breakpoints**界面将会出现一个中断点。
![](./images/profile_2.png)
4. 点击 **Run → Resume** 运行程序,触发中断点,程序暂停。注意到此时右下角的时钟右边显示了一个数字(~30M)。这是从程序开始运行到现在的**clock cycle**。
![](./images/profile_3.png)
5. 双击时钟图标,清零记录。
![](./images/profile_5.png)
6. * 点击**Run → Resume**。程序会继续运行至下一次中断点并暂停。此时右下角时钟图标右侧的数字大约在30M(每两次闪烁之间)。
7. * 多次点击**Run → Resume**。发现右下角时钟图标右侧的数字大约增长30M(每两次闪烁之间)左右。
8. 移除中断点。
### Disassembly View反汇编展示
1. 选择 **Run -> Restart** 或者点击工具栏的 **Restart** 重启项目。此时程序将会暂停在 *main()*。
2. 点击 **View → 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**中调试代码。