This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F2.8335万:CCS/TMS320F2.8335万

Guru**** 1826070 points
Other Parts Discussed in Thread: ADS8329
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/564853/ccs-tms320f28335-ccs-tms320f28335

部件号:TMS320F2.8335万
主题中讨论的其他部件:controlSUITEADS8329

工具/软件:Code Composer Studio

您好,

我仍然对C28xxx FastRTS-Library有问题。

我已将源文件(如sin_F32.asm cos_F32.asm sqrt_F32.asm)直接复制到我的项目src目录。

我这样做是为了能够在程序启动后将这些功能复制到RAM中。

所有这些asemmbler文件都被转换 为目标文件,但与sin和cos函数仍有冲突。

通过CCS6编译,我收到了如下错误消息:

#1.0056万重新定义符号"_cos":首先在"<Whole程序>"中定义;在"./src/cos_F32.obj"中重新定义  

#1.0056万符号"_sin"重新定义:首先在"<整个程序>"中定义;在"./src/sin_F32.obj"中重新定义
但目前所有其他文件/功能都正常工作(例如sqrt_F32.asm)

这可能是什么原因? 我尝试了几个编译器开关,但没有成功。

或者,如何用sin_F32.asm和cos_F32.asm中的快速替换函数替换库函数?

BR Ralf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这个线索...

    Ralf Koester 说:
    第一个定义于"<whole程序>"

    ...意味着您可以使用--program_level_compile或--opt_level=4。  我认为使用这两个选项都不会导致此问题。  但它可能会。  因此,作为实验,要么删除--program_level_compile,要么更改为--opt_level=3。  

    如果这不起作用,请提交CCS项目以供进一步分析。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,George,

    我尝试了几种选择,

    首先使用原始优化级别-O4和-opt_of_speed=5,请参见附加的映射文件

    其次,使用优化级别-O3和-opt_for speed=3,请参见附加的映射文件

    编译器使用rts2800_fpu32.lib函数sin,cos和sqrt or,这很奇怪

    sin_F32.asm,cos_F32.asm和sqrt_F32.asm的函数!

    但在这两种情况下,我都得到了错误:

    我尝试了此设置的变体,但没有成功:

    此设置是否应将RTS库sin,cos和sqrt替换为来自ASM文件的库?

    拉尔夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我忘记了maps.e2e.ti.com/.../092_2D00_K2-V1-o4-op5.123e2e.ti.com/.../092_2D00_K2-V2-o3-op3.123

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此设置是否应使用ASM文件中的RTS功能替换RTS功能?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍然无法解释发生了什么。  确保RTS库是链接程序看到的最后一个输入。  这通常意味着最后的生成命令以"-llibc.a"结尾。  如果这不能解决问题,请 提交整个CCS项目。  这是推进这一问题的唯一途径。

    Ralf Koester 说:
    此设置是否应使用来自ASM文件的RTS功能替换RTS功能?[/QUOT]

    否。 请关闭库函数假设设置。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,George,

    我将库函数假设删除为"关闭"!

    请参阅附加的输出文件builp.log! 在最后一个位置,我找到了-lrts2800_fpu32.lib而不是-libc.a!

    我从库文件搜索路径中删除了库名称,因为建议自动找到最佳匹配库。

    我还删除了libc.a,因为有人建议不要在all.e2e.ti.com/.../6082.Build.log上这样做

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,George,

    我更进一步了。

    我从RTS_2800_CPU_FAST_supplement目录中删除了所有*.asm文件(sin_F32,cos_F32,... tan...,atan2...,sqrt...,div...),并实现了完整库的路径,如文档中描述的那样。

    (请参阅电源)。

    当然,我也删除了像“#pragma code_section (sin,"ramfuncs");”这样的pragma,并且接受了,现在我不能将函数复制到快速RAM中。

    我还遵循了您的建议,删除了库设置的挂钩(请参阅附件)。

    现在,错误被简化为sqrt函数,sin,cos,atan和atan2以及sqrt和div从RTS_2800_CPU_FAST_supplement lib中获取,我可以在生成输出中看到(参见att)。

    使用sqrt保留错误->目前为止没有更多的想法。 我将按照您的建议,在第二个答案中附上整个项目。

    BR Ralf

    e2e.ti.com/.../Build2.log


     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这里是project....e2e.ti.com/.../092_2D00_0099.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Ralf Koester 说:
    我已将sin_f32.asm cos_F32.asm sqrt_F32.asm等源文件复制到我的项目src目录。[/quot]

    您发送的项目没有这些文件。  因此,我不能再提出这个问题。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,George,

    您提到了我从1月3日起的帖子。

    正如我在1月5日所写的那样,我试图采用标准的方式,删除了这些文件,并植入了如文档中所述的RTS_2800_CPU_FAST_supplement库。

    您能看到此帖子吗? 我附加了Simplem的设置。库

    原因sin,cos出现错误消息,但srqt错误仍然存在,这是实际情况。

    如果您认为,在我可以执行此操作之前返回步骤是很有帮助的。

    拉尔夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,George,

    由于我没有听到更多的消息,所以我返回到直接包含的ASM文件。

    sin_F32.asm,cos_F32.asm,tan_F32.asm,atan2_F32.asm,sqrt_F32.asm和div_F32.asm!

    我在我的设置中删除了RTS_2800_CPU_FAST_supplement库和查找该库的路径。

    结果是截至1月3日的结果:

    ****为项目092-K2生成配置闪存****

    "C:\\ti\\ccsv6\\utils\\bin\\gmake "-k all
    '建立目标:092-k2.out '
    '调用:C2000连接器'
    c:/ti/ccssv6/tools/compiler/c2000_ts_less.3.lts/bin/cl2000"<xmt-block0>2000 15.12 -v28 -ml -mt --float_support=fpu32 -o4 --opt_of_speed=5 --fp_mode=lurse-advance_model=less--gu_guide_guide_les=-gb_l=-gb_lip_l=-rk2_lip_lip_lip_l=-rs/sp_lip_lip_lip_l=-rkkkk_l=-f-rs/-rs/-rkkkkkk/-rm_lip_lip_lip_lip_lip_lip_l=-f-rs/-rm=-f-rs/-rk/-rk/-rm=-rk/-rk/-rs/-rkkk/-rm=-rm=-rk/-rkk/-f-f-f_lip_ 15.12 15.12 rm_model -o "092-k2.out ""./src/ADS8329.obj""./src/Angle.obj""./src/Control.obj""./src/Correction.obj""./src/crmode.src/21 ".spob./spob.""./src/" "./src/sin_F32.obj""./src/sqlt_F32.obj""./src/src.obj""./src/version.obj""./DSP2833x_Headers_nonBIOS.cmd""./F2.8335万_flash_VV.obj""./srbs/fastl/ps/psvl/ps:psv/psv/psv_lib_fastl/v/ip_l/ip_32_l/ip_l/ip_crs/ip_crs/ip_lib_crs/ip_crs/ip_crs/ip_32_l/crs/lib_l/crs/ 15.12  
    链接>
    错误#1.0056万:重新定义符号"_cos":首先在"<Whole程序>"中定义;在"./src/cos_F32.obj"中重新定义
    错误#1.0056万:重新定义符号"_sin":首先在"<整个程序>"中定义;在"./src/sin_F32.obj"中重新定义
    错误#1.0056万:重新定义符号"_sqrt":首先在"<whole程序>"中定义;在"./src/sqrt_F32.obj"中重新定义
    错误#1.001万:链接时出错;“092-k2.out”未构建

    >>编译失败
    Makefile:195:目标'092-K2.out '的配方失败
    gmake:***[092-k2.OUT ]错误1
    gmake:由于错误,目标'all'没有重制。

    ****构建已完成****

    我不知道为什么我在atan,atan2,div上没有错误,我在我的项目中也使用了它。

    所以我按照你的愿望附上了这个项目。 (我在名称中添加了一个"ASM",以便与包含RTS_2800_CPU_FAST_PRO补 遗的发布项目有所不同。

    BR Ralf

    e2e.ti.com/.../092_2D00_0099_2D00_asm.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我对拖延表示歉意。

    感谢您发送详细的测试案例。  我可以重现相同的问题。  我在 SDOWP系统中提交了CodeGen-2009以解决此问题。  欢迎您使用我签名中下面的SDOWP链接进行关注。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,George,

    这是不是“SDOWP系统中的CodeGen-2009”意味着有人正在寻找解决方案?

    BR Ralf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这意味着它在要分析和修复的缺陷队列中。 "status"(状态)字段指示其在流程中的进展。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    将以下代码添加到程序中的某个位置。 请告诉我们结果。

    #include <mathing.h>
    #include <float.h>

    #if DBL_mant_dig == FLT_mant_dig
    float cosf (float x){ return cos(x);}
    float sinf (float x){返回sin (x);}
    float sqrtf (float x){返回sqrt(x);}
    #endif
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哈洛·乔治
    我已将您的代码添加到我的第一个源文件中,它现在可以正常工作。 ASM文件已正确翻译,我得到了一个Intel-Hex文件,该文件现在与使用3.3 创建的此文件相同!
    到目前为止,非常好,非常感谢。
    问题的原因是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    第二次回复!
    我拥有2个构建配置,一个用于闪存,另一个用于RAM,这是用于调试!
    我现在检查了闪存和RAM之间的所有设置,它们几乎相同,除了优化,当然还有不同的cmd文件。
    现在我可以使用闪存配置进行构建,但它不会从RAM配置开始。
    错误消息为:
    "构建期间出错。 在项目'VVK1'上运行生成器'CDT Builder '时出错。java.lang.NullPointerException"
    在余割中,将出现:
    ****为项目VVK1创建配置F2833x_RAM的纯净构建****
    "C:\\ti\\ccsv6\\utils\\bin\\gmake”-k clean
    gmake:***没有规则使目标'干净'。
    ****构建已完成****
    有什么想法吗?
    BR Ralf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    出现此错误的原因是因为您的程序在某处同时使用cos和cosf。 在cosf被调用的位置可能不是很明显;它可能在库函数(如printf)中。 现在编译器库支持C99,我们不仅支持cos,还支持cosf和cosl。 对于每个目标TI支持的,cosf或cosl中的一个只是cos的别名,并在同一文件中定义。 您已替换cos,但链接程序仍需要cosf,因此它必须在定义cosf的目标文件中拖动,该文件也包含cos,现在您已获得cos的重复定义。 因此,在替换cos时,还必须替换其别名(在本例中为cosf,因为对于C2000 COFF,double为32位)。

    经验法则:如果您替换cos,则还必须替换cosf和cosl。