您的位置 首页 数字

DSP编程技巧之33—答疑解惑哪家强之(8)

答疑解惑哪家强?当属我们EEPW最强。。。接下来继续了解一下与编译器和链接器的常见错误、警告有关的问题原因和解决方法。46. Tag_Memory_Model attribute valu

  答疑解惑哪家强?当属咱们EEPW最强。。。接下来持续了解一下与编译器和链接器的常见过错、正告有关的问题原因和处理办法。

  46. Tag_Memory_Model attribute value of "1" that is different than one previously seen ("2"); combining incompatible files,是神马意思?

  这个过错标明链接器所链接的方针文件中存在不同的内存形式,比如说有的方针文件运用了大内存形式,而有的运用的是小内存形式。批改的办法则是让一切的文件在链接时都运用相同的内存形式。

  事实上这种过错呈现的场合并不算太多,首要呈现在工程中引用了他人供给的某些obj文件或许库文件的时分。在C2000上,新建工程的时分引荐咱们通通运用大内存形式(-ml)选项。

  47. Error: file grlib.lib" was built without VFP coprocessor support while a previously seen file was; combining incompatible files,是神马意思?

  这个过错与上面那个过错的原因是相似的,标明链接器所链接的方针文件中存在不同的浮点支撑形式。批改办法则是让一切的方针文件和库文件运用相同的浮点支撑–float_support选项。

  48. 为什么编译的时分总是提示Warning: creating output section "xxx" without a SECTIONS specification?

  在运用默许的cmd文件进行编程,而工程中有运用了某些cmd中未明确界说的段的时分,就会呈现这个正告。由于没有在cmd中界说这个段,所以链接器会运用默许的算法来创立和分配输出段“XXX”;这样尽管能确保程序的作业,却不被主张这样做,由于它不利于内存地址空间的有用分配和办理。一般来说,最好不要有任何的链接器正告,以消除程序运转时潜在的bug。

  49. 不可思议的gmake: Access is denied。

  在编译程序的时分,编译器会生成一系列的中心文件,包含obj、lib、asm等等,这个进程被一些带有主动防护体系的杀毒软件和安全软件当作风险行为,因而就被制止掉了,导致编译失利,如下图所示:

  所以在编译程序的时分,最好禁用安全软件,否则即使是安全软件没有直接阻挠编译,也会跳出各式各样的问询信息,不胜其扰。

  50. Type ‘xyz’ or Symbol ‘abc’ could not be resolved。

  这些过错一般是由Eclipse CDT (C/C++开发东西)错报出的,而不是由TI自身的编译器所给出的。现在的处理办法是:

  从CCSv4的工程晋级到CCSv5或许更高版别的时分,假如挑选的是project—导入工程,一般会有必定的兼容性问题,可能会发生这样的过错。处理方案则是创立一个新的作业区,然后把一切的源程序、库文件、cmd文件等导入到新的工程中,重新配置工程选项,然后再编译。

  或许爽性疏忽CDT的语法过错,办法是在CCS中点击Window->Preferences->General->Editors->Text Editors->Annotations, 挑选C/C++ Indexer Markers,然后清除去一切的挑选。

  51. Warning: build attribute vendor section TI missing in " : compatibility cannot be determined。是什么特点丢掉了?

  呈现这个问题,阐明运用的库文件是由一个老版别的编译/链接东西所创立的,在运用新版别的东西进行编译/链接时,这个老的库文件缺失了某些特点,导致了这个正告的发生。在C2000 DSP的开发中,有几个场合特别简单呈现此正告:

  ² 在新的编译环境中,运用了一个老版别的IQmath库文件。

  ² 在测验时,运用了老版别的编译器生成的Flash API。

  ² 在运用高分辨率的HRPWM模块时,运用了老版别的SFO库文件来批改MEP。

  这个正告总的来说并不影响程序的运转,咱们即能够通过把老的库文件换成最新版别来彻底处理此问题,也能够在cmd文件中运用–diag_suppress=16002来消除此正告信息。至于16002这样的正告信息是怎么归类的,在CCS的编译提示里就有:

  #16002-D build attribute vendor section TI missing in "c:/ti/ccsv6/tools/compiler/C2000_6.2.2/lib/IQmath.lib": compatibility cannot be determined

  52. fatal error: file …..rts2800_fpu32.lib" specifies ISA revision "C28FPU32", which is not compatible with ISA revision "C2800" specified in a previous file or on the command line。

  这个丧命过错阐明对某些不是FPU32的方针文件启用了–float_support=FPU32选项进行编译,例如这个方针文件是由不含有FPU的器材上的编译编译而来的时分就会发生,也有可能是这个方针文件没有运用FPU选项。处理的办法是:

  ² 假如导致过错的方针文件是支撑FPU的,则运用-v28 –float_support=FPU32来编译一切的程序。在CCS中,能够把这个选项作为大局选项,或许预编译选项。

  ² 假如器材不支撑FPU,则不要运用FPU32选项。这是由于在含有FPU的器材中,float类型的变量会传递到FPU寄存器中进行处理;而在不含有FPU的器材中,float类型的变量仍然会保存到栈中。

  53. Warning: entry-point symbol other than "_c_int00" specified: "code_start"。

  初学者常常会遇到此问题。事实上这个正告并不会对程序的运转发生什么影响,它仅仅用来告知咱们,程序的进口点被编译器给主动分配到code_start,而不是默许的_c_int00中;它们的作用是相同的,意义请参阅http://www.eepw.com.cn/article/262926.htm。TI供给的外设比如在编译时也常常会发生此正告。

  54. Error: unresolved symbols remain….

  符号FD$$MPY、FD$$TOL之类的找不到,这样的问题也是初学者常常遇到的。这样的问题阐明相关的库函数被运用了,可是库并没有被增加到工程之中。例如,在程序中运用了c = IQdiv(a,b);这样的程序,可是并没有把IQmath.lib增加到工程中,则IQdiv就会被提示unsolved这样的过错,处理办法则是把对应的库文件增加到工程里就好了。

  特别阐明:带有两个美元符号$$的函数一般都是实时运转库RTS里的,必定要记住增加对应的RTS库文件。

  55. Error: Tag_ISA attribute value of "2" that is different than one previously seen ("1"); combining incompatible files.

  这个过错标明ISA版别这个特点不正确。其间,1代表C27x,2代表C28x。在运用C28x时,应该运用-v28这样的选项来运用C28x形式,而不该该再运用其它的兼容形式了。

  56. Error: placement fails for object "csmpasswds"

  在前期版别的CCS5.x编译器/链接器中,有这个问题,链接器会不停地提示相同姓名的段被既保存在page0,又被保存在page1之中,直到咱们把它们改好;这算是一个bug吧,晋级编译东西codegen的版别,或许爽性晋级整个ccs软件,就能够处理此问题。

  57. Warning: function declared implicitly

  尽管这仅仅个正告,可是它标明函数的原型不存在,编译器会对函数的参数和返回值做一些假定,这便是bug的一种源头,所以必定要把这个正告给消除去。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/117399.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部