本文主要介绍CCS的C语言开发环境,比较了在C6000系列处理器上编译器的C语言代码和线性汇编、手工汇编的优化效率,C语言的代码编译链接生成过程,然后介绍了CCS的主要组件,simulator、emulator仿真器、debug和编译链接器等,最后是编译选项和TCF文件的描述以及CCS GEL文件和DSS Script自动化脚本。
C语言和线性汇编、手写汇编的优化效率
图1.C语言和线性汇编、手写汇编的优化效率
在C6000的高效编译器下,通过简单的优化指导原则,就能达到很高的效率,如图1所示,C代码的效率能达到手工汇编的85%~100%。
C6000系列DSP的代码编译生成过程
首先是编辑器来编写C代码和线性汇编,对于C代码,通过汇编器生成汇编文件,对于线性汇编,则通过汇编优化器生产汇编文件,汇编文件经过汇编器生成目标文件*.obj,然后目标文件通过链接器和内存映射文件生成可执行的COFF的.out文件。
CCS组件
Code Composer Studio包括如下组件:
IDE集成开发环境,Debug GUI;
Simulator仿真器;
Code Generation Tools代码生成工具;
实时内核real-time: DSP/BIOS系统
XDS510或者XDS560仿真器驱动(TI的,Spectrum Digital和Blackhawk的仿真器),连接EVM和SDK硬件,进行硬件仿真;一般通过14针的JTAG接口连接硬件;
图3. CCSv3.3 开发环境
图4. CCSv4的开发环境
CCS .pjt project文件
源代码;
链接库;
编译器和链接器选项
存储器映射map文件
DSP/BIOS配置
CCS 编译选项
-mv6700:
产生'C67x代码(默认为'C62x)
-mv6400:产生'C64x代码
-mv6400+:产生'C64x+代码
-mv6740:产生'C674x代码
-mv6600:生成C66x代码;
-fr <dir>:设置object和输出文件路径;
-fs <dir>:设置汇编文件输出路径;
-g:使能符号debug信息;
-ss:除了-g选项外,还把C语句和汇编语句嵌在一块;
-o3:优化选项(-o0, -o1, -o2/-o, -o3,-ms)
-k:保留asm文件,但不嵌入C代码;
链接选项
-o<filename>:输出文件名称;
-m<filename>:存储映射关系文件名称;
-c:自动初始化static/global的变量;
默认的编译配置
Debug:-g,没有优化的版本;
Release:-O3,优化的版本;
TCF文件(Configuration Tools)
简化系统设计,自动的加入RTS实时运行库
自动的处理中断向量和系统复位;
MEM处理内存配置,加入build时的CMD文件;
例子
/* load platform */
utils.loadPlatform("ti.platforms.dsk6416");
config.board("dsk6416").cpu("cpu0").clockOscillator = 600.0;
/* make all prog objects JavaScript global vars */
utils.getProgObjs(prog);
/* Create Memory Object */
var myMem = MEM.create("myMem");
myMem.base = 0x00000000;
myMem.len = 0x00100000;
myMem.space = "data";
/* generate cfg files (and CDB file) */
prog.gen();
var trace = LOG.create("trace");/* create a new user log, named trace */
trace.bufLen = 32;/* initialize its length to 32 (words) */
C6000编译器下的数据类型定义:
char :8bit的ASCII表示;
short:16bit的2进制补码;
int:32bit的2进制补码;
long:40bit的2进制补码;
long long:64bit的2进制补码;
float:32bit的IEEE单精度浮点数据;
double:64bit的IEEE双精度浮点数据;
pointer:指针,32bit二进制表示;
CCS的自动化测试
命令行窗口
help
dlog<filename>,a
dlog close
alias...
take<filename.txt>
load<filename.out>
reload
reset
restart
ba<label >
wa<label>
run
run<cond>
go<label>
step<number>
cstep<number>
halt
GEL(General Extension Language)脚本
C代码风格的语法
包含若干的debugger命令如GEL函数;
可以写自己的函数
创建GEL的目录项
CCS脚本
使用VB Script或者Perl来调试;
使用CCS脚本可以完成如下功能
启动CCS
加载一个可执行文件
读取或者写入内存;
设置和清除断点;
运行和执行某些debug函数;
DSS Script
开始CC_APP.EXE
从GUI开启debug engine——DebugServer
DebugServer.DLL独立于CCS GUI应用程序;
可以重用CCS或者其他的Eclipse GUI
Reference:
C6000 Programmer's Guide (SPRU198)
Compiler Tutorial (in CCS Help & SPRU425a.pdf)
C6000 Optimizing C Compiler UG (SPRU187)
http://www.blog.163.com/houh-1984
http://processors.wiki.ti.com/
本文主要介绍CCS的C语言开发环境,比较了在C6000系列处理器上编译器的C语言代码和线性汇编、手工汇编的优化效率,C语言的代码编译链接生成过程,然后介绍了CCS的主要组件,simulator、emulator仿真器、debug和编译链接器等,最后是编译选项和TCF文件的描述以及CCS GEL文件和DSS Script自动化脚本。