DSP

译文: C28x Compiler Error and Warning Messages

2019-07-13 14:42发布

C28x Compiler Error and Warning Messages
引言
通常,知道错误和警告的产生以及常见错误的来源是很有帮助的。本文包含错误列表、警告和备注以及常见错误列表及其解决方案。
常见错误及警告
Warning: build attribute vendor section TI missing in “ : compatibility cannot be determined
这个库是用一个旧工具编译的,而不是它正在链接到的应用程序。旧工具没有定义这个属性。编译属性已经存在相当长的时间了,所以这个警告是个例外。以前,这些工具定义没有编译属性的文件为0值,但是这是不正确的。他们现在被视为兼容一切,但警告用户,他们是专属的。
例如:
• IQmath库是由旧的编译器编译但与目前的编译器兼容。
• Flash API,它是由于测试而使用较旧的编译器构建的。
• SFO库被用于HRPWM模式。
注意: 消除警告的方法是:使用链接器选项( linker option )– diag_suppress = 16002放置在连接命令文件中。
fatal error:file…rts2800_fpu32.lib “boot.obj” specifies ISA revision “C28FPU32”,which is not compatible with ISA revison “C2800” specified in a previous file or on the command line.
这是一个non-FPU32工程文件试图通过–float_support=FPU32链接源码编译。在这种情况下,RTS库将使用– float_support = fpu32编译。相反,这可能是另一个库或项目源文件。
• 检查每个库,确保每个库使用-v28 – float_support = FPU32编译。
• 确保每个.c文件使用-v28 – float_support = FPU32编译。(在CCS中,可以将其设置为全局编译选项或每个文件编译选项)。
如果项目不是C28x + FPU芯片,RTS库应改为non FPU32版本。有关运行时支持库的信息参见C28x Code Generation Tips and Tricks Wiki Article 。
这两个不能链接,因为浮点数的调用约定不同。如果是定点芯片,那么“浮点数”就会在栈上传递。如果是浮点芯片,那么“浮点数”会在FPU寄存器上传递。
Warning: entry-point symbol other than “_c_int00” specified: “code_start”
这个警告很好,可以忽略。它只是告诉你,该程序的入口点设置为code_start代替默认的_c_int00。 TI提供的其他外围示例也将生成此警告。
Error: unresolved symbols remain….
它的意思是源代码中的某个地方已经使用了符号,但是链接器无法找到它的创建位置。例如, 如果你的代码声明了c = IQdiv(a,b);但是 IQmath 库 没有包含在项目里面, 符号 IQdiv 将被标记为未定义。
其中包括这里写图片描述符号(例如:FD 这里写图片描述 mpy或FD 这里写图片描述TOL)可能来自运行时支持库。有关运行时支持库的信息参见C28x Code Generation Tips and Tricks Wiki Article。
Error: Tag_ISA attribute value of “2” that is different than one previously seen (“1”); combining incompatible files
工具在抱怨不匹配的 “Tag_ISA”值,这意味着有不匹配的ISA版本。“1” 是C27x,“2”是C28x,所以这个测试的情况下,混合C27x和C28x对象文件。将来的版本将使用“C2700”和“C2800”代替“1”和“2”错误消息。
确保所有文件都用-v28编译以避免这个错误。
Error: Tag_Memory_Model attribute value of “1” that is different than one previously seen (“2”); combining incompatible files
有些文件或库是用小内存模型编译的,有些是用大内存模型编译的。链接器将不允许您通过不同内存模型进行组合文件的链接。
对于C2000,TI提供的例子推荐使用大内存模型(-ml compiler switch)。
Error: placement fails for object “csmpasswds”
这是5.x版编译器/链接器的早期版本中的一个问题。链接器在抱怨page 0和page 1上有同名的段。您可以更改链接文件.CMD中的其中一个段的名称。建议的修复是更新代码生成工具。
Warning: function declared implicitly
这不是一个可以忽视的警告。这意味着一个函数没有一个原型,编译器对你传递/返回的值做了一些假设。这个会造成BUG。修正此警告!
Error: placement fails for object
这是一个链接器错误,这意味着对象将不适合于内存。这可能是由于数据页(data page)阻塞造成的。了解更多信息请参见C28x Compiler: Understanding Linking Wiki article 。
Error: placement fails for object “.text
这是一个链接器错误,意味着没有足够的内存分配代码。了解更多信息请参见C28x Compiler: Understanding Linking Wiki article。
extern cregister volatile unsigned int IFR; “../include/DSP2802x_Device.h”, line 51: error: omission of explicit type is nonstandard (“int” assumed)
MISRA规则要求严格按照ANSI模式编译。这意味着使用ANSI标准中没有指定的任何特性都是错误的。在您的情况下,这些表现特点是关键词cregister和interrupt。MISRA规则下实际情况是不能同时使用interrupt和cregister。
如果你是严格的ANSI /ISO模式编写代码(使用– strict_ansi编译器选项),解决方法是用备用的关键词,__cregister,或__interrupt,或__asm()。
typedef interrupt void(*PINT)(void); “..includeDSP2802x_PieVect.h”, line 26: error: omission of explicit type is nonstandard (“int” assumed)
MISRA规则要求严格按照ANSI模式编译。这意味着使用ANSI标准中没有指定的任何特性都是错误的。在您的情况下,这些表现特点是关键词cregister和interrupt。MISRA规则下实际情况是不能同时使用interrupt和cregister。
如果你是严格的ANSI /ISO模式编写代码(使用– strict_ansi编译器选项),解决方法是用备用的关键词,__cregister,或__interrupt,或__asm()。