CCS常用问题整理.docx

上传人:b****0 文档编号:441388 上传时间:2022-10-10 格式:DOCX 页数:15 大小:1.17MB
下载 相关 举报
CCS常用问题整理.docx_第1页
第1页 / 共15页
CCS常用问题整理.docx_第2页
第2页 / 共15页
CCS常用问题整理.docx_第3页
第3页 / 共15页
CCS常用问题整理.docx_第4页
第4页 / 共15页
CCS常用问题整理.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

CCS常用问题整理.docx

《CCS常用问题整理.docx》由会员分享,可在线阅读,更多相关《CCS常用问题整理.docx(15页珍藏版)》请在冰豆网上搜索。

CCS常用问题整理.docx

CCS常用问题整理

CCS常见使用问题及解决方法

问题1:

CCS编译环境下的使用步骤及常见问题

解决方案:

一、见到下面的警告对话框请不要担心,值得一提的是DSP开发成本相对比较高,它需要专用的仿真器和目标板,一般来说成本都是几千元的。

对于一般的想熟悉下编辑环境不想花费代价,就可以在弹出下面对话框中选择画线按钮。

图1.1 警告

二、然后我们就可以进入到编辑窗口中。

图1.2 编辑窗口

三、单击“open”选项,会出现两个下拉菜单,其含义图中已经有所说明,这里我们选择第一个软件仿真。

图1.3选择第一个软件仿真

四、单击我们就可以进入到软件编辑窗口中。

图1.4 编辑窗口

五、为了方便说明,我们打开一个已经新建好的工程,工程后缀为“*.pjt”。

用CCS打开/创建工程时,工程存放的路径名中不能有中文!

(不像VS6、ISE等可以使用任意路径名)

图1.5打开工程

六、打开工程后,打开工程文件中的sourse文件夹会发现里面有很多的C语言文件,但是我们只用到最后一个,即下图中画圈部分。

其他的文件不需要去深入的了解,如果我们想新建工程的话,那么我们认为把以前的文件COPY还比较快点,另外稳定性的高。

图1.6 工程文件选择 

七、文件的编译。

一般来说我们主要用图中画圈部分的两中编译方法。

图1.7 编译

图1.8 编译提示

八、如果上面的编译没有问题我们就可以进行下面的操作了。

图1.9编辑窗口

图1.10

打开“*.out”文件之后,我们可以进行下面的调试的操作了。

首先,在菜单“debug”的下拉菜单中依次选取:

ResetCPU、Restart和Gomain三个选项,注意顺序一定不能弄反,否则可能编译不了。

上一步骤完成之后,我们就可以进行单步或者是全速执行等调试操作了。

这和keil软件的功能差不多,不需要在这里多加重复。

问题2:

CCS中库使用问题

解决方案:

下面以“volume”程序为例讲一下CCS中如何看程序运行的时钟周期。

首先打开一个Project文件。

其中*.c文件和*.h文件与普通的C语言编程中是一致的(TI编译器支持ANSIC标准)。

需要指出的是三个文件:

VOLUME.CMD、RTS6400.LIB、VECTORS.ASM。

VOLUME.CMD文件给出了程序空间和数据空间的设置、及编译后各程序段在程序或数据空间的具体位置。

RTS6400.LIB文件为DSP运行时库,VECTORS.ASM为中断向量表,都是区别于纯软件编程的独到之处,熟悉以后会有更深的体会。

下图为volume.CMD文件的代码,MEMORY分为程序空间IPRAM和数据空间IDRAM,并分别给出了起始地址origin和长度len,各段在MEMORY空间的分配也作了定义。

对于实际的目标板硬件系统,由实际的存储器空间及DSP芯片上的存储空间决定。

对于软件仿真,可以不考虑有没有MEMORY资源。

自己在编写工程项目文件时,经常会遇到下面的问题,没有C语言程序的入口函数,细心比较一下会发现工程文件中缺少了一个运行时支持RTS6400.LIB,不同的DSP芯片需要不同的运行时库来支持。

下面向项目工程中加上运行时库RTS6400.LIB来纠正刚才的编译错误,同样的方法可以用来向工程中添加*.c、*.cmd、*.asm文件。

*.h文件在编译时会自己找到(需要在环境变量中设置好,一般不需要改动)。

运行时库在TI的缺省路径下,注意将文件类型改为*.lib。

设置完成后再一次BUILD时,会出现正确结果。

问题3:

LOG_printf和printf的正确使用问题(区别与联系)

解决方案:

共性:

都是用于输出一些内容,一般用于显示一些调试信息,而且可以格式化输出,比如用’%d’输出整数

区别:

1输出目标不同,printf输出到output窗口,而LOG_printf输出到BIOS的log窗口

2汇编指令条数不同,printf需要上万条汇编指令,而LOG_printf只要30多条汇编指令,因此LOG_printf的运行速度比printf要快的多,一般在实时系统中,都使用LOG_printf来输出,这样对系统的实时性影响才不大。

3.参数个数不同,printf后面的参数个数可以有很多个(具体多少个没测试过),而LOG_printf后面最多只能有4个参数,第一个是写入的地址,第二个是字符串,后面最多加上两个格式化输出的数据,这两个数据还必须是整型,或者指针,或者常量字符串

4.可以输出的格式不同,printf有很多的格式,而LOG_printf只有有限的几种.(%d整型,%x无符号16进制数,%o无符号8进制数,%s常量字符串,%p指针)

5.LOG_printf输出的长度受设定的buffer大小限制,如果超出buffer大小,根据设置的不同,可以是停止输出,或者覆盖原来的内容

6.LOG_printf的优先级比较低,可能是在KNL层,只有系统比较空闲的时候,才会输出,而printf是必然会输出.(比如在一个i=1到100的循环中,用printf就会输出100个数,而用LOG_printf就只会输出一部分数,而且在没有碰到断点的时候,根本不会输出,因为他的优先级相当低,只有在走到断点的时候,系统才允许它执行。

图3.1Printf函数使用图示

图3.2LOGPrintf函数使用图示

问题4:

CCS中改变程序选项引起的语法错误问题

问题描述;

在学习VOLUME1.pjt时,我们在对该工程文件进行compile&build后,进一步选择Project®BuildOptions。

打开后选择Compilertab,然后选择从目录里点击Preprocessor,Pre-DefineSymbol[-d]写入FILEIO在field,然后点TAB键并确定修改完成。

REBULID一次得到如下结果:

解决方案:

双击描述第一行错误syntaxerror:

expecteda";".(actuallinenumbermayvary),然后在processing(input,output)句末添加一个“;”再次运行程序就可以顺利load了。

问题5:

CCS3.1与WIN7不兼容问题

问题描述:

CCS3.1在WIN7系统下无法安装,可能是由于WIN7内部某些库经过更新而无法为CCS3.1使用所致

解决方法:

安装虚拟机,在虚拟机上启动WINDOWSXP系统,然后在虚拟机环境下安装CCS3.1

接着就可以在虚拟机下启动WINDOWSXP安装CCS3.1,并且可以以后每次启动CCS3.1都是在虚拟机环境下启动。

启动CCS3.1时会出现如图窗口,选择忽略即可打开该软件。

这样CCS3.1与WIN7不兼容的问题得以解决。

问题6:

FFT变换功率谱计算问题

问题描述:

在for(i=0;i

其中数组FFT中存放FFT变换后的结果,数据类型为int,偶数下标为实部,奇数下标为虚部。

计算后结果保持到Power数组中,用Graph绘制Power中的数据,如图1所示。

原始信号中包含10Hz和50Hz两个频率的信号成分,功率谱中应该在10Hz与50Hz对应的位置出现两个波峰,而图1没有体现出这样的特性。

图1

事实上,直观的观察数组FFT中的数据,用Graph绘制出来。

如图2所示。

图2

数组FFT中偶数下标为实部,奇数下标为虚部,用Graph直接将实部与虚部都绘制出来,虽然曲线没有实际的意义,但一定程度上反映出功率谱曲线的形状,同时可以直观的观察每个数据的数值。

对比图2和图1,可以发现,计算功率是结果出错了。

错误的原因可能是int型整数乘法溢出了。

解决方法:

扩大计算精度可以防止溢出的发生。

原有的计算功率的语句替换为:

for(i=0;i

Power[i]=sqrt((float)OutFFT[i*2]*OutFFT[i*2]+(float)OutFFT[i*2+1]*OutFFT[i*2+1]);

将int整形乘法转换为float类型的乘法,保证乘法运算不溢出。

用Graph绘制出功率谱如图3所示,此时功率谱在10Hz与50Hz处出现两个波峰,与实际情况相符。

图3

问题7:

CCS3.3下float类型函数返回了错误的值

问题描述:

stencilrecognize即调试图像清晰度函数,函数definition_calc()在image_deal.c里定义,返回值为float,返回变量为SG_sum;在主函数里引用,并将函数返回值赋值给一个float型变量,变量名为image_definition;编译通过,无错误和警告.SG_sum值计算正确,但函数返回后,变量image_definition的结果不正确.

解决方案:

1.函数返回值强制类型转换为long,将函数返回类型和image_difinition的类型都修改为long,结果正确。

2.复原返回值为float,在主函数之前加函数floatdefinition_calc()声明,结果正确。

初步结论:

虽然CCS3.3下,跨文件函数引用不需要函数声明也能编译链接通过,但为了避免同上的莫名其妙问题出现,推荐还是严格按照C的标准语法编程--跨文件函数引用,提前声明。

后续问题:

为什么只有float返回才会出问题,int和longchar都正常?

是不是编译器需要做设置或调整?

既然不需要提前声明,那是不是系统自动生成了头文件或是其他什么文件。

问题8:

CCS3.3中每种数据类型的长度和取值范围总结

问题描述:

在CCS编程过程中,常常会因为没有确定好合适的数据类型,从而造成数据溢出是的计算的结果出现错误。

而初学者在这方面经验不足,因而有时找不到语法错误,但是却得不到自己想要的结果,例如两个数进行点积运算

在给寄存器载入数据前我们需要了解我们运算的数据类型是什么,因此我们首先要计算数据长度才能确定数据类型。

对于以下较大数据选用一个16位寄存器在相乘时会出现数据溢出的情况,从而使程序检验阶段程序员分析判定出现疑问。

解决方案:

在数据计算之前,需要对数据类型做出清晰地认识,避免发生低级错误

数据类型

长度(字节)

值域

char

1

ASCII码字符

unsignedchar

1

-128~127

signedchar

1

0~255

unsignedint

4

0~4294967296

int/signedint

4

-2147483648-2147483647

unsignedshort/unsignedshortint

2

0~65535

short/shortint/signedshort/signedshortint

2

-32768~32767

unsignedlong/unsignedlongint

8

0~1.8447e+019

long/longint/signedlong/signedlongint

8

-9.2234e+018~9.2234e+018

float

4

约精确到小数点后6位数

double

8

约精确到小数点后15位数

问题9:

CCS3.3中代码运行时间统计问题

问题描述:

由于在实际编程过程中会考虑到程序性能的问题,因此需要在CCS中统计代码的运行时间,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1