新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > DSP编程技巧之27---答疑解惑哪家强之(2)

DSP编程技巧之27---答疑解惑哪家强之(2)

作者:paradoxfx时间:2014-11-10来源:电子产品世界

  答疑解惑哪家强?我们EEPW最强。。。所以接下来继续我们的答疑解惑。

本文引用地址:http://www.eepw.com.cn/article/265108.htm

  8. 含有CLA加速器的必备的选项?

  除了问答4、5、7提到的选项之外,CLA 也有一定的要求,如表2所示。

  表2 CLA 必备的选项

  9. “大内存模型”和“小内存模型”的区别是什么?

  C28x一般使用大内存模型,假设数据可以存放在存储单元的任何可用空间中。小内存模型的提出其实针对的是基于C27x模式CPU的代码,它默认数据是存放在低64k存储空间范围内的,除非使用far关键字进行特别指明。现在的器件片上存储空间普遍比较大,显然使用大内存模型更为合理。

  10. 什么是“统一内存模型”?

  统一内存模型“--unified_memory”指在“统一的内存模式”下产生代码。顾名思义,就是把所有的存储空间定义为一个整体,不管它是片上的SRAM、ROM、OTP还是使用XINTF接口的外部的存储单元,通常把外设的寄存器也映射到数据存储空间中。这样编译器在编译时就可以使用PREAD/PWRITE/MAC等指令来处理大部分的内存复制memcpy调用和结构体的分配。

  11. 实时运行库RTS的作用是什么?

  在计算机程序设计领域,运行时库是一种被编译器用来实现编程语言内置函数,以提供该语言程序运行时(执行)支持的一种特殊的计算机程序库。这种库一般包括基本的输入输出或是内存管理等支持。在的编程中,它们的作用是用来建立C/C++代码运行的环境,主要包括以下几个方面:

  1) ANSI/ISO C/C++标准库。

  2) C的输入输出I/O库。

  3) 为主机的操作系统提供底层的I/O支持。

  4) 的启动程序_c_int00(可参考http://www.eepw.com.cn/article/262926.htm)。

  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-0

  2) 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 at http://www.cplusplus.com/

  4) C代码的静态检查工具http://www.splint.org/

  当然,作为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安装的时候附带的,需要自己去下载安装支持程序。

c++相关文章:c++教程




关键词: DSP CPU 编译器

评论

技术专区

关闭