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.

[参考译文] 编译器/AM5708:AM57x DSP 程序存储器分配

Guru**** 2553450 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/922734/compiler-am5708-am57x-dsp-program-memory-allocation

器件型号:AM5708

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

我的 DSP 程序的大小为11.7M、ARM 在使用 load-firmware.sh 加载 DSP 程序时报告错误。 地址0x40800000是 dsp1的 L2RAM 地址、并报告 DMA 存储器分配错误。 询问如何修改以解决错误消息? (DSP 可执行文件11.7M、机器人程序太大、无法减少)。

load-firmware.sh:

如果[-f "server_dsp1.xe66"];then
path=$(cd "$(dirname "$0")";pwd)"/server_dsp1.xe66"
RM /lib/firmware/dra7-dsp1-fw.xe66
LN -s $path /lib/firmware/dra7-dsp1-fw.xe66
echo 40800000.DSP >/sys/bus/platform/drivers/omap-rproc/unbind
echo 40800000.DSP >/sys/bus/platform/drivers/omap-rproc/bind
FI

DSP 的内存分配如下:

 

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

    您能否共享 DSP 固件映射文件中的一些信息?

    顶部包含每个存储器部分的地址和大小。

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

    我尝试过很多次、发现  CODE_SIZE 不能超过 26M 、 堆大小不能超过 6M。  text_size  可以设置为 32M。  

    映射文件 如下所示:

    -args 0x64
    堆0x0
    -stack 0x1000

    存储器

    L2SRAM (rwx):org = 0x800000,len = 0x40000
    OCMC_RAM1 (RWX):org = 0x40300000,len = 0x80000
    OCMC_RAM2 (RWX):org = 0x40400000,len = 0x100000
    OCMC_RAM3 (rwx):org = 0x4050000,len = 0x100000
    EXT_CODE (rwx):org = 0x95000000,len = 0x2000000
    EXT_DATA (RW):org = 0x97000000,len = 0x2000000
    EXT_HEAP (RW):org = 0x99000000,len = 0x2000000
    trace_BUF (RW):org = 0x9f000000,len = 0x60000
    EXC_DATA (RW):org = 0x9f060000,len = 0x10000
    PM_DATA (rwx):org = 0x9f070000,len = 0x20000
    CMEM (RW):org = 0xa0000000,len = 0x1000000

    XDC_RAuntime_Startup_EXECFXN__C = 1;
    XDC_Runtime_Startup_RESETFXN__C = 1;

    部分

    .text:load >> EXT_code
    .ti.decompress: load > EXT_code
    .stack:加载> EXT_DATA
    组:加载> EXT_DATA

    .bss:
    .neardata:
    .rodata:

    .cinit:加载> EXT_DATA
    .pinit:加载>> EXT_DATA
    init_array:load > EXT_data
    .const:load >> EXT_DATA
    .data:load >> EXT_DATA
    .fardata:load >> EXT_DATA
    .switch:load >> EXT_DATA
    .sysmem:加载> EXT_DATA
    far:load >> EXT_DATA
    .args:load > EXT_DATA align = 0x4、fill = 0{_argsize = 0x64;}
    .cio:加载>> EXT_DATA
    .ti.handler_table:load > EXT_data
    .c6xabi.exidx:加载> EXT_DATA
    .c6xabi.extab:load >> EXT_DATA
    tracebuf:load > trace_BUF
    errorbuf:"加载">" EXC_DATA "
    vecs:load > EXT_code
    .resource_table:load >0x95000000、type = NOINIT
    xdc.meta:load > EXT_data、type = copy

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

    您还可以在 Linux DTS 文件中共享 DSP 存储器的 CMA 区域配置吗?

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

     感谢您的快速回复。   Linux DTS 文件如下所示:

     

    e2e.ti.com/.../6505.dts.7z

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

    在 DTS 文件中、您可以通过以下配置将 Linux 中的 DDR 存储器留出用于 DSP、大小为0x4000000字节的0x99000000。

    dsp1_CMA_pool:dsp1_CMA@99000000{
    兼容="共享 dma-pool ";
    REG =<0x0 0x99000000 0x0 0x4000000>;
    可重复使用;
    状态="正常";
    };

    在 DSP 端链接器命令文件中、必须确保仅在 DDR 中使用该区域。

    此致、
    斯坦利

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

    感谢您的回复、

    现在,我使用 CMEM 在 ARM 和 DSP1之间进行数据传输、我需要传输大约2M 数据。 但发现最大传输为4480Byte (1120 int)。 当数据传输超过时、CMEM 读取的数据将被消息。  我是否需要修改 rsc_table_dsp1.h?或 config.Bld 中的位置?

    rsc_table_dsp1.h:

    #define DSP_MEM_TEXT 0x95000000
    /*与平铺机区域共同定位,以便于冲洗*/
    #define DSP_MEM_IOBUFS 0x8000000
    #define DSP_MEM_DATA 0x95400000
    #define DSP_MEM_HAP 0x98400000 define DSP_MEM_IPC_DATA 0x9F000000

    #define DSP_MEM_IPC_VRING 0xB0000000
    #define DSP_MEM_RPMSG_VRING0 0xB0000000
    #define DSP_MEM_RPMSG_VRING1 0xB0004000
    #define DSP_MEM_VING_BUFS0 0xB0040000
    #define DSP_MEM_VRING_BUFS1 0xB0080000

    #define DSP_MEM_IPC_VRING_SIZE SZ_1M
    #define DSP_MEM_IPC_DATA_SIZE SZ_1M
    #define DSP_MEM_TEXT_SIZE (SZ_1M * 4)
    #define DSP_MEM_DATA_SIZE (SZ_1M * 48)
    #define DSP_MEM_heap_size (SZ_1M * 3)
    #define DSP_MEM_IOBUFS_SIZE (SZ_1M * 90)

    #define DSP_CMEM_IOBUFS 0xA0000000
    #define PHYS_CMEM_IOBUFS 0xA0000000
    #define DSP_CMEM_IOBUFS_SIZE (SZ_1M * 192)

     

    e2e.ti.com/.../dsp1.7z