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.

[参考译文] TDA4VM:TDA4 PSDK 7.1内存映射更改

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/982673/tda4vm-tda4-psdk-7-1-memory-map-changes

器件型号:TDA4VM
您好,
我们正在将现有运行的应用程序从 PSDK7.0迁移到 PSDK7.1。
使用最新的 PSDK 7.1内存映射、我们在 C66x 上遇到了内存链接错误、如下所示。
------------------------------------------------------
程序将不能放入可用的内存中。 定位失败
对于".const"段大小为0x15ed4c。 可用存储器范围:
DDR_C66x_2大小:0xDffc00未使用:0x44706最大孔:0x3ff40
------------------------------------------------------
在将存储器映射与 PSDK 7.0进行比较后、发现在最新的 PSDK 存储器映射中、C66存储器段大小减少了16MB。
我们尝试使用 C66x_2和 C7x 之间的16 MB 空穴来恢复 C66存储器大小。
应用程序正在编译、但在运行时、应用程序会挂起到验证图 API 中。
您能不能建议什么原因、或者我们有什么其他方法可以增加 C66存储器大小?
对此,
Swapnil N
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在更改存储器映射时有一些限制和注意。 在尝试更改内存映射之前、您是否仔细阅读了此开发人员注释。 这里的关键是、如果您使用 Linux、还需要更新 DTB 覆盖文件。

    https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/psdk_rtos/docs/user_guide/developer_notes_memory_map.html

    此致、
    Shyam

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

    客户在此主题上发布了更多信息: https://e2e.ti.com/support/processors/f/processors-forum/987039/tda4vm-tda4vm

    在此处复制粘贴内容:

    Shyam、您好!

    我们最初已经介绍了开发人员注释。 此外、我们还在使用 QNX、而不是 Linux。
    我们将应用程序从 PSDK7.0迁移到 PSDK7.1。 在此过程中,我们观察到 PSDK7.1 w.r.t QNX 有一些主要的内存映射变化。 由于以下原因,此更改导致我们出现问题。
    在 C6x 上运行的内核具有更高的内存要求。
    当我们尝试编译应用程序并遇到以下错误时、会观察到这种情况。
    ------------------------------------------------------
    程序将不能放入可用的内存中。 对齐方式放置在".const"大小为0x15ed4c 的段时失败。 可用存储器范围:DDR_C66x_2大小:0xDffc00未使用:0x44706最大空洞:0x3ff40
    ------------------------------------------------------
    为了解决第一个问题,我们尝试从 C6X_1 (2 MB)借用一些内存,以增加 C6X_2的内存。 这有助于我们解决编译问题,但我们注意到应用程序在执行第一个帧后挂起。
    2.为了解决上述挂起问题,我们增加了 DSP 堆栈大小(此更改是在 PSDK7.0中完成的,因为它是我们的一种算法的要求。)
    但之后,我们开始遇到编译问题,如下所示
    ------------------------------------------------------
    程序将不能放入可用的内存中。 “.text”大小为0x126d00的段定位失败。 可用存储器范围:DDR_C66x_1大小:0xDffc00未使用:0xe4142最大空洞:0xDff40
    程序将不能放入可用的内存中。 对齐方式放置在".const"大小为0x15ed4c 的段时失败。 可用存储器范围:DDR_C66x_2大小:0xDffc00未使用:0x44706最大空洞:0x3ff40
    程序将不能放入可用存储器中、或者该段包含需要无法为此段生成的 trampoline 的调用站点。 ".bss:taskStackSection"大小的运行定位失败
    0x208000。 可用存储器范围:DDR_C7x_1大小:0x9fc000未使用:0x15f55f 最大空洞:0x140000
    ------------------------------------------------------
    为了解决这些问题,我们分析了 PSDK7.1内存映射,并观察到16 MB 内存(C6X_1和 C6X_2各为8 MB)已减少,但未用于任何其他内核。 因此,我们尝试将 C6X_1_DDR_SIZE 和 C6X_2_DDR_SIZE 各增加到24MB (与 PSDK7.0相同)。
    这有助于我们解决上述编译问题,但我们的应用程序挂起在 verifyGraph()中。
    3.为了解决 verifyGraph 中的挂起问题,从 MCU2_1借用了一些内存并将其分发到 C6x 和 c7x 中。 存储器映射更改如下:
    1.MCU2_1内存减少了12MB (从32MB 更改为20MB )。
    2.C6x_1内存增加了2 MB (从16MB 更改为18 MB)。
    3.C6x_2存储器增加了6 MB (从16MB 更改为22 MB)。
    4.c7x 内存增加了4 MB (从16MB 更改为20 MB)。
    在这些更改之后、应用程序工作正常。 请帮助我们了解内存更改是否正确。
    此外,您能否告诉我们我们我们是否可以使用16 MB 的空穴内存,而不是更改 MCU2_1的内存映射。

    针对 Linux+RTOS 模式的系统内存映射

    请注意、此文件是使用 PyTI_PSDK_RTOS 工具自动生成的

    名称 起始地址 结束地址 尺寸 属性 说明
    L2RAM_C66x_1 0x00800000 0x00837FFF 224.00 K 个字节 RWIX L2表示 C66x_1
    L2RAM_C66x_2 0x00800000 0x00837FFF 224.00 K 个字节 RWIX L2表示 C66x_2
    MAIN_OCRAM_MCU2_0 0x03600000 0x0361FFFF 128.00 K 个字节 RWIX 用于 MCU2_0的主 OCRAM
    MAIN_OCRAM_MCU2_1 0x03620000 0x0363FFFF 128.00 K 个字节 RWIX 用于 MCU2_1的主 OCRAM
    L2RAM_C7x_1 0x64800000 0x64877FFF 480.00 K 个字节 RWIX L2表示 C7x_1
    L1RAM_C7x_1 0x64E00000 0x64E03FFF 16.00 K 个字节 RWIX L1表示 C7x_1
    MSMC_MPU1 0x70000000 0x7001FFFF 128.00 K 个字节 RWIX MSMC 为 ATF 的 MPU1保留
    MSMC_C7x_1 0x70020000 0x707E7FFF 7.78 MB RWIX 适用于 C7x_1的 MSMC
    MSMC_DMSC 0x707F0000 0x707FFFFF 64.00 K 个字节 RWIX MSMC 保留用于 DMSC IPC
    DDR_MCU1_0_IPC 0xA0000000 0xA00FFFFF 1024.00 K 个字节 RWIX 适用于 Linux IPC 的 MCU1_0的 DDR
    DDR_MCU1_0_resource_table 0x0100000 0xA01003FF 1024 B RWIX 用于 Linux 的 MCU1_0的 DDR 资源表
    DDR_MCU1_0 0xA0100400 0x0AFFFFFF 15.00 MB RWIX 用于代码/数据的 MCU1_0的 DDR
    DDR_MCU2_0_IPC 0xA1000000 0xA10FFFFF 1024.00 K 个字节 RWIX 适用于 Linux IPC 的 MCU2_0的 DDR
    DDR_MCU2_0_resource_table 0xA1100000 0xA11003FF 1024 B RWIX 用于 Linux 的 MCU2_0的 DDR 资源表
    DDR_MCU2_0 0xA1100400 0xA2FFFFFF 31.00 MB RWIX 用于代码/数据的 MCU2_0的 DDR
    DDR_MCU2_1_IPC 0xA3000000 0xA30FFFFF 1024.00 K 个字节 RWIX 适用于 Linux IPC 的 MCU2_1的 DDR
    DDR_MCU2_1_resource_table 0xA3100000 0xA31003FF 1024 B RWIX 用于 Linux 的 MCU2_1的 DDR 资源表
    DDR_MCU2_1 0xA3100400 0xA43FFFFF 19.00 MB RWIX 用于代码/数据的 MCU2_1的 DDR
    DDR_MCU3_0_IPC 0xA4400000 0xA44FFFFF 1024.00 K 个字节 RWIX 适用于 Linux IPC 的 MCU3_0的 DDR
    DDR_MCU3_0_resource_table 0xA4500000 0xA45003FF 1024 B RWIX 用于 Linux 的 MCU3_0的 DDR 资源表
    DDR_MCU3_0 0xA4500400 0xA4BFFFFF 7.00 MB RWIX 用于代码/数据的 MCU3_0的 DDR
    DDR_MCU3_1_IPC 0xA4C00000 0xA4CFFFFF 1024.00 K 个字节 RWIX 用于 Linux IPC 的 MCU3_1的 DDR
    DDR_MCU3_1_resource_table 0xA4D00000 0xA4D003FF 1024 B RWIX 用于 Linux 的 MCU3_1的 DDR 资源表
    DDR_MCU3_1 0xA4D00400 0xA53FFFFF 7.00 MB RWIX 用于代码/数据的 MCU3_1的 DDR
    DDR_C66x_2_IPC 0xA5400000 0xA54FFFFF 1024.00 K 个字节 RWIX 用于 Linux IPC 的 C66x_2的 DDR
    DDR_C66x_1_resource_table 0xA5500000 0xA55003FF 1024 B RWIX DDR for C66x_1 for Linux 资源表
    DDR_C66x_1_BOOT 0xA5600000 0xA56003FF 1024 B RWIX 用于引导部分的 C66x_1的 DDR
    DDR_C66x_1 0xA5600400 0xA65FFFFF 16.00 MB RWIX 用于代码/数据的 C66x_1的 DDR
    DDR_C66x_1_IPC 0xA6600000 0xA66FFFFF 1024.00 K 个字节 RWIX 用于 Linux IPC 的 C66x_1的 DDR
    DDR_C66x_2_resource_table 0xA6700000 0xA67003FF 1024 B RWIX DDR for C66x_2 for Linux 资源表
    DDR_C66x_2_boot 0xA6800000 0xA68003FF 1024 B RWIX 针对引导部分的 C66x_2的 DDR
    DDR_C66x_2 0xA6800400 0xA7BFFFFF 20.00 MB RWIX 用于代码/数据的 C66x_2 DDR
    DDR_C7x_1_IPC 0xA7C00000 0xA7CFFFFF 1024.00 K 个字节 RWIX 适用于 Linux IPC 的 C7x_1的 DDR
    DDR_C7x_1_resource_table 0xA7D00000 0xA7D003FF 1024 B RWIX DDR for C7x_1 for Linux 资源表
    DDR_C7x_1_boot 0xA7E00000 0xA7E003FF 1024 B RWIX 针对引导部分的 C7x_1的 DDR
    DDR_C7x_1_VECS 0xA8000000 0xA8003FFF 16.00 K 个字节 RWIX 针对向量部分的 C7x_1的 DDR
    DDR_C7x_1_SECURE_VECS 0xA8200000 0xA8203FFF 16.00 K 个字节 RWIX 添加了"DDR for C7x_1 for secure vecs"部分
    DDR_C7x_1 0xA8204000 0xA8FFFFFF 13.98 MB RWIX 针对代码/数据的 C7x_1的 DDR
    IPC_VING_MEM 0xAA000000 0xABFFFFFF 32.00MB IPC 振铃的内存。 必须是非缓存或与缓存一致
    APP_LOG_MEM 0xAC000000 0xAC03FFFF 256.00 K 个字节 用于远程内核记录的存储器
    TIOxv_obj_Desc_MEM 0xAC040000 0xADFDFFFF 31.62 MB 共享存储器的存储器。 必须是非缓存或与缓存一致
    PCIe_queue_shared_MEM 0xADFE0000 0xADFEFFFF 64.00 K 个字节 使用共享存储器通过 PCIe 传输 IPC 的内存。 必须是非缓存或与缓存一致
    PCIe_queue_mirror_remote_shared_MEM 0xADFF0000 0xADFFFFFF 64.00 K 个字节 为远程 PCIe IPC 共享存储器的 RAT 映射保留的存储器。 必须是非缓存或与缓存一致
    DDR_Shared_MEM 0xAE000000 0xCDFFFFFF 512.00 MB 用于 DDR 中共享存储器缓冲器的存储器
    DDR_MCU2_0_NON_CACHE 0xCE000000 0xCE00FFFF 64.00 K 个字节 RWIX 针对非缓存堆的 MCU2_0的 DDR
    DDR_MCU2_1_NON_CACHE 0xCE010000 0xD1FFFFFF 63.94 MB RWIX 非缓存堆的 MCU2_1的 DDR
    DDR_MCU1_0_LOCAL_HEAP 0xD2000000 0xD21FFFFF 2.00 MB RWIX 针对本地堆的 MCU1_0的 DDR
    DDR_MCU1_LOCAL_HEAP 0xD2200000 0xD23FFFFF 2.00 MB RWIX 针对本地堆的 MCU1_1的 DDR
    DDR_MCU2_0_local_heap 0xD2400000 0xD2FFFFF 8.00 MB RWIX 针对本地堆的 MCU2_0的 DDR
    DDR_MCU2_1_LOCAL_HEAP 0xD2C00000 0xD3BFFFFF 16.00 MB RWIX 针对本地堆的 MCU2_1的 DDR
    DDR_MCU3_0_LOCAL_HEAP 0xD3C00000 0xD3DFFFFF 2.00 MB RWIX 针对本地堆的 MCU3_0的 DDR
    DDR_MCU3_1_LOCAL_HEAP 0xD3E00000 0xD3FFFFFF 2.00 MB RWIX 针对本地堆的 MCU3_1的 DDR
    DDR_C66X_1_LOCAL_HEAP 0xD4000000 0xD4FFFFFF 16.00 MB RWIX 针对本地堆的 c66x_1的 DDR
    DDR_C66X_1_Scratch 0xD5000000 0xD7FFFFFF 48.00 MB RWIX 用于暂存存储器的 c66x_1的 DDR
    DDR_C66X_2_LOCAL_HEAP 0xD8000000 0xD8FFFFFF 16.00 MB RWIX 针对本地堆的 c66x_2的 DDR
    DDR_C66X_2_Scratch 0xD9000000 0xDBFFFFFF 48.00 MB RWIX 用于暂存存储器的 c66x_2 DDR
    DDR_C7X_1_LOCAL_HEAP 0xDC000000 0xEBFFFFFF 256.00 MB RWIX 针对本地堆的 c7x_1的 DDR
    DDR_C7X_1_Scratch 0xEC000000 0xF9FFFFFF 224.00 MB RWIX c7x_1的 DDR、用于暂存存储器
    TIOxv_log_RT_MEM 0xFA000000 0xFAFFFFFF 16.00 MB 用于运行时记录的 TI OpenVX 共享存储器。 必须是非缓存或与缓存一致
    DDR_MCU1_IPC 0xFB000000 0xFB0FFFFF 1024.00 K 个字节 RWIX 适用于 Linux IPC 的 MCU1_1的 DDR
    DDR_MCU1_resource_table 0xFB100000 0xFB1003FF 1024 B RWIX 用于 Linux 的 MCU1_1的 DDR 资源表
    DDR_MCU1_1 0xFB100400 0xFBFFFFFF 15.00 MB RWIX 用于代码/数据的 MCU1_1的 DDR
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉回复较晚。 我们在即将推出的 SDK 7.3中修改了存储器映射、为其他内核在 DDR 的低2GB 部分增加了空间、使其极具 C66x DSP/R5F 等特性、并将 C7x 堆移至高2GB 部分。 我们也可以将这些更改合并到 SDK 7.1/7.2中、但需要进行一些最低限度的工作。 如果您仍面临问题、请安排本周的电话、我可以根据需要帮助修改存储器映射。