新闻中心

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

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

作者:paradoxfx时间:2015-01-04来源:电子产品世界收藏

  43. Error: option --include_path is missing its parameter 'dir',如何解决?

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

  这个错误的发生往往是编译器没有能够正确地解析包含变量或者宏的头文件的路径。解决方法可以利用上图中的Variables选项卡,点击Add,把自定义的变量添加进去,此时CCS会检查该编译器变量是否符合标准。

  44. Error: unresolved symbols remain,如何解决?

  出现这个错误说明链接器在符号表中找不到相关的符号定义。在这个例子中,源程序example中使用了函数myfunc,但是在编译生成的所有目标文件(.obj)或者所有的库文件(.lib)中都找不到这个函数。解决的方法自然是找到这个函数从哪里来的?然后把它的源添加到工程中。

  在使用Stellarisware或者ControlSuite套件中的例子来创建我们自己的工程时,如果忘了使用—library选项把库文件添加到链接器的路径里,则经常会出现此错误。这些库文件包括:Stellarisware/Tivaware中的driverlib, grlib, usblib,ControlSuite中的driverlib, IQMath等等。

  那么接下来的步骤就是添加对应的库文件了。最直接的方法是在工程属性里选择,如下图所示:

  此外,如果在C++代码中引用C代码的头文件,如果这个头文件是自定义的(而不是系统提供的),则最好在头文件中添加extern "C" {...}以方便在C++代码中方便使用#include来引用该头文件。那么问题又来了:C编译器不认识extern "C"怎么办?此时要使用#ifdef这样的宏来在C中屏蔽它们,即:

  #ifdef __cplusplus

  extern "C" {

  #endif

  45. Error: placement fails for section "xxx",如何解决?

  这个错误说明我们定义的段超过了指定存储器区间的大小。可以从以下几个方面来解决此问题:

  1. 检查栈和堆的长度,看看是不是给它们配置了过大的值,导致了在RAM中保存不下去?然后尝试减小它们的长度。

  2. 尝试使能或者增加编译器的优化级别,未经优化的代码往往需要更多的存储空间。

  3. 如果使用了I/O代码,则它们会显著增加代码尺寸,例如在很多小容量的器件上,一个printf()函数就能超过存储容量了,此时可以使用printf()的最小格式,请参考http://www.eepw.com.cn/article/266820.htm

  4. 可以考虑修改cmd文件,以增加某个段所使用的存储空间的长度;代价是别的存储空间的长度会相应减小,有可能导致新的placement fails 这样的错误产生。具体可参考http://www.eepw.com.cn/article/256732.htm

  5. 尝试精简/优化代码,在不影响功能的情况下,使用一些技巧来减小代码尺寸。

  例如,我们可以使用“空间换时间”,或者“时间换空间”的方法,在代码尺寸和执行速度上做一些折衷。比如对于一个滑动傅立叶变换(sDFT),我们既可以使用很大的数组来保存滑动值, 从而实现很高的运算速度;也可以减少运算速度,每个周期只使用几个点来完成计算,这样可以极大地减小存储空间的占用。

  6. 不到万不得已,不要去考虑更换

  但是如果在产品开发的评估阶段,存储空间就已经捉襟见肘了,则还是要提早考虑升级的,不然以后再增加新的功能,或者哪怕是仅仅修正了一个小的bug,有可能就彻底放不进去了。

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



上一页 1 2 下一页

关键词: DSP 编程 芯片

评论


相关推荐

技术专区

关闭