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.

[参考译文] TMS320F28022:从 CCSv6升级到 v8、rts2800.ml 的大小翻了一番

Guru**** 2391005 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/748201/tms320f28022-upgraded-from-ccsv6-to-v8-rts2800-ml-doubled-in-size

器件型号:TMS320F28022

Win7 32位、CCS v8.2.0、F28022。

我刚刚从 CCS v6升级到 CCS V8、发现 rts2800库不再适合我之前分配的闪存区域。

我正在处理一个非常大的项目、我想将其缩减。

我想我可以将 CCS V8指向旧版 CCS v6库、但我将假定可能有一些错误修复、我会犹豫是否要这么做。

如何"微操作"库以... 1) 1)仅包含我需要的库函数、2)比较旧函数与新函数之间的差异?

我似乎还记得编译器的一些内容、仅包括我使用的库函数。 如果为 true、函数会变得大很多。 如何验证这一点?

旧版本位于 C:\ti\ccsv6\tools\compiler\ti-cgt-C2000-6.4.6\lib 中

新版本位于 C:\ti\ccsv8\tools\compiler\ti-cgt-C2000_18.1.3.LTS \lib 中

我在每个文件夹下都看到一个"src"文件夹。 我假设这是各个库的源代码。

如何重新构建库?

谢谢、Mark。

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

    尝试查看是否可以修改链接器命令文件以分配更多内存。

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

    Ozino:

    感谢您的回复、我更改了存储器分配、它确实起作用、但我开始耗尽闪存空间。 问题是、如何获得更小的 RTL。

    谢谢、Mark。

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

    有一个小型内存模型 rts2800.lib、但不建议使用。 下面是一个包含更多详细信息的 Wiki 页面: processors.wiki.ti.com/.../C28x_Code_Generation_Tips_and_Tricks

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

    感谢 Ozino 提供该链接。 我将研究小型内存模型。

    我认为我在 CCS6中使用的是大内存模型。 现在、在 CCS8中、这种增长很大。

    在这种情况下、我可能会返回到 RTS 的 CCS6版本。

    的确、我正在处理程序的其他方面、从未真正测试过旧版(CCS6)。 可能有错误。

    增加2倍的尺寸对于清除一些错误来说似乎有点过大。

    当只需要部分内容且更高效地链接旧版本时、也可能是编译器(或是否是链接器)包含整个 RTS。

    现在、还有其他优先级、因此必须在后面继续执行一段时间。

    谢谢、Mark。

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

    Mark、

    我在上一次答复中错了。 在小型模型中、使用16位指针来访问所有内容。  由于我们的数据驻留在比此高得多的存储器中、C2000不再支持小型模型。  

    我将把这个帖子转发给我们的编译器团队。 我认为 有一种方法可以使链接器不包含任何未实际 使用的函数。 我不确定这种方法。 同时、您能否查看存储器映射以查看 包含哪些函数。  

    谢谢、

    Ozino

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

    [引用 user="cool Javelin">如何"对库进行微操作"以... 1) 1)仅包含我需要的库函数

    链接器已执行此操作。

    2) 2)比较旧版与新版之间的差异?[/报价]

    RTS 库的源代码在编译器版本6.4.6和18.1.3.LTS 之间有所不同。 下面的描述忽略了一些更精细的细节、但在要点上是正确的。  RTS 源代码分为两部分。  一个部分是 C 标准所需的核心功能。  这包括诸如 memcpystrcpymalloc 等函数。  另一部分是 C++所需的函数。  这是头文件、如所示 等等。  C 的核心函数在这两个版本之间基本相同。  C++所需的函数完全不同。  6.4.6版使用 Dinkumware 中的实现。  版本18.1.3.LTS 使用称为 STL (标准模板库)的开源实现。  虽然我无法具体说明这对您的情况有何影响、但这种差异似乎是导致 RTS 使用的内存增加的部分原因。

    [引用 user="cool Javelin">我似乎只记得有关编译器的内容、包括我使用的库函数。 如果为 true,则函数已变得大得多。

    这可能是原因的一部分。  另一个可能的原因... 由于 RTS 源代码的组织结构、您正在链接不需要的函数、但以自动化方式查看并不容易。  我现在想不出一种快速的方法来解释这一点。  我宁愿在您的程序中找到一个示例、然后解释一下。

    [报价用户="cool Javelin"]如何验证此操作?

    我们没有明确定义的方法来实现它。  相反、请提交一些文件、然后我将对其进行分析。  如果您要提交调用图和链接器映射文件、以便使用每个编译器版本进行编译、我将不胜感激。  将其放入 zip 文件中、然后将该 zip 文件附加到您的下一篇文章中。

    要构建调用图、请使用 CG_xml 包中的实用程序 call_graph。  请使用-func_info 选项、以便使用每个函数的文件名和大小标注调用图。

    [引用 user="cool Javelin">我在每个文件夹下都看到一个"src"文件夹。 我假设这是各个库的源代码。[/quot]

    正确。

    [引用 user="cool Javelin"]如何开始重建库?

    我不确定这会有多大帮助。  但是、您可以使用实用程序 mklib 重新构建库

    谢谢、此致、

    乔治

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

    正如 Tywin Lannister 所说:"我确信我是男孩时就知道了。"

    谢谢、Ozino 提醒我。 而节省成本则是一大难题。

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

    谢谢 George、这些技巧非常有用、我在一分钟内详细阅读了这些技巧。

    我将全部用 C 语言创建、而不是 C++、但可能存在一些差异。

    不幸的是、我从 V8回 V6。

    我安装了 V8以尝试修复"更新视图贡献" 、但新版本中尚未修复。 (请参阅 e2e.ti.com/.../748642 )。

    我在 v8中发现了一些其他错误、例如在预编译下的"构建步骤"中、如果我有一个很长的命令、有时它会停止在窗口中列出命令、但命令会执行相同。 还有其他一些小问题我现在无法用手指来解决。

    我开始花了太多的时间来对抗计算机、而实际工作却不够。

    我确实想回到 V8、我更喜欢它、但我将不得不等待更新的版本。

    sigh、那么、我想这个问题必须暂停一会儿。 我非常感谢您的见解、我将回顾一些好的提示、如您提到的"调用图"、我认为我喜欢了解更多有关代码如何创建的想法。

    谢谢、Mark。