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.

[参考译文] TMDSCNCD28388D:RAM 内存外的 LWIP 程序

Guru**** 2539130 points
Other Parts Discussed in Thread: C2000WARE, SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1170249/tmdscncd28388d-lwip-program-out-of-ram-memory

器件型号:TMDSCNCD28388D
Thread 中讨论的其他器件:C2000WARESYSBIOS

你好。
我目前正在 LWIP 的 SYS/BIOS 上实施 TCP 通信。
由于编译期间发生了内存不足错误、我计划通过在 cmd 文件中映射位带 RAM 区域来使用它。
用户是否可以使用此存储器区域?
如果不可能、我应该如何映射它?
谢谢你。

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

    您好!  

    哪些段不能放入存储器? 它只是.bss 段吗?  

    您是否尝试将其分配给存储器的多个部分?

    您能否共享您正在使用的链接器 cmd 文件?  

    此致

    Siddharth

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

    您好 Siddharth。
    我想知道用户是否可以使用 tms320f28386d-1949390.pdf 中提到的 CM 内核存储器映射中的"位带 RAM 区域"。
    .bss 和.binit 无法进行内存分配。
    原因是.bss .common:memp_memory_PBUF_pool_base 占用243KB 容量。
    我认为将这个部件分配给"位带 RAM 区域"将解决这个问题。
    然而、在创建一个 SYS/BIOS 项目时、在缺省.cmd 文件中、没有针对"位带 RAM 区域"部分的内存分配的说明。
    这就是为什么我问的原因、因为我不知道我是否可以使用它。
    以下是.cmd 文件的说明。

    假定从闪存读取、因此它已从默认值进行更改。
    谢谢你。

    /*
    *版权所有(c) 2018、德州仪器(TI)公司
    *保留所有权利。
    *
    *以源代码和二进制形式重新分发和使用、有无
    *如果满足以下条件、则允许进行修改
    符合*:
    *
    **源代码的重新分发必须保留上述版权
    *注意、此条件列表和以下免责声明。
    *
    **二进制形式的再发行必须复制上述版权
    *请注意、中的此条件列表和以下免责声明
    *随分发提供的文档和/或其他材料。
    *
    **德州仪器公司的名称和名称均不相同
    *其贡献者可用于认可或推广衍生产品
    *未经特定的事先书面许可。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *以及任何明示或暗示的保证、包括但不限于:
    *特定适销性和适用性的隐含保证
    *不承认目的。 在任何情况下、版权所有者不得或
    *派遣国应对任何直接、间接、偶然、特殊、
    *典型或必然的损害(包括但不限于
    *采购替代货物或服务;丧失使用、数据或利润;
    *或业务中断)、无论原因是什么以及任何责任理论、
    *无论是合同、严格责任还是侵权行为(包括疏忽或)
    *否则)因使用本软件而以任何方式产生、
    *即使被告知可能会发生此类损坏。
    *

    存储器

    /*闪存扇区*/
    CMBANK0_RESETISR:origin = 0x00200000,length = 0x00000008 //引导项*/
    CMBANK0_SECTOR0:origin = 0x00200008、length = 0x00003FF7
    CMBANK0_SECTOR1:origin = 0x00204000、length = 0x00004000
    CMBANK0_SECTOR2:origin = 0x00208000、length = 0x00004000
    CMBANK0_SECTOR3:origin = 0x0020C000、length = 0x00004000
    CMBANK0_SECTOR4:origin = 0x00210000、length = 0x00010000
    CMBANK0_SECTOR5:origin = 0x00220000,length = 0x00010000
    CMBANK0_SECTOR6:origin = 0x00230000,length = 0x00010000
    CMBANK0_SECTOR7:origin = 0x00240000,length = 0x00010000
    CMBANK0_SECTOR8:origin = 0x00250000,length = 0x00010000
    CMBANK0_SECTOR9:origin = 0x00260000,length = 0x00010000
    CMBANK0_SECTOR10:origin = 0x00270000,length = 0x00004000
    CMBANK0_SECTOR11:origin = 0x00274000,length = 0x00004000
    CMBANK0_SECTOR12:origin = 0x00278000、length = 0x00004000
    CMBANK0_SECTOR13:origin = 0x0027C000、length = 0x00004000

    C1RAM:origin = 0x1FFFC000、length = 0x00001FFF
    C0RAM:origin = 0x1FFFE000、length = 0x00001FFF

    /* S0的一部分、引导 ROM 将此用于堆栈*/
    BOOT_RSVD:origin = 0x20000000,length = 0x00000800
    S0RAM:origin = 0x20000800,length = 0x0000F7FF
    E0RAM:origin = 0x20010000、length = 0x00003FFF

    CPU1TOCMMSGRAM0:origin = 0x20080000,length = 0x00000800
    CPU1TOCMMSGRAM1:origin = 0x20080800,length = 0x00000800
    CMTOCPU1MSGRAM0:origin = 0x20082000,length = 0x00000800
    CMTOCPU1MSGRAM1:origin = 0x20082800,length = 0x00000800
    CPU2TOCMMSGRAM0:origin = 0x20084000,length = 0x00000800
    CPU2TOCMMSGRAM1:origin = 0x20084800,length = 0x00000800
    CMTOCPU2MSGRAM0:origin = 0x20086000,length = 0x00000800
    CMTOCPU2MSGRAM1:origin = 0x20086800,length = 0x00000800

    部分

    .resettisr:> CMBANK0_RESETISR
    .vftable :> CMBANK0_SECTOR0 /*应用矢量表闪存*/
    .vtable:>S0RAM /*应用程序矢量表 RAM */
    .text:>> CMBANK0_SECTOR0 | CMBANK0_SECTOR1 | CMBANK0_SECTOR2 |
    CMBANK0_SECTOR3 | CMBANK0_SECTOR4 | CMBANK0_SECTOR5
    .cinit:> CMBANK0_SECTOR0 | CMBANK0_SECTOR1 | CMBANK0_SECTOR2 |
    CMBANK0_SECTOR3 | CMBANK0_SECTOR4 | CMBANK0_SECTOR5
    .pinit:> CMBANK0_SECTOR0 | CMBANK0_SECTOR1
    binit:> CMBANK0_SECTOR0 | CMBANK0_SECTOR1
    .switch:>> CMBANK0_SECTOR0 | CMBANK0_SECTOR1
    .sysmem:> S0RAM
    .stack:> C1RAM
    .ebss:> C1RAM
    econst :>> CMBANK0_SECTOR0 | CMBANK0_SECTOR1 | CMBANK0_SECTOR2 |
    CMBANK0_SECTOR3 | CMBANK0_SECTOR4 | CMBANK0_SECTOR5
    .esysmem:> C1RAM
    .data :> S0RAM
    .bss:> S0RAM
    .const:{}负载= CMBANK0_SECTOR0 | CMBANK0_SECTOR1 | CMBANK0_SECTOR2 |
    CMBANK0_SECTOR3 | CMBANK0_SECTOR4 | CMBANK0_SECTOR5、
    运行= S0RAM、
    Load_start (constLoadStart)、
    load_size (constLoadSize)、
    Load_End (constLoadEnd)、
    RUN_START (constRunStart)、
    run_size (constRunSize)、
    RUN_END (constRunEnd)

    MSGRAM_CM_TO_CPU1:> CMTOCPU1MSGRAM0,type=NOINIT
    MSGRAM_CM_TO_CPU2:> CMTOCPU2MSGRAM0,type=NOINIT
    MSGRAM_CPU1_TO_CM:>CPU1TOCMMSGRAM0,type=NOINIT
    MSGRAM_CPU2_TO_CM:> CPU2TOCMMSGRAM0,type=NOINIT

    .TI.ramfunc:{}负载= CMBANK0_SECTOR0 | CMBANK0_SECTOR1、
    运行= S0RAM、
    Load_start (RamfuncsLoadStart)、
    load_size (RamfuncsLoadSize)、
    Load_End (RamfuncsLoadEnd)、
    RUN_START (RamfuncsRunStart)、
    run_size (RamfuncsRunSize)、
    RUN_END (RamfuncsRunEnd)、
    对齐(8)

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

    您好,  

    我 不确定 位带 RAM 区域。  

    您可以尝试组合多个 RAM 段来分配.bss、

    对于 e.g:

    .bss:> S0RAM | E0RAM  

    此致

    Siddharth

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

    您好 Siddharth。
    他的250p 中提到了位带 RAM 区域、PDF (https://www.ti.com/lit/gpn/tms320f28388d)。
    如本 PDF 中所述、S0RAM 至 S3RAM 各具有16KB 的容量、E0RAM 也具有16KB 的容量、因此与所需的容量相差甚远。
    因此、我想同时使用容量为32MB 的位带 RAM 区域和 SRAM 来分配存储器。
    谢谢你。

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

    您好!  

    我以前没有使用位带 RAM 区域、因此无法对其进行注释。  

    您可以尝试一下。 同时,我将尝试获得更多有关它的详细信息。

    此致

    Siddharth

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

    您好!
    感谢您的回答。
    我现在正在编辑链接器文件、但我想在.bss 段中单独映射.bss 段和.common 段。 这是可行的吗?
    暂时将所有.bss 段放在位带 RAM 区域中以检查操作。
    如果您能告诉我您有更多信息、我将不胜感激。
    谢谢你。

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

    您好!  

    我认为您无法拆分.bss 段。   

    .bss 公共段的数据是位于单个文件中还是跨文件传播?  

    此致

    Siddharth

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

    你好。

    我将位带 RAM 区域映射到.cmd 文件。

    之后、我指定将.bss 段映射到 S0RAM 和位带 RAM 区域。

    它的映射如下图所示、并且项目能够成功构建。

    为了检查操作、我在编译后进行了调试、但 发生了类似这个线程的错误、调试没有继续。
    我一直处于无法设置断点和暂停调试的状态。
    我已经尝试过该主题中的解决方案、但无法解决问题。

    我不知道如何解决它、因为我正在使用 SYS/BIOS 的环境下进行调试。

    谢谢你。

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

    您好!  

    将此查询转发给 CCS 团队、以便他们可以帮助您调试此问题。   

    此致

    Siddharth

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

    你好

    [引用 userid="540930" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1170249/tmdscncd28388d-lwip-program-out-of-ram-memory/4407243 #4407243"]为了检查操作、我在编译后进行了调试、但 发生了类似此线程的错误、调试未继续。
    我一直处于无法设置断点和暂停调试的状态。

    屏幕截图中有几个错误。 关于缺少断点资源的错误、我认为这是不同问题的症状、而不是根本原因。 与使用程序 F28x 器件相比、F28388D 应该具有更多的硬件断点资源。

    这些断点资源错误是何时发生的? 在您按下"Debug"后? 或者您是否手动尝试自行设置其他断点?

    更严重的问题和根本原因可能是 器件锁定在硬件故障或 NMI 错误中。 有关更多详细信息、请参阅以下文章:

    https://dev.ti.com/tirex/explore/node?node=A__ANoamrIZPWD2-6T-NDDWGg__ccs_devtools__FUz-xrs__LATEST

    搜索上述文章中的"器件已锁定"部分。

    您是否对其他应用有任何问题、例如 C2000Ware 中的标准示例?

    谢谢

    Ki

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

    你(们)好
    当我再次调试时、它看起来像是开始调试后立即出现的第一个映像、然后重新启动 CM 内核并按 CPU1和 CM 内核的顺序执行。

    之后、当我停止每个调试操作时、引用的地址会变为0、如第二个映像中所示。

    当我在 SYS/BIOS 典型项目中调试每个项目而不进行编辑时、我能够确认它们是否正常工作。

    您的项目可能存在哪些问题?

    我想继续调查这一原因。

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="540930" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1170249/tmdscncd28388d-lwip-program-out-of-ram-memory/4411128 #4411128"]当我在 SYS/BIOS 典型项目中调试每个项目而不进行编辑时,我能够确认它们是否正常工作。

    修改后的工程在将目标置于不良状态时会出现一些问题、从而导致各种断点问题。 调试修改后的项目超出了我的专业知识范围。 我将让器件专家进一步评论。

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

    您好!  

    您可以尝试单步执行并查看执行流程。 不确定导致此问题的原因。

    此致

    Siddharth

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

    你好。

    调试时会出现以下错误、这是否有问题?

    Cortex_M4_0:只有 CPU1片上闪存插件可以为 CPU1、CPU2和 CM 闪存操作配置时钟。 当调用 CPU1闪存操作时、插件会自动配置 PLL。 操作、在调用 CPU2和 CM 闪存操作之前、他们应单击 CPU1的片上闪存插件中的"配置时钟"按钮。 使用此按钮时、Flash 插件将使用 INTOSC2作为时钟源、将 CPU1/CPU2的时钟配置为190MHz、将 CM 配置为95MHz。 插件将像这样保留 PLL 配置、用户应用应根据应用的要求配置 PLL。

    此外、另一个工程的.out 文件被分配给 CPU1和 CM 内核并执行、但在 CM 内核运行过程中启动调试。
    这件事是否有任何问题?
    谢谢你。

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

    您好!  

    将.out 文件加载到 CM 内核后,可以尝试设置一些断点,并查看执行是否继续。 您必须缩小导致器件发生硬件故障的位置/代码/函数的范围。

    此致

    Siddharth

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

    这是一个很天真的问题、但当当前使用 RTOS 执行 TCP 通信时、哪一个更好、NDK 或 LWIP?

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

    您好!

    请注意、TI NDK 不再受有效支持、因此不会对任何 TI NDK 问题提供技术分析。   

    如果您使用的是 RTOS、建议您使用 FreeRTOS。

    此致

    Siddharth

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

    同时使用 CM 内核和 C28x 内核时、是否最好将 C28x 内核配置为使用 SYSBIOS 和 CM 内核以使用 FreeRTOS?
    还是最好使用 FreeRTOS 配置所有内容?

    此外、我找不到有关用于28388的 FreeRTOS 的信息、请提供。

    谢谢你。

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

    您好!  

    我认为最好在两个内核上都安装 FreeRTOS。  

    目前、C2000Ware 中没有带 FreeRTOS 的 LWIP 示例。 但是、最新版本的 C2000Ware (v4.02.00.00)中增加了对 C28x 和 CM 内核的 FreeRTOS 支持。 F28388包含几个演示。  

    此致

    Siddharth

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

    自从我开始讨论主题后、我将为 FreeRTOS 问题打开一个新主题。
    非常感谢。