1、- 1 -Code Composer Studio 教程(二)开发一个 DSP/BIOS 程序在此教程中,通过使用 DSP/BIOS 来优化 hello 程序。此教程需要一个目标板,而且不可以用一软件模拟器来实现。同时,此教程需要 CCS 的 DSP/BIOS 部分。步骤 1:创建一个配置文件另一种实现 hello 程序的方法是使用配有 DSP/BIOS API 的 LOG 模块(API应用程序接口) 。你可以在加载入的程序中使用 DSP/BIOS 来提供基本的运行时间服务。API 模块使实时 DSPs 进行最优化。不同于 C 库调用如 puts(),DSP/BIOS 在不暂停目标硬件的情况下
2、进行实时分析。另外,API 代码占用更小的空间,同时比 C标准的 I/O 运行更快。一个程序可使用一个或更多的 DSP/BIOS 模块。在此,修改 hello 文件以使用 DSP/BIOS API。为应用 DSP/BIOS API,一个程序必须拥有一个程序所使用的定义了 DSP/BIOS 对象的配置文件。1) 打开项目 myhello.mak。 (在 D:hanstudy2 目录下)2) File New DSP/BIOS Config。3) 选择对 DSP 板的类型,确定。此时弹出一界面窗口。4) 右击 LOG-Event Log Manager,并选择 Insert LOG,这样建立一个名
3、为 LOG0的 LOG 对象。5) 右击 LOG0,选择 Rename,改名为“trace” 。6) File Save。保存于工作目录下,配置文件名为 myhello.cmd。保存此配置直接产生以下文件: myhello.cdb:保存配置的设置。 myhellocfg.cmd:连接器命令文件。 myhellocfg.s62:汇编语言源文件。 myhellocfg.h62:包含在 myhellocfg.s62 中的汇编语言头文件。尽管这些文件拥有.s62 和.h62 的扩展名,它们也可应用在 TMS320C6701 中。DSP/BIOS 不需要使用 TMS320C6701 支持的浮点指令,因此
4、支持二者 DSPs只需一种版本的软件。- 2 -步骤 2:加载 DSP/BIOS 文件到项目中在此,加载上面生成的新文件于工作目录中,并移走它们替代的文件。1) Project Add Files to Project 。选择 myhello.cdb。这样在项目下DSP/BIOS Config 中加入了 myhello.cdb。此外,CCS 自动地在项目下源文件夹中加入 myhellocfg.s62 文件。2) 输出文件的文件名必须与.cdb 文件名相匹配(myhello.out 和 myhello.cdb) 。选择 Project Options,点击 Linker 标签,在 output
5、文件框中,确认myhello.out 为文件名。3) project Add File to project。选择 myhellocfg.cmd 文件,确定。此时,出现一警告板,单击“Yes” 。这样,在保存配置文件是生成的新的.cmd 文件代替旧的文件(hello.cmd) 。4) 在项目目录树中,右击源文件 vectors.asm,选择 Rename from project,从项目中移走此文件。硬件中断向量会被 DSP/BIOS 配置文件自动定义。5) 同样移走 rts6201.lib 文件。此库文件自动包含于 myhellocfg.cmd 文件中。6) 双击打开 hello.c 文件,
6、选择 View Mixed Source/Asm 来隐藏其汇编代码。7) 改变源文件的内容,替换主函数,因为 puts()与 LOG_printf 使用相同的资源。注意:此代码的下列部分: 此代码包括 std.h 和 log.h 头文件。所有使用 DSP/BIOS API 的程序必须包含std,h 文件,而且头文件适合于任何程序所使用的模块。log.h 头文件定义LOG_Obj 结构, ,并且声明 API 在 LOG 模块中的运行。Std.h 文件必须优先包含。而包含的拥有模块顺序并不重要。 此代码亦声明在配置文件中生成的 LOG 对象。 在主函数中,此例调用 LOG_printf 并忽略 L
7、OG 对象(&trace)和 hello world 信息的地址。 最后主函数返回,而导致程序进入 DSP/BIOS 空循环。在此循环中,DSP/BIOS 等待软中断和硬中断的出现。8) 保存文件。Project option。在 Compiler 标签下,Category 框中选择Preprocessor,移走右边 Define symbols 框中的 FILEIO。- 3 -9) Project Rebuild All 。步骤 3:用 CCS 来进行测试由于程序只写了一行到一个 LOG,在此无须进行分析。1) File Load program,选择刚刚重建的文件 myhello.out,
8、确定。2) Debug go main。3) Tools DSP/BIOS Message Log。此时在 CCS 窗口底部出现一消息区域。4) 在此消息区域上右击,选择 Property Page 。5) 选择 trace 作为监测记录( the log to monitor)的名字,确定。默认更新率为1 次/秒。 (改变更新率,Tools DSP/BIOS RTA。在 RTA 控制面板上右击并选择 Property Page。选择一个新的更新率,确定。 )6) Debug Run 或 F5。则 hello world 显示在消息记录区域。7) Debug Halt 或 shift F5 停
9、止程序的执行。在主函数返回之后,程序处于DSP/BIOS 空循环状态,直至出现一个事件。8) 关闭 Message Log 窗口。 (这是必需的一步)9) Tools RTDX。打开 RTDX 控制窗口。选择 RTDX Disable,在下拉列表中,在 RTDX 区域上右击,选择 Hide。注意:profiling 与 RTDX 在一些目标板上不能同时应用。DSP/BIOS 插件程序( plug-ins)使用 RTDX 来进行主机/目标间的通信。在一些 DSP 目标板上(例如,TMS320C6201 ) ,不能同时使用 profiling 和RTDX。关闭所有使用 RTDX 的工具,在使用 p
10、rofiling 之前,例如 Message Log 和其它 DSP/BIOS plug-ins。为确保取消 RTDX,特别是在使用 DSP/BIOS plug-ins 之后,选择 Tools RTDX 来打开 RTDX plug-in。选择 RTDX Disable 在下拉列表中,右击,选择 Hide。相反地,在使用 profiling 之后,使用 RTDX 之前释放 protiler 资源,如同教程 1 步骤 8 末尾所描述的那样。- 4 -如尝试同时使用 RTDX 和 profiling,则会出现一个错误信息。步骤 4:DSP/BIOS 代码执行时间的性能分析以前,使用 CCS 性能分析
11、特性得到周期数需要调用 puts()。现在,通过调用LOG_printg 来完成相同的工作。1) File Reload program。2) Profiler Enable Clock。3) 打开 hello.c 文件。4) View Mixed Source/ASM。5) 将光标置于 LOG_printf(&trace, “hello world!”);行。6) 点击 Toggle profile-point 按钮。7) 将光标置于程序的最后一行,点击 Toggle profile-point 按钮。注意:此最后一行并不是 return 行,而是大括号“”行。8) profiler Vie
12、w statistics。9) 要使在 View statistics 窗口中的行数为正序,即行数从上向下,从小变大。10) 点击 Run 或 F5,运行程序。11) 注意指令周期数应为第二个 profile-point。其值大约为 36,这是执行调用LOG_printf 所必需的周期数。调用 LOG_printf 是生效的,因为一系列格式化的执行在主机上要好于在目标DSP 上。12)点击 Halt 或 shift F5,停止程序的运行。步骤 5:试一试为进一步了解 CCS,试一试以下的内容: Load myhello.out,并设置一断点于 LOG_printf 行。用 Debug Brea
13、kpoints来加入一个断点于 IDL_F_Loop。 (在位置条输入 IDL_F_Loop,单击 Add) 。运行程序。在第一个断点,View Cpu registers Cpu register 观察寄存器值列表。注意 GIE 为 0,此表示当主函数(main )正在执行是中断无效。继续运行程序至下一断点。此时 GIE 为 1,此时中断生效。如果运行程序,不断访问此断点。- 5 -在启动过程和主函数完成之后,一个 DSP/BIOS 进入一空循环。此循环由 IDL 模块处理,直到停止程序的运行。此空循环带有中断使能并且可以通过任何ISR(中断服务程序) ,或软中断,或事件触发一操纵实时处理应
14、用程序,在任何点优先取得。 在 MS-DOS 窗口中,以下列命令运行 sectti.exe:cd c:tic6000tutorialhello1sectti hello.out hello1.prncd hello2sectti hello.out hello2.prn当使用 stdio.h 调用和 DSP/BIOS 时,比较 hello1.prn 和 hello2.prn 二文件以观察内存部分和大小的区别。步骤 6:释放性能分析所占用的资源:1) 在 profiler 菜单内,取消 Enable clock。2) 关闭 profiler 统计窗口。3) 删除所有 profiler-profile-points。4) 取消 Mixed Source/ASM。5) 关闭所有窗口。6) 关闭项目。