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.

[参考译文] 编译器/TMS320F28388S:生成 bin 文件太大

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/919753/compiler-tms320f28388s-generate-bin-file-too-large

器件型号:TMS320F28388S

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

您好、专家、

我的客户生成的 bin 文件最大为600M 字节,太大,无法使用,bin 文件包括初始化 RAM 值的信息, 导致如此大尺寸的原因是什么?是否有任何方法可以删除 bin 文件中的 RAM 信息,因为这些信息从未用于减小 bin 文件的大小?

以下是客户发布的代码、是否有针对此问题的任何建议?

e2e.ti.com/.../f2838x_5F00_cpu1_5F00_app_5F00_demo.7z

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

     MSGRAM_CPU_TO_CM_RT 部分已在 链接器命令文件中设置为 NOINIT、但默认情况下 C2000十六进制实用程序似乎不会选择该选项。

    如果您明确将以下内容添加到 C2000十六进制实用程序、则 会从输出中排除 MSGRAM_CPU_TO_CM_RT 部分:

    --exclude=MSGRAM_CPU_TO_CM_RT 

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

    当我构建项目时、不会生成 bin 文件。  因此、我不确定我提出的解决方案是否能够解决问题。  但我有足够的信心提出这一建议。

    在 C 源文件  f2838x_cpu1_allocat_ecat_TO_cm.c 中,更改此代码中的第一行...

    uint32_t IPC_RAM_C28[64]={0};
    #pragma DATA_SECTION (IPC_RAM_C28、"MSGRAM_CPU_TO_CM_RT")
    

    (笑声) 至...

    uint32_t IPC_RAM_C28[64];
    #pragma DATA_SECTION (IPC_RAM_C28、"MSGRAM_CPU_TO_CM_RT")
    

    请注意阵列 IPC_RAM_C28未初始化的情况。   

    链接器命令文件包含此相关行...

    MSGRAM_CM_TO_CPU_RT:> CMTOCPURAM_RT,type=NOINIT 

    由于数组 IPC_RAM_C28是该输入段中的唯一变量、因此此行会有效地分配该变量。  根据当前定义、数组 IPC_RAM_C28会进行初始化、因此无法放置在具有特殊属性 type=NOINIT 的输出段中。  不支持该组合。   我怀疑您不打算对该数组进行初始化。  通过删除={0}、不再对其进行初始化。

    有关将初始化变量与 NOINIT 段组合在一起所导致问题的另一个示例、请参阅 此论坛主题。

    创建 bin 文件时忽略未初始化的段、这可能是您对包含数组 IPC_RAM_C28的段的预期值。

    [引用 user="StrongZhang "]我的客户生成的 bin 文件最大为600M 字节

    当阵列 IPC_RAM_C28错误地初始化时、这会有效地创建一个初始化段、该段在存储器中与所有其他初始化段相隔很长的距离。  无论大小如何、bin 文件表示存储器中的间隙的唯一方法是将其填充为0。  一个副作用是 bin 文件可能非常大。

    谢谢、此致、

    乔治