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.

[参考译文] TMS320F2812:是否可以告诉命令链接器文件链接到未在代码中使用的库中?

Guru**** 2542340 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1101453/tms320f2812-is-it-possible-to-tell-command-linker-file-to-link-in-a-library-not-used-in-the-code

部件号:TMS320F2812

你(们)好

是否可以告诉命令链接器文件(.cmd)链接到代码中未使用的库中?

我想要这样做的原因是,我要在FLASHA扇区中放置一个引导加载程序,为了充分利用该扇区中剩余的闪存,我也要在该扇区的应用程序中放置我使用的库。 这可以是FX FlashAPI和IQmath库。

当我生成bootloader项目时,我收到警告:“#1.0068万-D no matching section”,这是有意义的,因为我在该项目中不使用该库中的任何函数,我可以从分配的内存中看到链接程序确实没有将库放在代码中。 我知道,在正常情况下,链接程序只包含实际使用的内容,但在这种特殊情况下,我要禁用此行为。

有什么方法可以解决这个问题吗?

此致,
异常

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

    您好,Abaldur,

    如果已启用,是否可以尝试禁用(关闭)以下选项?

    如果这样做不起作用,我将在我们的编译器团队中为您提供帮助。

    谢谢,此致,

    Vamsi

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

    您好,Vamsi

    刚刚尝试了您的建议,但似乎行不通。 我仍然看到“#1.0068万-D no matching section”警告,并且libs仍然没有链接。 现在,我只是用“Flash2812_API_V210.lib”进行测试,我可以确认,只有在我的代码中调用此库中的函数,链接器才会包含该函数。

    自从我发布了这个问题之后,我发现链接器有一个命令行参数--Retain (Properties -> C2000 Linker -> Advanced Options -> Symbol Management),听起来有点像我想要的。 如果将鼠标悬停在此选项上,则会显示:"此选项可用于指示链接程序保留一个节列表,否则将不会保留这些节"。 但是,正如它所说的,它只能与eabi (ELF)输出类型一起使用,但我的项目需要TI-COFF类型,因为我依赖以这种方式编译的库。

    如果您能将此问题转发给编译器团队,我将不胜感激:)

    此致,
    异常

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

    您好,Abaldur,

    我会将此帖子分配给我们的编译器团队,以进一步帮助您。

    谢谢,此致,

    Vamsi

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

    您好,Vamsi:

    完美,非常感谢!

    Br abaldur

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

    要强制链接程序包含库中的函数或数据变量,请使用链接程序选项 --UNDEF_SYM。  例如:--UNDEF_SYM=_NAME_of_function_in_the_library。  您可以多次指定它。  要了解更多信息, 请在 C28x装配工具手册中搜索该选项

    谢谢,此致,

    -George

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

    你好,George

    我刚刚尝试使用FX Flash_Erase功能。 添加“--UNDEF_SYM=_Flash_Erase”后,出现“Undefined symbol:_FlashErase”错误。 我也尝试了前面没有下划线(_),但结果相同。 你能弄清楚我做错了什么吗?

    此外,您能否帮助我提供一个更完整的示例,其中我有两个项目:

    • 项目1:引导加载程序项目(存储在闪存A部分):在这里,我想链接Flash2812_API的所有函数,然后
    • 项目2:应用程序:这里我想利用Flash2812_API的功能。

    我想我必须在应用程序链接程序文件中使用“NoLoad”说明符,并使用FlashAPI存储在FLASH A部分的固定地址?

    Br abaldur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="50.6945万" url="~ë/support/mspicers/c2000-Erase-group/c2000/f/Erase-pc2-forum/1101453/TMS320F2812-it-possible to2000 to tell110.1453万 tell-2812-command-linker-file-to-link-in-a-library-not use-in-the-code/408.1584万#Flash_it-im_em-refluted "ref_refluted_refluted_ref_refluted_ref_reflut_reflice_":

    确保链接程序在看到库之前看到选项--UNDEF_SYM。

    谢谢,此致,

    -George

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

    你好,George。 您是否指的是提供给链接程序命令的参数的顺序? 我刚刚在项目属性“C2000连接器>高级选项>符号管理”中的字段中添加了“_Flash_Erase”。 是否应该以另一种方式进行?

    Br abaldur

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

    请忘记我的最后一篇文章。  我只是注意到了其他东西。

    [quote userid="50.6945万" url="~ë/support/mspicers/cc2000-mspicer-group/c2000/f/Erase-c2000-mspure-forum/1101453/TMS320F2812-it-possible to2000 to tell2000 tell-110.1453万-command-linker2812command-linker-file-to-link-in-a-library-not use-in-the-code/408.1584万#Flash_it-em_em-refer”

    符号的拼写必须在使用符号的任何地方都匹配。  在这种情况下,它必须匹配3个位置。

    1. 在定义函数的源代码中,该函数位于闪存库中的一个目标文件中
    2. 在调用函数的源代码中
    3. --UNDEF_SYM命名时

    还有另外一个细节需要了解。  在编译器生成时,以C书写的符号名称前面会添加下划线。  例如,C中的FlashErase将成为汇编程序和链接程序的_FlashErase。  这适用于您当前使用的旧COFF ABI。  较新的EABI则不是这种情况。

    考虑到所有这些...

    请注意,--UNDEF_SYM的是_Flash_Erase,而诊断则指的是_FlashErase。  不同之处是名称中间的下划线。  确保它们在任何地方都是相同的。

    谢谢,此致,

    -George