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.

[参考译文] TMS320F28034:可查看由于 DP 对齐而导致的存储器碎片的工具

Guru**** 2914580 points

Other Parts Discussed in Thread: TI-CGT

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1644030/tms320f28034-tool-to-visualize-memory-fragmentation-due-to-dp-alignment

器件型号: TMS320F28034

我正在寻找一个工具来可视化 ebss 段中的存储器使用情况、该工具解决了由于数据页对齐而导致的无法使用的段。 我们正在耗尽 RAM、但由于存在这些漏洞/漏洞、未能 100%使用 RAM。 我知道链接器在通过 DP 加载来更大限度地减少代码空间和缩短执行时间方面做得很好。  I image 一个合适的工具将计算浪费 RAM 的百分比、并帮助我们更好地组织我们的全局变量、让我们直观地了解这些差距所在。  

请注意、这适用于混合使用全局变量 (int、long) 以及全局结构和数组的旧代码库。   

此致、

Jason

 

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

    Jason、

    我要查看工程输出目录中的.map 文件、它应该会显示所有分配的存储器区域以及每个区域中的已使用量。

    您可以使用的另一个工具是位于以下 CCS 安装路径中的 ofd2000.exe :C:\ti\ccs1280\ccs\tools\compiler\ti-cgt-c2000_22.6.3.LTS\bin

    使用.out 文件作为参数从命令行运行该文件、这将返回所有符号的位置、从而让您更精细地了解内容的放置位置。

    此致、
    Matthew

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

    谢谢 Matt、我尝试了 ofd2000.exe 实用程序、但它没有提供比.map 文件更多的内容。 实际上、.map 文件有一个节“全局数据符号:按数据页排序“、其中显示了哪个数据页上有哪些变量。 但是、.map 文件中没有变量(符号)的大小信息。 其中一些是数组或结构体。 您无法通过下一个符号的地址推断大小、因为在许多情况下、与数据页中的最后一个符号和下一个数据页的开头之间存在很大的差距。 这些差距的大小正是我试图找到的。  cgxml 中任何基于 Perl 的脚本是否能够帮助解决此问题?  

    此致、

    Jason

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

    Jason、

    我认为、如果我们使用-t 选项、这将输出您想要的内容。  我不熟悉 cgxml 脚本、但我有一个 python 脚本、可能会得到您想要的内容。  请看一下这是否有帮助。

    此致、

    Matthewe2e.ti.com/.../dp_5F00_frag.py.txt

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

    谢谢 Matt。  在 ti-cgt_c2000_22.6.3.LTS 安装中、ofd2000.exe 版本似乎没有-t 选项。 这应该是最新版本。 请注意、我们仍在使用 COFF 格式。  

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

    Jason、

    您是否尝试过 CCS 工具栏中“View“下的内存分配查看器、  

    另一个要尝试的方法是在工程属性中优化大小和速度

    我还会询问我们软件工具团队的一些同事、他们是否根据自己的经验有任何想法。

    此致、
    Matthew

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

    谢谢 Matthew、

    Memory Allocation(内存分配)视图显示条形图和所用资源 的百分比、以及哪个部分使用的百分比的细目。 我认为您的 Python 工具正是我需要的。 您使用的是哪个版本的 ofd2000.exe、它有-t 选项?  是否有其他格式(.xml?) Python 脚本可以接受吗?  

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

    Jason、

    感谢您的反馈,我重新审视了脚本概念以及您对缺少-t 的反馈   

    我们只需使用已从工程中输出的.map 文件。  附加的 python 脚本将处理该文件、查找符号边界并给出基于 HTML 的报告。

    如果这能满足您的需求、或者您对清理有疑问、请告诉我。

    e2e.ti.com/.../dp_5F00_frag.py

    此致、
    Matthew

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

    谢谢 Matthew、

    由于缺乏符号大小信息、因此无法找到不足之处。  我不知道如何从 .out 或.map(或 xml 版本)获取此内容。 该符号可以是标量值(16 位、32 位)、结构体或数组。 请注意、除非使用--mapfile_contents = sym_defs 选项、否则.map 文件不在.ebss 段中包含局部变量

    我当前是通过使用对.out 文件进行后处理来手动解决此问题;  

    nm2000 -n OutFileName.out > symlst1.txt

    然后 从 symblst.txt 文件中的地址增量计算符号大小。 然后、我必须 通过在 C 代码中找到变量定义(标量,结构,数组)、手动检查任何看起来可疑的内容。 对于结构体和数组、我正在查看调试器中的变量以查看起点和终点、从而找到实际大小、并将其与 符号表中增量地址的大小进行比较、以查找空洞的大小。 到目前为止,我发现的最大漏洞是文件中超过 60 个字,有一个大结构和一些标量变量。 我必须将标量移到另一个文件中、然后链接器就可以填补这个空白。

    必须有一些工具可用于从.out 文件、映射文件或链接器 xml 输出文件中获取包含大小信息的符号列表。  

    此致、

    Jason  

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

    Jason、
    我会让工具团队的一些同事发表评论。  让我们看看他们是否有一些想法。

    此致、
    Matthew

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

    Jason、

    好的、我回到您的反馈中、提出了一个新的解决方案/建议。  看起来我们可以通过.out 文件(将包含 DWARF 和字大小)和映射文件(布局和符号地址)的组合得到所需的内容。  以下是我们需要添加到您的构建流程中的步骤

    1) 确保编译器选项中存在-g 选项;在我们的示例中设置了此选项、但我们需要在.out 文件中提供该信息才能在下面找到。  我已在本文末尾添加了屏幕截图、以显示其在 CCS 的构建选项中的位置(右键点击工程并选择属性以打开此对话框)

    2) 我们将使用基于 XML 的“映射“文件。  工具团队建议、与仅分析.map 文件相比、这种格式更可靠。  同样、我们的示例中已启用此功能、但我展示了在没有此功能的情况下它的位置(在链接器选项中)

    -根据我们的示例用法,最有可能#1 和#2 都已准备好供您构建,但我不想假设任何东西。

    3) 我附加了一个更新的 python 文件,它同时采用.out 和.xml 文件,并解析孤立的部分,但也给出了所有本地的名称,以便您可以返回并修改您的代码。  我将 python 调用的语法放在下面;现在、由于我们最关心 DP 的使用、因此我设置了--section .ebss 的选项。  如果将其留空、则脚本将在完整输出中运行。

    4) 用法说明: 这种情况更适合其他应用、目前此脚本将仅适用于基于.coff 的输出、例如 F2803x (Gen1 和 Gen2 C2000 MCU) 上的输出。  由于 ELF 输出更改了引用格式、因此我需要做更多工作来支持 ELF 输出。

    Python 用法:  

    Python dp_frag.py --xml myproject_link.xml --out MyProject.out --section .ebss -.html report.html

    -G 选项:

    -xml 选项

    HTML 输出示例供参考:

    e2e.ti.com/.../8228.dp_5F00_frag.py

    此致、
    Matthew

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

    谢谢马修!

    这个可视化工具是非常好的!  

    我已经在多个版本上运行了它、现在我正在尝试理解这些建议。 在许多数据页中、顶部有一个空白标记为“浪费“、底部的任何空白标记为 可用空间。 脚本的建议是对数据页中的变量重新排序、顶部是 32 位、底部是 16 位。 我修改了 C 代码来执行此操作、但生成的地图在数据页的顶部仍然有间隙。 顶部的这个间隙实际上是浪费了链接器无法使用的空间吗?  

    好极了

    Jason

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

    Jason、

    我可能需要查看您的链接器、甚至输入/输出 html 文件、看看是否可以确定正在发生的事情。  顶部的间隙是我没想到的、因为链接器应该在起始地址打包并一直往下处理。    

    我已在此 E2E 上向您发送了一个连接申请、建立连接后、您可以直接与我在论坛外共享文件。

    如果您愿意、我也可以直接通过您的电子邮件联系信息与您联系。  请告诉我。

    此致、

    Matthew

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

    谢谢 Matthew、

    我尚未在 E2E 上看到连接请求

    Jason

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

    现在重新发送请求。

    马特