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.

[参考译文] TM4C1294NCPDT:二进制文件问题

Guru**** 2561910 points
Other Parts Discussed in Thread: TM4C1294KCPDT, EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/983549/tm4c1294ncpdt-binary-file-issue

器件型号:TM4C1294NCPDT
主题中讨论的其他器件:TM4C1294KCPDTEK-TM4C1294XL

您好!

 我正在使用 TCP 回显示例(TI -RTOS)、并对其进行了修改以用于客户端连接、还添加了通过以太网发送的 ADC 数据、这种情况很好。 但是、当我要在独立(自定义 PCB) 系统上进行测试时、我需要将二进制文件加载到 MCU 中、当我生成二进制文件时、其大小超过512MB 且太大。 我还生成了十六进制文件并加载它、但 MCU 不执行它。 MCU 仅在调试模式下工作正常。 因此 、请您帮助正确生成二进制文件  

TI-RTOS 版本2.16.0.14

GNU 编译器版本7.2.1 Linaro

CCS 版本9.1

e2e.ti.com/.../tcpEcho_5F00_EK_5F00_TM4C1294XL_5F00_GNU.zip

我正在连接整个项目

请帮助

此致

霍迪达斯

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

    R & D 说:
    MCU 仅在调试模式下工作正常。

    原因是该项目启用了半托管支持。 请参阅 有关 EK-TM4C123GXL 的 GNU 示例、除非连接了调试器 以使主机禁用半宿主、否则无法启动。

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

    问题是.stack 和.vtable 段是已初始化的段、而不是未初始化的段。  此外、这些已初始化的段被分配到 SRAM 中、其地址与闪存中所有其他已初始化段非常远。  如 本论坛博文所述、初始化段之间二进制文件中的任何空洞都必须填充为0。  这就是 bin 文件太大的原因。

    那么、问题会简化为:为什么要初始化.stack 和.vtable 段?  我可以解释初始化它们的原因。  我无法告诉您如何解决它。

    这两个段都是在 C 文件  tcpEcho_pm4fg.c 中创建的 此 C 文件将自动生成。  创建.stack 段的行是...

    XDC_UChar ti_platforms_Tiva_stack[2048]__attribute__(aligned (8)、section (".stack")));
    

    此代码使 GCC ARM 编译器生成一个名为.stack 的初始化段。  相比之下、TI ARM 编译器会为此相同代码创建一个未初始化的段。  

    出于同样的原因、.vtable 段也会发生同样的情况。

    我不确定如何解决此问题。  我将向其他专家通报此主题。

    谢谢、此致、

    乔治

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

    由于相同的原因、.vtable 段也会发生同样的情况。

    我认为 适用于 GCC 编译 器的 TI RTOS 示例生成512MB bin 文件说明了.vtable 段和变通办法的问题。 我还没有尝试过解决方法。

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

    我更改了:

    允许在未连接调试器的情况下工作。

    a.在 tcpEcho.cfg 中、注释掉 SemiHostSupport:

    if (Program.build.target.$name.match (/GNU/)){
    //禁用以允许在未连接调试器的情况下工作
    // var SemiHost = xdc.useModule('ti.sysbios.rts.gnu.SemiHostSupport');
    } 

    b.在 CCS Project Properties 中、CCS Build -> GNU Linker -> Libraries -> Libraries 使用 "nosy"而不是 "rdimon"库。

    2.为了减小 tm4c1294kcpdt.lds 中 bin 文件的大小、请将(NoLoad)添加到 .vtable 和.stack 段。

    将从

    .vtable (_vtable_base_address):at (_vtable_base_address){
    保留(*(.vtable)
    )} > region_data 
    .stack:align (0x8){
    _stack =.;
    _stack =.;
    Keep(*(.stack))
    } > REGASE_STACK 

    至:

    .vtable (_vtable_base_address)(NoLoad):at (_vtable_base_address){
    保留(*(.vtable)
    )} > region_data 
    .stack (NoLoad):align (0x8){
    _stack =.;
    _stack =.;
    Keep(*(.stack))
    } > REGASE_STACK 

     tcpEcho_EK_TM4C1294XL_GNU.bin 文件的大小从536,946,000字节减少到151,352字节。

    我将修改后的项目编程到 EK-TM4C1294XL 中、并检查以太网接口在复位电路板后是否响应、在获取的 IP 地址和 ping 中是否响应。

    修改后的工程已附加。  e2e.ti.com/.../7382.tcpEcho_5F00_EK_5F00_TM4C1294XL_5F00_GNU.zip

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

    切斯特、您好!

     非常感谢您参与修复。  

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

    感谢您生成的项目,它运行良好,但通过从 CCS 加载*.out 文件,但刷写*.bin 文件会显示错误 ,无法读取未定义的属性“S”。

    我的目的是以任何方式得到解决的。

    此致

    霍迪达斯