嵌入式学习小组
直播中

陈波

7年用户 184经验值
私信 关注

学习DSP编程过程中经常遇到的问题有哪些

学习DSP编程过程中经常遇到的问题

回帖(1)

王一凡

2021-4-2 16:57:06
  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-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安装的时候附带的,需要自己去下载安装支持程序。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分