您好,欢迎访问三七文档
1.DSP编程技巧到底有什么好资料?话说专门深入讲解这个的资料并不是太多,因为大部分DSP书籍都是讲解算法或者寄存器是怎么使用的,那尽量罗列一下(如有遗漏请在评论区补充),有:(1)《DSPC2000程序员高手进阶》这本书是当年笔者学习DSP的时候看了好几遍的,讲的非常深入、透彻,可惜早就卖光了并且没有再版。需要的网友可以考虑去图书馆看看,图书馆里最不缺少的就是老版本的书籍了。。。(2)EEPW牛人业话我们EEPW首页的牛人业话里,已经有大量这方面的总结了,链接太多就不一一列举了,请到中阅读。(3)官方资料最权威的当然还是官方资料,特别是《TMS320C28xOptimizingC/C++CompilerUser’sGuide》和《TMS320C28xAssemblyLanguageToolsUser’sGuide》。不足之处就在于,它们都像教科书,严谨有余,活泼不足,特别是初入门的人看起来会比较累。(4)参加一些培训好的培训一般都是要付费的,这个要根据自己的实际情况进行取舍了。2.答疑解惑哪家强?经验的积累,除了自己努力的自学之外,有时候一些难关还是得有别人的帮助才行,可能你花3天搞不定的问题,他一看就想起来是什么原因了。如果是企业客户,那直接联系官方技术支持,很容易就搞定了。或者也可以去官方论坛提问,然后等待解答。对于广大网友来说,直接获得技术支持可能有一定的难度。我们EEPW的论坛的人气充足,对问题的响应速度也是迅雷不及掩耳的,所以有关DSP的问题尽可以到下提问。前面这两个无关具体技术,但是能起到“源头”的作用。接下来就是具体的技术问题了,有几十个,我们慢慢来看吧。3.作为入门者,创建一个最基本的工程需要做哪些事情?最简单的入门方法是从现有的例子上入手,比如购买开发板的话,一般都会附送十几到几十个上手用的例子工程,把它们研究一遍,基本上入门这关就过了。对于C2000DSP的学习来说,先到TI网站上搜索ControlSUITE软件下载安装,里面的入门视频、工程例子和所有的文档资料都是一应俱全的。如果你买书籍来入门的话,和教编程的书籍一样,大部分都还是以“Helloworld”作为第一个程序入手,然后运行程序显示在调试窗口中的。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提到的选项之外,CLACPU对编译器也有一定的要求,如表2所示。表2CLACPU必备的编译器选项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/ISOC/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)TheStandardC++Library:ATutorialandReference,NicolaiM.Josuttis,Addison-Wesley,ISBN0-201-37926-02)TheC++ProgrammingLanguage(ThirdorSpecialEditions),BjarneStroustrup,Addison-Wesley,ISBN0-201-88954-4or0-201-70073-5.3)C++onlinereferenceat)C代码的静态检查工具当然,作为DSP的开发人员,高效保质地完成代码工作才是最重要,上面那些书籍、链接,请慢慢研究吧。。。14.从哪里可以找到RTS库文件?通常情况下,随CCS软件安装而提供的RTS库文件都位于CCS安装目录中,编译器Codegen对应的子目录中。例如,在新版本的CCS6.x中,C28x的编译器位于CCS安装目录下面的\tools\compiler\c2000_6.2.5\lib中(根据编译器版本的不同,倒数第二个目录名字会有相应的变化)。在老版本的CCS中,RTS库文件被默认安装到操作系统的程序目录中,例如C:\ProgramFiles\TexasInstruments\C2000CodeGenerationTools5.2.4。对于其它一些特殊的库,例如FPU快速运行支持库FastRTS,则在下载安装了FastRTS安装包之后,位于其安装目录之下的lib文件夹中,例如\FPUfastRTS\V100\lib\rts2800_fpu32_fast_supplement.lib。如果安装了controlSuite软件,则可以通过它内置的说明或者搜索功能找到对应的库文件。15.RTS库那么多,我们应该使用哪一个?随着器件类型、特性的不断发展,现在在CCS安装目录下叫RTSxxx.lib的文件已经非常非常多了,那么到底哪些是适合我们使用的呢?对于C28x器件,总结如表3所示。表3C28xDSP使用的实时运行支持库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程序。如需使用此工具,请参考它的帮助说明文档。在编译器版本低于6.0.2的情况下,我们需要进入编译器codegen的库文件目录中,找到rtssrc.zip这个文件并解压,然后根据其中rtssrc_zip_README.txt里面描述的步骤进行库文件的重新编译。22.除了使用编译器的优化选项之外,还可以使用什么方法提高程序的性能?编译器的优化选项,只能在代码满足众多选项的要求时,才能得到较好的优化效果。在我们编程的时候,首先要做到心里有数,尽可能使用一些高效的编程方式,例如使用右移操作代替除以2的倍数的操作,可以大幅度地减少代码运行时间等。这些技巧很多是与C/C++的熟练使用所相关的。此外,根据器件的特点,例如是否包含FPU、CLA等,把特定的代码放在不同的区域执行,也能起到提高程序性能的效果;根据代码对性能的要求,把它们运行在不同的位置,例如RAM快于Flash,Flash又快于XINTF等;在器件包含数学表的情况下,使用内建的数序函数库,而不是标准的C数学库等。在此我们可以给出一些提示:1)代码运行在Flash中一定要使能预读缓冲区,并配置适当的等待状态。一般在
本文标题:DSP常见编译错误
链接地址:https://www.777doc.com/doc-2910517 .html