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/F28M36P63C2:未解析的符号错误

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/721701/ccs-f28m36p63c2-unresolved-symbol-error

器件型号:F28M36P63C2

工具/软件:Code Composer Studio

您好!

我一直在尝试使用 SOLAR/FLOAT/Include 库路径中的2极2零滤波器文件。 我包含了库文件、并在主文件的多个位置调用了该文件中的函数。 我无法构建可执行文件、因为我遇到以下错误

说明   资源   路径   位置   类型
由__attribute__((ramfunc))或--ramfunc=on 生成的#10430-D ".TI.ramfunc"段需要段规范才能运行。  

未解析的符号仍然存在           C/C++问题
未解析的符号_CNTL_2P2Z_F_COEFFS_init、首先在./main.obj 中引用            C/C++问题
未解析的符号_CNTL_2P2Z_F_VARS_init、首先在./main.obj 中引用            C/C++问题

我可能会出什么问题?

谢谢、

Srini.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Srini、
    链接器似乎无法解析这些符号。 您能否检查您的编译/工程链接器设置是否添加了指向太阳能库的路径?

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

    第一个错误是因为您在链接器命令文件中缺少一行、以告知链接器在何处将 TI.ramfunc 段放置在存储器中。 项目中的某个项目使用该段名、因此链接器必须知道放置该段名的位置。 例如:
    .TI.ramfunc:> RAML1,page = 0

    另外两个错误是因为编译器无法找到命名的函数。 您需要在项目中包含 C 文件"CNTL_2P2Z_F.c"、并且需要包含定义 COEFFS 和 VARS 结构的头文件"CNTL_2P2Z_F.h"。 当您添加 C 文件时、它会拉入包含所有其他库头文件的库标题"Solar_F.h"、因此在添加时可能会收到更多警告。 如果您只想使用控制器、只需注释掉"Solar_F.h"中的所有内容即可解决该问题。 您可以稍后取消注释所需的内容。

    此致、

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、Ranjith。 我修复了未解析的符号错误。 我仍然不理解第一个错误。 我在.cmd 文件中为 ramfuncs 分配了内存区域。 有什么想法吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、Richard。 是的、我错过了"CNTL_2P2Z_F.c"、但在我包含它时它消失了。 仍然无法确定我为什么会遇到第一个错误。 我已经为.cmd 文件中的 ramfuncs 段分配了内存区域。

    请参阅以下代码

    ramfuncs :LOAD = FLASHD,
    运行= RAML0、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    PAGE = 0、ALIGN (4) 

    有什么想法我会遗漏或出错?

    感谢您的观看、

    Srini.

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

    Srini,

    您需要在存储器中映射"TI.ramfunc"。  此 Wiki 页面提供了更多说明:

    此致、

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嘿、错误已修复、但我现在可以看到1条警告

    "创建不带段规范的输出段"ramfuncs"

    忽略这一点是否安全、因为它仅适用于较旧版本的 CCS?

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

    您的代码中似乎有一些内容正在生成"ramfuncs"段。 链接器命令文件中此段的原始声明正确。 除了"TI.ramfunc"段、还需要声明"ramfunc"。

    此致、

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

    Richard、我不太关注您。 我在.cmd 文件中的 SECTIONS 分配下包含了以下代码片段。

    #ifdef __TI_Compiler_version__
      #if __TI_Compiler_version__>=15009000
       .TI.ramfunc:{}负载= FLASHD,
                            运行= RAML0、
                            load_start (_RamfuncsLoadStart)、
                            load_size (_RamfuncsLoadSize)、
                            load_end (_RamfuncsLoadEnd)、
                            run_start (_RamfuncsRunStart)、
                            run_size (_RamfuncsRunSize)、
                            run_end (_RamfuncsRunEnd)、
                            PAGE = 0、ALIGN (4)
      其他
      ramfuncs           :load = FLASHD,
                            运行= RAML0、
                            load_start (_RamfuncsLoadStart)、
                            load_size (_RamfuncsLoadSize)、
                            load_end (_RamfuncsLoadEnd)、
                            run_start (_RamfuncsRunStart)、
                            run_size (_RamfuncsRunSize)、
                            run_end (_RamfuncsRunEnd)、
                            PAGE = 0、ALIGN (4)   
      #endif
    #endif

    这是否涵盖所有基座?

    Srini.

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

    Srini,

    它包括一个、但不包括另一个。  我所说 的是、如果 CCS 为您执行闪存至 RAM 复制、您需要.TI.ramfunc 部分。  我相信较新的编译器也能做到这一点。  但是、您的代码似乎具有生成"ramfuncs"段的内容、否则您不应该得到该警告。

    尝试将 ramfuncs 器件从条件指令中取出、并将其分配给不同的存储器范围。

    如果有源代码行、您能否粘贴正在进行复制的源代码行?

    此致、

    Richard

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

    #pragma CODE_SECTION (PWM_ISR、"ramfuncs")
    EXTERN 中断 void PWM_ISR (void);

    我将中断 PWM_ISR 从闪存移至 RAM。

    我将尝试将 ramfuncs 从条件指令移动到不同存储器范围中单独存在的指令。  我是否应该在分配.TI.ramfunc 时将闪存和 RAM 范围从我定义的范围中更改??

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

    好的、谢谢。 这说明了"ramfuncs"的来源。

    根据 PWM_ISR 的大小、您可以在同一 RAM 块中找到 TI.ramfunc 和 ramfuncs。 您可以尝试并查看。 如果链接器抱怨您需要将它们分开。 无论采用哪种方式、都请返回并告诉我您的工作方式。

    此致、

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

    嗯、我通过从条件指令中删除 ramfuncs 并单独调用它来尝试以下方法。 (不更改存储器范围)

    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    .TI.ramfunc:{}负载= FLASHD,
    运行= RAML0、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0、align (4)
    #endif
    #endif
    
    
    ramfuncs :LOAD = FLASHD,
    运行= RAML0、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    PAGE = 0、ALIGN (4) 

    这为我提供了6个警告、每个警告用于重新定义诸如 "_RamfuncsLoadStart"、"_RamfuncsLoadSize"等绝对符号。 等等

    我应该尝试更改存储器范围吗??

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

    很抱歉、我过度查看了符号。 您在 TI.ramfunc 中不需要它们。 您现在可以将存储器单独保留、但只需从 TI.ramfunc 区域声明中删除这六行即可:

    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、

    此致、

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,这很有效!! Richard、非常感谢您抽出宝贵的时间为您提供帮助。 )
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不用客气! 感谢您的介绍。

    此致、

    Richard