DSP常见编译错误
DSP常见问题及解决

问:我测试你们的程序的时候,go main 进不去主函数,进入的是一段汇编。
是怎么回事?答:程序如果要进行设断点,观察变量等操作,要先调入project文件,然后再调入out文件。
如果是可以直接执行能看到结果的,就直接调入out文件,run就可以。
问:CY68013的固件程序怎么修改?答:在把QQ2812都研究清楚了,有精力有兴趣自己可以买一本EZ-USB的书好好看看。
在此之前,请不要随便更改固件代码,因为一旦出错,可能带来不必要的麻烦。
固件代码是通过USBControlPanel,使用USB接口进行下载的。
:2812的主频是最大150M,我如果想设为100M是在那里设置?答:打开工程,在Source文件夹下,打开DSP28_SysCtro.c文件,找到如下语句,修改即可。
// Initalize PLLSysCtrlRegs.PLLCR = 0x02;///锁相环产生的时钟频率定标,这里配置为30M问:为什么我的程序在SRAM中正常,烧入Flash后不对?答:1、请先确认你编译的时候使用了flash.cmd,推荐使用我们提供的flash.cmd,如果自己更改了这个文件,请先确认cmd文件的正确性;2、编译的时候,如果选择release模式,请检查一下build option,把其中的opt level改为none,即取消编译优化选项,很多语句在优化的时候可能会产生错误的优化结果。
或者选择debug模式编译,烧写正确后再改为release模式,通过对比两种模式的编译选项也能看出其中的区别。
3、程序在flash中运行会比在ram中运行大概慢20%,因此对于一些时序敏感的外设,比如usb总线,就有可能需要调整时序,否则就会有问题。
问:数码管LED显示的时候发送的数据是怎么规定和产生的?答:其实如果自己看程序和原理图自己就可以知道是怎么产生的。
数码管数据如下:Uint16SpiCode[]={0x7E7E,0x2929,0x2c2c,0x6666,0xa4a4,0xa0a0,0x3e3e,0x2020,0x2424,0x22 22,0xe0e0,0xb1b1,0x6868,0xa1a1,0xa3a3,0xffff,0xdfdf};数码管的笔画对应关系如下:63 742 01 5就是说0~7分别对应笔画的a~h,在原理图看就是分别连接的Q0~Q7这个数码管的型号是LG3611BH,是共阳级的,也就是说某个笔画为0的时候,这个笔画被点亮。
DSP常见问题及解决

问:我测试你们的程序的时候,go main 进不去主函数,进入的是一段汇编。
是怎么回事?答:程序如果要进行设断点,观察变量等操作,要先调入pro ject文件,然后再调入ou t文件。
如果是可以直接执行能看到结果的,就直接调入ou t文件,run就可以。
问:CY68013的固件程序怎么修改?答:在把QQ2812都研究清楚了,有精力有兴趣自己可以买一本EZ-USB的书好好看看。
在此之前,请不要随便更改固件代码,因为一旦出错,可能带来不必要的麻烦。
固件代码是通过USBCon trolPa nel,使用USB接口进行下载的。
:2812的主频是最大150M,我如果想设为100M是在那里设置?答:打开工程,在Source文件夹下,打开DSP28_SysCt ro.c文件,找到如下语句,修改即可。
// Initali ze PLLSysCtrl Regs.PLLCR = 0x02;///锁相环产生的时钟频率定标,这里配置为30M问:为什么我的程序在SRAM中正常,烧入Flash后不对?答:1、请先确认你编译的时候使用了flash.cmd,推荐使用我们提供的flas h.cmd,如果自己更改了这个文件,请先确认cmd文件的正确性;2、编译的时候,如果选择rel ease模式,请检查一下bu ild option,把其中的opt level改为none,即取消编译优化选项,很多语句在优化的时候可能会产生错误的优化结果。
或者选择deb ug模式编译,烧写正确后再改为relea se模式,通过对比两种模式的编译选项也能看出其中的区别。
3、程序在flas h中运行会比在ram中运行大概慢20%,因此对于一些时序敏感的外设,比如usb总线,就有可能需要调整时序,否则就会有问题。
dsp编译错误与解决方法

dsp编译错误与解决方法dsp--ccs部分错误及解决1,ERROR multiple sections with name PAGE0解决 PAGE 0 中间有个空格隔开。
2 ERROR MEMORY specification ignored解决书写格式错误3 ERROR:zero or missing length for memory area SPRAMSPRAM: origin=0x0060H, 解决书写格式错误4 W ARNING: entry point other than _c_int00 specified解决,在“TMS320C6000优化汇编手册”第五章“链接C/C++代令人生厌的multiple definition of我把所有的全局变量写在一个global.h里然后其他文件都include 了它于是出现了multiple definition of ..... 编译器gcc ) 后来在网上搜到了很多类似的错误大家各有各的烦心事。
我的代码结构main.cpp#include "global.h"WinMain(....)...}file_1.cpp#include "global.h"....file_2.cpp#include "global.h"...由于工程中的每个文件都是独立的解释的即使头文件有#ifndef _x_h....#enfif )在其他文件中只要包含了global.h 就会独立的解释,然后生成每个文件生成独立的标示符。
在编译器连接时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。
下面是解决方法在global.c或.cpp) 中声明变量然后建一个头文件global.h 在所有的变量声明前加上extern ... 如extern HANDLE ghEvent; 注意这儿不要有变量的初始化语句。
DSP软件应用中出现的问题

DSP软件应用中出现的问题自己在使用DSP软件Code Composer Studio v4是遇到一些常见的错误:1:Severity and Description Path Resource Location Creation Time Iderrors encountered during linking; "timer_sdram.out" not builtSeverity and Description Path Resource Location Creation Time Idunresolved symbol _ADC_cal, first referenced in ./DSP2833x_SysCtrl.obj出现这样的问题,通常是少了一些文件,需要手动添加这些文件到工程里解决的方法是:在工程上右击links files to project,之后找到DSP2833x _ADC_cal.asm文件添加到工程里2:当我在用到软件中自带的头文件中的一些结构体,共用体。
说白了就是要对芯片寄存器的位进行操作时软件给我们提供了方便,如果不能“.” 符号不能灵活弹出对应选项时,例如CpuTimer0Regs.TCR.all,应该检查CpuTimer0Regs是否敲写正确,应该编译一下工程,我的做法就是写一个头文件,和主函数,并在函数里写一个InitSysCtrl();(当然前提你的头文件要有定义这个函数)在编译。
3:在学习中遇到了在工程中不用添加头文件,有软件来自动查找,就是得先设置Properties选项,指定头文件的路径,在这之前我一直都是手动添加头文件,很是麻烦,对于不太熟练的我还容易出错,4:还要注意要将我们写的程序中用到的源文件全部添加到工程中(这句话听起来好像没说似的,其实不然),如果我们平时在编写程序时,不注意他,他经常会给添加不必要的麻烦(说白了就是在浪费你的时间)5:我在主函数里用到(“MemCopy(&XintffuncsLoadStart, &XintffuncsLoadEnd, &XintffuncsRunStart);”)编译时出现下列错误提示:unresolved symbol _MemCopy, first referenced in ./timer_sdram.obj这样的问题一看就是MemCopy这的问题,1-可能是在你调用前没有声明,在工程中没有添加这个函数2-我们在用到这个MemCopy时拼写错误自己在学习DSP中,在看过的一些书上有的说过在自己编写工程时不清楚自己工程里要用到什么源文件可以把他们都添加到工程里,今天就出现了问题,由此想起了“尽信书不如无书”6:errors encountered during linking; "cpu_flash1.out" not builtplacement fails for object ".text", size 0x1091 (page 0). Available ranges: RAML1出现这样的错误是因为自己多添加了“DSP2833x_ECan.c”这个文件7:errors encountered during linking; "cpu_flash1.out" not builtsymbol "_delay_loop" redefined: first defined in "./cpu_flash.obj"; redefined in "./DSP2833x_Mcbsp.obj" 我的这个程序是对FLASH进行读写操作,正如提示我多加了“DSP2833x_Mcbsp.h”源文件出现了错误。
DSP调试及烧写和加载常见错误及分析

DSP调试及烧写和加载常见错误及分析在进行DSP调试、烧写和加载过程中,常见的错误有很多,下面是一些常见错误及其分析:1.调试错误:-问题描述:无法连接到DSP设备。
-分析:可能是因为设备未正确连接,或者连接线路有问题,也可能是驱动程序不兼容导致的。
-解决方法:检查设备的连接状态,确保连接正确;检查连接线路是否完好;更新或卸载并重新安装驱动程序。
2.烧写错误:-问题描述:烧写失败或者烧写之后设备无法启动。
-分析:可能是烧写的文件有错误或者不完整,也可能是设备本身存在问题。
3.加载错误:-问题描述:加载程序时出现错误,或者加载之后程序无法正常运行。
-分析:可能是加载的程序有问题或者与设备不兼容,也可能是设备本身存在问题。
4.软件错误:-问题描述:使用的调试、烧写或加载软件出现错误或崩溃。
-分析:可能是软件本身存在问题,也可能是与其他软件或系统的兼容性冲突。
-解决方法:更新软件版本,或者使用其他可靠的软件;检查是否存在与其他软件或系统冲突的情况,如果有需要进行排查和修复。
5.设备故障:-问题描述:设备无法识别、烧写或加载,存在硬件故障。
-分析:可能是设备损坏或老化,设备内部电路出现问题。
-解决方法:检查设备的物理状态,是否存在损坏或老化情况;检查设备的内部电路,如果有问题需要进行修复或更换。
6.嵌入式系统错误:-问题描述:DSP芯片上的嵌入式系统无法正常运行。
-分析:可能是系统的软件代码有问题,硬件与软件的不匹配,系统配置错误等。
-解决方法:检查系统的软件代码,重新进行编译、调试和烧写;检查系统的硬件与软件的兼容性,如果有问题需要进行修复或更换;检查系统的配置参数,进行适当的修改。
在遇到以上错误时,可以根据具体情况进行分析和解决。
同时,可以参考调试、烧写和加载工具的操作手册,寻求厂商的技术支持,或者查阅相关的文档和资料来获取更多的帮助和解决方案。
调试、烧写和加载过程中可能会遇到各种各样的问题,需要耐心和细心进行排查和解决。
DSP实验常见错误及解决方法

实验常见错误及解决方法1、启动CCS时出现如下错误:错误原因:以前在CCS setup里设置当前使用的平台为sdgo2xx(硬件仿真),或者同时设置为sdgo2xx 与c2xx simulator,所以进行软件仿真时应设置当前正在使用的为c2xx simulator。
解决方法有两种:方法1:点击“终止”,然后重新设置CCS setup,将sdgo2xx移除。
方法2:点击“忽略”,然后在“Parallel Debug Manager”中Open菜单下选择c2xx simulator2、编译连接时出现如下错误:错误原因是:文件命名、文件夹命名或保存位置不正确。
文件命名:不能以数字开头(包括mak文件的名字)文件夹命名:不能为中文保存位置:项目文件(mak文件)存储的位置一定要与其它文件(C文件、asm文件、h文件、cmd文件、等)放在同一目录下,且最好放在“x:\tic2xx\myprojects”目录下。
3、编译连接时出现如下错误提示:warning: entry point symbol _C_int0 undefined错误原因:用C语言开发的DSP程序在向工程文件添加文件时没有添加运行支持库文件rts2xx.lib注意rts2xx.lib的路径:在C:\tic2000\c2000\cgtools\lib目录下4、CCS与CCS setup均不能启动,提示:不能正确初始化程序或者CCS运行到某个地方后(例如编译连接后)不能停止,观察任务管理器,发现cc_app.exe占用CPU为100%,即CCS已经死了。
错误原因:CCS被病毒感染或破坏,或者多个版本CCS共存,相互干扰。
解决方法:方法1:重新启动电脑方法2:用运行正确的cc_app.exe程序替换被破坏的cc_app.exe程序。
5、编译连接通过,加载程序后,在运行时出现如下错误提示:错误可能原因:第一种可能:没有加载CMD文件第二种可能:CMD文件已加载,但CMD文件编写有问题,存储器配置、定位不正确第三种可能:用C语言编写的DSP程序,C初始化设置错误,已修改C Initialization 设置,方法:Project ——> Option——> Linker6、探测点设置不成功注意:①在设置探测点时应先加载程序②如下图所示,应先点击Probe Point中的选择框,使volume.c line 63——> No Connection被选中,然后在选Connect下拉菜单,找到相关联的数据文件,再点击Replace ,最后点“确定”。
DSP调试及烧写和加载常见错误及分析
Error: Read status value 0x0001 from symbol PRG_statusFlash algorithm failed during clear operation开始可以正常烧写的,但是上机调试了一下就不能写了.在烧写lf2407内部flash时出现如下错误,不知是什么原因造成的?Error:Read status value 0x0001 from symbol PRG_statusFlash algorithm failed during clear operation.换了一个芯片后正常之前有一次在试CCS功能时,一不小心点了一次加密,还没有执行完,就马上点了解密,大概这样烧坏了吧!太脆弱了,再也不敢试加密了CMD文件要避开FLASH的40H--44H区间,我也出现过这样的问题,烧写2407A的片内flash时会出现下面的错误提示:Error: Read status value 0x0001 form symbol PRG_statusFlash algorithm failed during clear operation后来换了一块2407就能烧写了。
是不是2407的flash坏了?有没有办法检测或者修复flash?昨天在网上查了一下,很多人都遇到了这种问题,可能是dsp内部flash烧坏了吧! 今天重新换了一块芯片,可以烧录进去了,但是上拿到样机上调试一下,再烧录就出现了同样的问题,估计又是flash坏了,到底是什么原因引起的?是不是电源引起的呢?我也出现过能仿真,但不能烧写的情况!解决方法:解决方法:降低时钟频率。
点击FLASH插件上的“View Config File”,打开VAR.h文件。
将该文件中的“PLL_PATIO_CONST .Set 0000h”改成“PLL_PATIO_CONST .Set 0200h”存盘后,执行目录下的Buildall.bat批处理文件。
dsp编译错误与解决方法(精)
3 and C6416 DSK (by Rulph Chassaing, 2005". I am working with a C6713DSK, using CCS 3.1. But when I try to run the first example (sine8_LED in Rulph Chassaing's book on the C6713 Device Cycle Accurate Simulator, I get the following error messages: Trouble running Target CPU: Memory Map Error: READ access by CPU to address 0x1b7c100, which is RESERVED in Hardware. Trouble running Target CPU: Memory Map Error: WRITE access by Default to address 0x1b7c100, which is RESERVED in Hardware.
main.cpp
#include "global.h"
WinMain(....
...
}
file_1.cpp
#include "global.h"
....
file_2.34;
...
由于工程中的每个文件都是独立的解释的即使头文件有
#ifndef _x_h
dsp错误集锦
1、syntax error 语法错误2、MEMORY specification ignored RAMM1 不存在的内存说明3、'./Debug/s1.out' not built 没有建立.out文件4、can't open file 'o.obj' for input: No such file or directory5、entry point other than _c_int00 specified 与_c_int00指定的输入点不同6、MEMORY specification ignored 忽视了内存规范7、symbol referencing errors 标签引用错误1.如何为工程添加相应的include(.h)文件对pjt点右键,选择“Scan All File Dependencies”.2.编译错误CCStudio_v3.3/C5500/csl/include/csl_chiphal.h", line 201:fatal error: #error NO CHIP DEFINED 如何解决解决办法:(摘自这里)Project --> Build Options --> Preprocessor --> Pre-define Symbols 中加入CHIP_55023.warning: entry point symbol _c_int00 undefinederror: symbol referencing errors - ./Debug/dc_motor.out not built解决办法:是因为没有添加rts.lib文件导致的。
对“library”点右键,添加C5500文件夹下的cgtool中的rts55.lib文件,即可。
4.错误类型error: linking files for incompatible targets解决办法:出现这个错误是因为之前选择memory模式的时候和后来lib的设置不匹配,例如,如果之前在build option的complier的advance里设置的是large memory模式的话,则在linker的设置里面就要设置为rts55x.lib模式,而不能设置为rts55.lib。
DSP错误总结!
1.warning:entry point symbol _c_int00 undefined使用C写DSP时,在rts.lib库中定义了入口地址:_c_int00而使用汇编语言编程,就不用包括rts.lib库,所以入口地址及其标号可以由人工指定。
而使用C时,就不同了,必须从rts.lib定义的这个入口_c_int00入口,是约定的。
The–c and cr options cause the linker to use linking conventions that are required by the Ccompiler.”其实在汇编语句中也可以不用_c_int00来定义程序入口,只要把编译器选项-c去掉,用-e选项来定义你想要的程序入口地址。
这个可在CMD文件里加-c。
这个错误是没有加库文件,你可以project view右键加入,也可以在project->build options->Linker->libraries中加入../../lib/cls/lib/(搜索路径)还要加上库名cslDM642.lib;rts6400.lib分号隔开。
2.Error:Illegal opcode at pc = 0x000190我第一次遇到这种错误,因为B跳转(分支)指令要有五个周期的延时,所以加上NOP 5就好了。
b .s2 b3;NOP53. error:can't allocate .text, size 006e40 (page 0) in LP (avail:001000)>>error:errors in input - ./Debug/mytest2.out not built这种情况是你的CMD文件中分配的存储空间太小了,LP:origin = 0x0,len = 0x1000改成LP:origin = 0x0,len = 0x100就可以可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. DSP编程技巧到底有什么好资料?话说专门深入讲解这个的资料并不是太多,因为大部分DSP书籍都是讲解算法或者寄存器是怎么使用的,那尽量罗列一下(如有遗漏请在评论区补充),有:(1)《DSP C2000程序员高手进阶》这本书是当年笔者学习DSP的时候看了好几遍的,讲的非常深入、透彻,可惜早就卖光了并且没有再版。
需要的网友可以考虑去图书馆看看,图书馆里最不缺少的就是老版本的书籍了。
(2)EEPW牛人业话我们EEPW首页的牛人业话里,已经有大量这方面的总结了,链接太多就不一一列举了,请到中阅读。
(3)官方资料最权威的当然还是官方资料,特别是《TMS320C28x Optimizing C/C++ Compiler User’s Guide》和《TMS320C28x Assembly Language Tools User’s Guide》。
不足之处就在于,它们都像教科书,严谨有余,活泼不足,特别是初入门的人看起来会比较累。
(4)参加一些培训好的培训一般都是要付费的,这个要根据自己的实际情况进行取舍了。
2. 答疑解惑哪家强?经验的积累,除了自己努力的自学之外,有时候一些难关还是得有别人的帮助才行,可能你花3天搞不定的问题,他一看就想起来是什么原因了。
如果是企业客户,那直接联系官方技术支持,很容易就搞定了。
或者也可以去官方论坛提问,然后等待解答。
对于广大网友来说,直接获得技术支持可能有一定的难度。
我们EEPW的论坛的人气充足,对问题的响应速度也是迅雷不及掩耳的,所以有关DSP的问题尽可以到下提问。
前面这两个无关具体技术,但是能起到“源头”的作用。
接下来就是具体的技术问题了,有几十个,我们慢慢来看吧。
3. 作为入门者,创建一个最基本的工程需要做哪些事情?最简单的入门方法是从现有的例子上入手,比如购买开发板的话,一般都会附送十几到几十个上手用的例子工程,把它们研究一遍,基本上入门这关就过了。
对于C2000 DSP的学习来说,先到TI网站上搜索ControlSUITE软件下载安装,里面的入门视频、工程例子和所有的文档资料都是一应俱全的。
如果你买书籍来入门的话,和教编程的书籍一样,大部分都还是以“Hello world”作为第一个程序入手,然后运行程序显示在调试窗口中的。
4. 一个定点的C28x起始工程最少需要哪些文件和选项?1) 编译器选项:-v28 -ml -mt -g -pdr –w2) 包含main()函数的一个.c或者.cpp程序3) 实时运行支持库文件rts2800_ml.lib4) 链接文件(.cmd)和头文件:一个小的入门工程,一般从别的工程里把它们复制过来就好了,比如可以从ControlSUITE软件的目录下找到对应器件的。
5. 一个浮点的C28x起始工程最少需要哪些文件和选项(启用浮点支持)?1) 编译器选项:-v28 --float_support=fpu32 -ml -mt -g -pdr -w2) 包含main()函数的一个.c或者.cpp程序3) 实时运行支持库文件rts2800_fpu32.lib4) 链接文件(.cmd)和头文件:一个小的入门工程,一般从别的工程里把它们复制过来就好了,比如可以从ControlSUITE软件的目录下找到对应器件的。
6. 包含CLA和VCU的器件,其入门工程需要哪些额外选项?新器件层次不穷,短短几年时间,包含控制律加速器(CLA)和VCU加速器(用来执行高效Viterbi、复杂算术运算,16 位快速傅里叶变换(FFT) 和CRC 算法)的器件已经有几十种了,而且像CLA、VCU这些技术还在快速地升级中,如果要在代码中用到这些特性,就需要添加--cla_support=cla0和--vcu_support=vcu0这样的选项。
7. 编译器选项有那么多中,典型的配置有哪些?C28x编译器的选项非常多,我们用了很长的篇幅来讲解它们。
作为典型配置的话,对于C28x的CPU来说(通常我们把DSP的架构划分为CPU+外设,更复杂的则还有FPU、CLA、VCU等额外单元),常用的选项如表1所示。
注:如果一个选项没有别名,则代表在使用它的时候直接使用全名,如表1的第二列那样的形式。
8. 含有CLA加速器的CPU必备的编译器选项?除了问答4、5、7提到的选项之外,CLA CPU对编译器也有一定的要求,如表2所示。
表2 CLA CPU必备的编译器选项9. “大内存模型”和“小内存模型”的区别是什么?C28x一般使用大内存模型,假设数据可以存放在存储单元的任何可用空间中。
小内存模型的提出其实针对的是基于C27x模式CPU的代码,它默认数据是存放在低64k 存储空间范围内的,除非使用far关键字进行特别指明。
现在的DSP器件片上存储空间普遍比较大,显然使用大内存模型更为合理。
10. 什么是“统一内存模型”?统一内存模型“--unified_memory”指在“统一的内存模式”下产生代码。
顾名思义,就是把所有的存储空间定义为一个整体,不管它是片上的SRAM、ROM、OTP还是使用XINTF接口的外部的存储单元,通常把外设的寄存器也映射到数据存储空间中。
这样编译器在编译时就可以使用PREAD/PWRITE/MAC等指令来处理大部分的内存复制memcpy调用和结构体的分配。
11. 实时运行库RTS的作用是什么?在计算机程序设计领域,运行时库是一种被编译器用来实现编程语言内置函数,以提供该语言程序运行时(执行)支持的一种特殊的计算机程序库。
这种库一般包括基本的输入输出或是内存管理等支持。
在DSP的编程中,它们的作用是用来建立C/C++代码运行的环境,主要包括以下几个方面:1) ANSI/ISO C/C++标准库。
2) C的输入输出I/O库。
3) 为主机的操作系统提供底层的I/O支持。
4) DSP的启动程序_c_int00(可参考)。
12. RTS中函数的描述从哪里可以找到?在问答11中,RTS包含了四大类内容。
前面两者因为是标准C/C++的内容,并没有在TI的文档中给出额外的说明;此外,C++ STL库和它们的API的使用也没有TI官方文档。
此时我们可以参考标准C/C++的书籍、资料、网页等。
如果希望最权威的参考,可以查阅TI提供的参考链接:1) The Standard C++ Library: A Tutorial and Reference, Nicolai M. Josuttis, Addison-Wesley, ISBN 0-201-37926-02) The C++ Programming Language (Third or Special Editions), Bjarne Stroustrup, Addison-Wesley, ISBN 0-201-88954-4 or 0-201-70073-5.3) C++ online reference at4) C代码的静态检查工具当然,作为DSP的开发人员,高效保质地完成代码工作才是最重要,上面那些书籍、链接,请慢慢研究吧。
14. 从哪里可以找到RTS库文件?通常情况下,随CCS软件安装而提供的RTS库文件都位于CCS安装目录中,编译器Codegen对应的子目录中。
例如,在新版本的CCS6.x中,C28x的编译器位于CCS安装目录下面的\tools\compiler\c2000_6.2.5\lib中(根据编译器版本的不同,倒数第二个目录名字会有相应的变化)。
在老版本的CCS中,RTS库文件被默认安装到操作系统的程序目录中,例如C:\Program Files\Texas Instruments\C2000 Code Generation Tools 5.2.4。
对于其它一些特殊的库,例如FPU快速运行支持库FastRTS,则在下载安装了FastRTS安装包之后,位于其安装目录之下的lib文件夹中,例如\FPUfastRTS\V100\lib\rts2800_fpu32_fast_supplement.lib。
如果安装了controlSuite软件,则可以通过它内置的说明或者搜索功能找到对应的库文件。
15. RTS库那么多,我们应该使用哪一个?随着器件类型、特性的不断发展,现在在CCS安装目录下叫RTSxxx.lib的文件已经非常非常多了,那么到底哪些是适合我们使用的呢?对于C28x器件,总结如表3所示。
表3 C28x DSP使用的实时运行支持库16. 已经启用了rts2800_fpu32_eh.lib ,为什么还要用rts2800_fpu32_fast_supplement.lib?在含有FPU的器件上,如果在不启用--float_support=fpu32编译器选项的情况下使用浮点数编程,那么它的运算还是CPU来执行的,执行效率就和从定点CPU上直接使用浮点运行进行编程一样低;启用了--float_support=fpu32编译器选项之后,浮点数的加法、减法、乘法等操作则有FPU来完成,执行效率自然要高出很多。
使用rts2800_fpu32_fast_supplement.lib库的目的,则是为了调用DSP的ROM中的数学表快速计算一些数学函数,包括atan、atan2、cos、division、isqrt、sin、sincos、sqrt等。
如果不使用rts2800_fpu32_fast_supplement.lib库来完成这些数学运算,则编译器默认情况下是使用标准C/C++数学库里的函数来完成这些运算的,效率自然不能和查找ROM中的数学表一样迅速。
那么CCS为什么不附带安装FastRTS库呢?这可能和在定点DSP的使用中,IQmath库也不是附带安装是通用的道理吧,其它相类似的,一些信号处理函数库,例如FFT、IFFT等也不是CCS安装的时候附带的,需要自己去下载安装支持程序。
17. 如何把RTS库添加到工程文件中?如果使用命令行脚本的方式添加库文件,则使用-l <库文件名>来添加即可。
在图形化界面下,填加RTS库文件的选项在不同版本的CCS中是不一样的,在此把它们一一列出。
在CCS6.x和5.x版本下:在工程管理器中的工程名上点击右键,选择"properties",然后切换到如下视图。
在CCS4.x版本下:在CCS3.3版本以及更低的版本下:针对比CCS3.3更古老的版本:如果不习惯使用Eclipse样式的开发环境,或者某些仿真器不兼容CCS4.x以及以上版本,或者你还在使用最古老的TMS320VC33这样的芯片,否则至少应该升级到CCS3.3这样的版本了。
18. 在对库文件进行修改,或者使用不同版本的编译器时,如何重新编译库文件?在编译器版本不低于6.0.2的情况下,我们可以直接使用编译器提供的工具来重新编译RTS库文件,即Mklib程序。