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.

[参考译文] TMS320F280037-Q1:如何减小这些库的代码大小

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1528320/tms320f280037-q1-how-to-decrease-the-code-size-of-these-library

器件型号:TMS320F280037-Q1

工具/软件:

您好的团队、

我向我的客户询问这个问题。

从 CCS 的输出文件中可以看出、一些驱动程序/库(例如 FLASHAPI 库)将占用大量闪存、 剩余的空间不足以保存其应用程序代码。 因此、他们想检查是否有任何方法可以减小这些驱动程序/库的代码大小。

1.在客户代码中、它 由两部分组成:客户的引导加载程序和应用程序。 由于是两个单独的工程、因此这些驱动程序/库将占用引导加载程序工程中的一些闪存、 同时也会占用应用中的一些存储器、这会导致重复占用。 我们对此有何建议? 客户需要两个团队来开发引导加载程序和应用程序、因此在两个单独的 项目中、对于同一个驱动程序/库、我们 是否可以只占用一个闪存空间来避免重复占用?

2.客户已经使用过 O2 优化,我们是否有较小的驱动程序/库? 例如、调试版本和发布版本。

BRS

Shuqing

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

    尊敬的 Shuqing:

    请允许我再过一天来查看这些信息。 感谢您的耐心!

    此致、

    Allison

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

    您好 Allison

    是否有任何更新?

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

    尊敬的 Shuqing:

    感谢您对此的耐心 — 只是要回应:) 以下是一些建议:

    1. 关于重复代码占用问题:

    • 正确的是、在引导加载程序和应用项目中使用相同的驱动程序/库可能会导致冗余的闪存使用。
    • 您可以考虑以下几种方法:
      • 优化引导加载程序和应用程序之间的代码共享:
        • 仅使用运行所需的基本功能、尽可能减少引导加载程序的数量
        • 将常用的驱动程序/库放置在可由引导加载程序和应用程序访问的共享闪存扇区中
      • 内存管理:
        • 仔细规划引导加载程序和应用程序代码的闪存扇区分配、确保两个工程的链接器文件包含一致的存储器映射信息。
        • 使用链接器命令文件定义引导加载程序和应用程序段之间的清除存储器边界

    2. 关于代码大小优化、此处链接的 C28x 优化指南可供参考

    • 编译器优化选项:
      • 使用优化级别-O2 或-O3 与--mf=0(针对尺寸进行优化)
      • 尝试优化级别-O4、该级别会考虑整个工程视图、执行额外的链接后优化
      • 使用优化器助手(“视图“>"优化“优化器助手“)查找优化级别和 MF 设置的最佳组合
    • 代码放置:
      • 使用.TI.ramfunc 段将对性能至关重要的代码放置在 RAM 中
      • 仅将基本初始化代码和常用函数放入 RAM 中
      • 将其余部分保留在闪存中以节省 RAM 空间
    • 其他优化提示:
      • 映射到闪存时、将代码和数据段与 128 位边界对齐
      • 对于 EABI 可执行格式、请将未初始化的 RAM 段定义为 NOINIT 段
      • 启用预取模式和数据缓存模式以获得更好的闪存执行性能
    • 调试与释放:
      • 虽然驱动程序/库没有特定的“调试“或“发布“版本、但您可以:
        • 删除发行版本中的调试特定代码和诊断
        • 使用条件编译排除调试功能
        • 优化发行版构建的函数内联和代码结构

    需要注意 的是、请记住、闪存架构会施加限制:在擦除、编程或验证闪存时、无法执行代码、也无法同时从闪存获取数据。  

    此致、

    Allison