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.

[参考译文] RTOS/AM4377:使用.xdt 文件重新排列代码段

Guru**** 2551110 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/605071/rtos-am4377-code-section-rearranging-with-xdt-file

器件型号:AM4377
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

SYS/BIOS:6.42.2.2.29

基本应用:EtherCAT 全功能示例+ MOTOR_CONTROL

我的目标:在“L3构建”中运行应用程序

您好!

我对链接器设置有疑问。

我尝试在 L2上运行应用程序(作为 SRAM)。

借助 SPRAC45、我进行了平台设置、编译工作良好。

当应用程序足够小、可以容纳在 L2SRAM 中时、没有错误。

但大小的应用程序代码数据超过 L2SRAM、我无法生成".out"文件。

我的应用程序大小为362KB (我通过 XIP 构建检查了它)、OCMCRAM 为128KB + L2SRAM 为256KB。

我有384KB、我认为可以加载应用。

然后、我需要重新排列应用程序部分、如何才能得到它?

我在.text 段(在~~~.xdt 文件中)中尝试了*(exclude_file (objectfile.o).text.objectfile)、但超过的大小与以前相同。

我错过了什么吗? 或者我应该尝试更多的目标文件吗?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    当256 KB L2/L3存储器配置为 L2高速缓存时、总共 有64 KB ARM RAM 和256 KB L3 RAM、用于320KB RAM。

    当256 KB L2/L3存储器配置为 L3 RAM 时、总容量为576 KB。

    使用高速缓存运行通常可提供最佳性能。  请参阅 http://www.ti.com/lit/an/sprac45a/sprac45a.pdf

    一些可减小存储器大小 的优化是使用-OS 编译(针对大小进行优化)、指定-mfloat-abi=hard -mfpu=neon。 此外、-ffunion-sections 和-Fdata-sections 可以提供良好的改进。  删除调试-g 和-gdwarf。  如果您正在开发运行时软件包并且不需要 UART 通信、则可能希望排除 UART 运行时组件、打印和 stdio.h。在应用程序和 pdk_AM437X...\packages/ti\board\... 应用 程序调用的函数 。 若要修改库文件、请将文件 (作为链接)添加到 工程(请勿复制)并添加修改。   您可能需要通过以太网更改这些文件的某些包含、方法是更改包含说明以提供完整路径或更改工程的库搜索路径。   通过检查堆和堆栈使用情况也可以获得一些保存。 C:\ti\BIOS_version\docs 中的 SYSBIOS 用户指南具有一些可帮助 实现的其他优化。

    David

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

    我尝试了"-OS"选项。 它也超过了内存(.text 超过 L2SRAM)。
    需要 UART 控制台...
    我想将.text 中的某些内容移动到.data (OCMCRAM)。
    我已经在'.xdt'文件中尝试过"exclude_file"命令、但它似乎不起作用。(超过大小相同...)

    您能帮我将一些二进制数据从".text"移动到".data"吗?
    我认为这有助于我运行我的应用程序。

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

    ARM 工具链具有一个命令,可用于识别组件的大小及其放置位置。 我们在 dos 窗口中使用此命令、并将结果转储到可导入电子表格并排序的文本文档中。
    命令为 arm-none-eabi-objdump.exe -x -w "the _program_TO_BE _checked.out"> the _program_TO_be _checked.txt
    此程序位于{ccs_installation_directory}\tools\compiler\gcc-arm-none-eabi-"arm_version"arm-none-eabi\bin -例如-
    C:\ti\ccsv7\tools\compiler\gcc-arm-none-eabi-4_9-2015q3\arm-no-eabi\bin\arm-none-eabi-objdump.exe

    SysBIOS 提供了将程序段移动到特定内存中的工具
    {BIOS_installation_directory}\docs\Bios_User_Guide.pdf 中的 BIOS_User_Guide 对此进行了说明
    第7章提供了一些与配置和使用内存非常相关的解决方案。

    David
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、感谢您的回答。
    我定义了一个新的段".text2"、并在该段中分配了一些目标文件。
    ".text2"位于"Data memory (region_data)"中。
    当我将一些与 SYS/BIOS 相关的对象移动到".text2"时、可以进行二进制文件构建。
    但二进制文件大小超过2MB。
    我发现我分配了两次与 SYS/BIOS 相关的对象(在".text2"和".data"中)。
    这会导致巨大的二进制数吗?

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

    你(们)好

    您是否认为 pdkAppImageCreate 生成的文件较大、而*。out 文件为预期大小?

    当函数被分成单独的段时、可执行文件的总大小会有所增加、因为某些引用会成为 far 调用。 如果您按段对符号表进行排序、则可以看到这一点。 但是、这应该是%的增加、而不是很大的增加。 通常、当我们移动 一组主要与 内部基准密切相关的函数时、我们可以获得最紧凑的代码和最佳的代码执行速度。 例如 、将所有电路板初始化代码移动到一个段中、或将组成任务的一组函数移动到一个段中。

    我们使用 由 arm-none-eabi-objdump.exe -x -w "the _program_TO_BE _checked.out"> the _program_TO_BE _checked.txt 命令生成的符号表。 作为通过在扩展表中按段名称对表进行排序来开发段定义的指南。

    David