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.

[参考译文] 编译器/AM5728:两个链接器文件

Guru**** 2931100 points

Other Parts Discussed in Thread: AM5728, SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/666472/compiler-am5728-two-linker-files

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

工具/软件:TI C/C++编译器

在 DSP/BIOS 2.4.1.1节中、它说明了该工具如何生成 linker.cmd 文件、但是如果我们希望用户连接器命令文件、C/C++编译器/连接器将只使用一个。

如何让它仅使用我的链接器命令文件、这对 DSP/BIOS 有何影响?  DSP/BIOS 是否要求我具有存储器或段的任何特定名称?

我收到的错误消息是:

"configPkg/linker.cmd"、第28行:错误#10264:L2SRAM 存储器范围与现有存储器范围 IRAM_MEM 重叠
"configPkg/linker.cmd"、第29行:错误#10263:OCMC_RAM1内存范围已指定
"configPkg/linker.cmd"、第29行:错误#10264:OCMC_RAM1存储器范围与现有存储器范围 OCMC_RAM1重叠
"configPkg/linker.cmd"、第30行:错误#10263:OCMC_RAM2内存范围已指定
"configPkg/linker.cmd"、第30行:错误#10264:OCMC_RAM2内存范围与现有内存范围 OCMC_RAM2重叠
"configPkg/linker.cmd"、第31行:错误#10263:OCMC_RAM3内存范围已指定
"configPkg/linker.cmd"、第31行:错误#10264:OCMC_RAM3内存范围与现有内存范围 OCMC_RAM3重叠
"configPkg/linker.cmd"、第32行:错误#10264:EXT_RAM 存储器范围与现有存储器范围 DDR0重叠

这是完全有意义的、因为有两个*。cmd 文件、并且存储器确实重叠了。

由于 DSP/BIOS linker.cmd 文件是自动生成的、我如何"禁用"它的使用、以及我如何确保我的 application.cmd 链接器命令文件将适合 DSP/BIOS 生成的代码?

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

    尊敬的 Rob:

    您可以通过选中.tcf 文件中的以下框来排除自动生成的链接器文件:

    您使用的是什么 CCS 和 DSP/BIOS?

    Todd

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

     非常感谢。  使用此概念、我能够使用 XGCONF 工具找到相关部分、以添加我的一个命名部分。

    但是、出现了一个有关使用两个链接器文件的问题?  是否可以随时拥有两个*。cmd 文件?  同时有两个限制/要求有哪些?

    在我正在使用的 SYS/BIOS 版本(AM5728x 开发套件)中、我看不到如上所示的禁用*。cmd 文件的选项。 它确实列出了用作基址的链接器命令文件并将其设置为空、但我看不到 SYS/BIOS 生成的链接器 cmd 文件的"可显示"。

    谢谢。

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

    很抱歉、回答很慢。 我已经离开办公室了。 您使用的是 DSP/BIOS 还是 SYS/BIOS? 您开始询问 DSP/BIOS、但上面的图片是 SYS/BIOS。

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

    对于 DSP/BIOS 与 SYS/BIOS 的使用不准确、我深表歉意。

    我不熟悉您在此领域的产品。  我相信我正在使用 SYS/BIOS、因为我得知您下载的 AM5728 EVM 软件包随附了该软件包。

    很抱歉、如果我误导了答案。

    当我在产品和存储库选择对话框中创建项目时、我单击 SYS/BIOS V 6.52.0.12。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的澄清。 您可以使用 SYS/BIOS 创建多个链接器文件。 我将把您的线程移至处理器论坛、因为他们可能会就如何在链接器文件中设置内容提出建议。

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

    您提到过您使用了适用于 AM572x 的 Processor SDK RTOS、这些驱动程序示例基于 SYSBIOS、并自动生成链接器命令文件。 为什么需要创建自己的链接器命令文件? 您可以在.cfg 文件中使用 Program.sectMap 将不同的代码段放置在不同的存储器位置。 此外、您还可以创建自己的平台。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我找到了向 code composer 指示 configure.bld 文件的位置、并生成以下链接器文件。

    我还在软件包配置中添加了:dsp1。 dsp1是什么意思? 我的意思是、我只是将其添加到平台名称中、在我的例子中、平台名称是 ti.platforms.evmAM572x:dsp1

    dsp1是否具有某种扩展/选项?


    -l"C:\users\rob.Barton\ti\workspace_v7\DSP1\Debug\configPkg\package\cg\app_pe66.oe66"
    -l"C:\users\rob.Barton\ti\workspace_v7\DSP1\src\IPC\IPC.ae66"
    -l:C:\users\rob.Barton\ti\workspace_v7\DSP1\src\utils\utils.ae66"
    -l"C:\users\rob.Barton\ti\workspace_v7\DSP1\src\SysBIOS\SysBIOS.ae66"
    l"C:\ti\BIOS_6_52_00_12\packages/ti\targets\rts6000\lib\ti.targets.rts6000.ae66"
    -l"C:\ti\BIOS_6_52_00_12\packages/ti\targets\rts6000\lib\boot.ae66"

    --retain="*(XDC.meta)"


    --args 0x0
    堆0x0
    -stack 0x2000

    存储器

    L2SRAM (rwx):org = 0x800000,len = 0x20000
    OCMC_RAM1 (RWX):org = 0x40300000,len = 0x80000
    OCMC_RAM2 (RWX):org = 0x40400000,len = 0x100000
    OCMC_RAM3 (rwx):org = 0x4050000,len = 0x100000
    DSP1_PROG (rwx):org = 0x8c000000,len = 0x1000000
    SR_0 (RW):org = 0x8e000000,len = 0x1000000


    TI_SYSBIOS_family_C66_Cache_l1dSize = 32768;
    TI_SYSBIOS_family_C66_Cache_l1pSize = 32768;
    TI_SYSBIOS_family_C66_Cache_l2Size = 131072;

    部分


    TI_sdo_ipc_init:load > DSP1_PROG、type = NOINIT


    XDC_RAuntime_Startup_EXECFXN__C = 1;
    XDC_Runtime_Startup_RESETFXN__C = 1;

    部分

    .text:load >> DSP1_PROG
    .ti.decompress: load > DSP1_PROG
    .stack:加载> DSP1_PROG
    组:加载> DSP1_PROG

    .bss:
    .neardata:
    .rodata:

    .cinit:加载> DSP1_PROG
    .pinit:load >> DSP1_PROG
    init_array:load > DSP1_PROG
    .const:load >> DSP1_PROG
    .data:load >> DSP1_PROG
    .fardata:load >> DSP1_PROG
    .switch:load >> DSP1_PROG
    .sysmem:load > DSP1_PROG
    far:load >> DSP1_PROG
    .args:load > DSP1_PROG align = 0x4、fill = 0{_argsize = 0x0;}
    .cio:load >> DSP1_PROG
    ti.handler_table:load > DSP1_PROG
    .c6xabi.exidx:LOAD > DSP1_PROG
    .c6xabi.extab:load >> DSP1_PROG
    MatrixMemory:加载> L2SRAM 对齐= 0x4
    vecs:load > DSP1_PROG
    xdc.meta:load > DSP1_PROG、type = copy




    您可以看到、它会生成 SR_0存储器段、但不会在该段中放置任何内容。 在我看来、我至少应该看到一个段、其中包含 IPC 代码可以访问的>SR_0。

    IPC 启动仍然失败...

    是否有任何地方概述了使用 IPC 模块需要什么"设置"?

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

    [引用用户="Rob Barton"]

    我还在软件包配置中添加了:dsp1。 dsp1是什么意思? 我的意思是、我只是将其添加到平台名称中、在我的例子中、平台名称是 ti.platforms.evmAM572x:dsp1

    [/报价]

    如果您查看 MessageQ 示例中提供的 config.Bld 文件、您将看到其中定义的 dsp1:  

    Build.platformTable["ti.platforms.evmDRA7XX:dsp1"]={
    externalMemoryMap:[
    ["DSP1_PROG"、{
    名称:"DSP1_PROG"、空格:"代码/数据"、访问:"rwx"、
    基地址:0x8C000000、len:0x1000000、
    注释:"DSP1程序内存(16 MB)"
    ]]、
    ["SR_0"、SR_0]
    ]、
    代码内存:"DSP1_PROG"、
    dataMemory:"DSP1_PROG"、
    stackMemory:"DSP1_PROG"、
    L1DMode:"32K"、
    L1PMode:"32K"、
    l2Mode:"128K"
    }; 

    但我很困惑 ti.platforms.evmAM572x:dsp1为什么适合您、因为您可以看到它被定义为 ti.platforms.evmDRA7XX:dsp1。 (如果您想知道、DRA7XX 是我们的汽车等效器件)。

    我还应该提到、您不必使用 config.bld 文件、在这种 情况下、CCS 将使用~\BIOS_6_52_00_12\packages/ti\platforms\evmAM572X\platform.XDC 中定义的平台定义

    但是、如果要对 platform.xdc 文件中的平台定义进行任何更改、则需要重建 rtsc 库、这就是我们更喜欢使用 config.bld 文件的原因、因为它在应用程序级别。  

    我们可以在以下主题中继续进行与 IPC 相关的讨论、