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.

[参考译文] MSPM0L1304:链接器不会删除未使用的代码

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1484908/mspm0l1304-linker-does-not-remove-unused-code

器件型号:MSPM0L1304
主题中讨论的其他器件: SysConfigMSPM0L1306

工具与软件:

您好!  

我认为 mspm0l1304.lds 链接器文件有问题。 无论我使用何种标志(-os -ffunfunction-sections -Fdata-sections 等)、它都不会从最终.out 文件中删除未使用的代码。 举例说明)。

我注意到  删除驱动程序后仍有大量空间使用(不使用它、但仍然使用 make 编译它)。

删除  保留(*(.text))  从  第83行的 mspm0l1304.lds、这里似乎有 一个诀窍:  

.text :{
        create_object_symbols
        保留(*(.text))
        . = ALIGN (0x8);
        *(.text.*)
        . = ALIGN (0x8);
        保留(*(.ctors))
        . = ALIGN (0x8);
        保留(*(.dtors))
        . = ALIGN (0x8);
        保留(*(.init))
        . = ALIGN (0x8);
        保留(*(.fini*))
        . = ALIGN (0x8);
    }> REGION_TEXT AT> REGION_TEXT


想听到您对此的想法
Marcus

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

    尊敬的 Marcus:
    这似乎很奇怪。 您运行了哪些示例来实现这一点? 您的 CCS、SDK 和 SysConfig 版本是什么?  

    此致、

    Diego Abad

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的 CCS、SDK 和 SysConfig 版本是什么

    我在 Ubuntu 上使用具有"TI 嵌入式调试"扩展名的 VSCode。 在中使用的 SDK 为 mspm0_sdk_03_00_07。  

    我在这里删除了一个重现它的示例。 有一个自述文件、说明如何使用 VSCode 设置示例

    在 root dir 中查看命令

    全部清洁

    USE_UART 定义中的元素 电压电平 uart_shell.c 代码未被编译。 这是 释出代码的一种方法,但这不是必需的。

    实用工具  

    进行调试  

    USE_UART 定义中的元素 并且 uart_shell.c 代码被编译、即使未调用 UART 函数、也会占用大量空间(16KB)。 取消注释我在 main.c 中添加的 UART 函数会使.out 文件的二进制数增加一点。

    在查看生成的.map 文件时、添加了许多 printf 函数。 在不使用这些引脚时不应添加它们?  

    删除  uart_shell.c  并运行 进行调试  将二进制文件减小了很多、但在有未使用的内容时应该无需编辑 makefile。

    删除  

    保留(*(.text))
    . = ALIGN (0x8);

    从链接器文件的第83行删除了在运行时未使用的所有这些额外函数 进行调试 同样; 我想删除这些内容会有风险、因为只在中断上下文中调用或通过函数指针调用的函数会被优化掉吗?  

    相关的文件是 Makefile main.c 和  mspm0l1306.lds
    注意:代码现在针对 MSPM0l1306进行编译、但问题仍然存在。


    e2e.ti.com/.../TI_5F00_code_5F00_example.zip

    如果我还可以提供其他信息、请告诉我
    此致
    Marcus

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

    尊敬的 Marcus:
    我来询问我的团队。

    此致、

    Diego Abad

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

    尊敬的 Diego:

    有更新吗?  
    Marcus

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

    尊敬的 Marcus:
    软件团队向我确认、这种行为也是意料之中的。 但是、如果需要、您可以删除该代码行。  

    此致、

    Diego Abad