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.

[参考译文] CCS/SW-EK-TM4C1294XL:TM4C1294XL NDK

Guru**** 2455360 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/626260/ccs-sw-ek-tm4c1294xl-tm4c1294xl-ndk

器件型号:SW-EK-TM4C1294XL

工具/软件:Code Composer Studio

我们下载了 NDK 2.25.1.11、并希望在我们的项目 TCPEcho 中使用它或查看 NDK 示例。 是否存在我们可以在 CCS 中导入的 TM4C1294XL 示例? 我们找到了 ARM9的示例、而不是 ARM4的示例。 您能否描述如何将 NDK 整合到 TCPEcho 示例中的步骤或链接到说明如何操作的文档?

我们的目的是减小 TCP 堆栈中的 SRAM 大小。

谢谢、Sabina

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

    您好、Sabina、

     您是否尝试从 Resource Explorer 导入 TM4C 的 TCP 回显示例?

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

    是的、我执行了该操作并获取 tcpEcho_EK_TM4C1294X。 但其 SRAM 为0x0000fff0。 我们希望使用通过 NDK 库减少 SRAM。 我们下载了 NDK 2.25.1.11、并希望使用其 TCP 堆栈(应该小一点)。

    我想使用 NDK 库编译工程。 如何将项目引用到 NDK 库?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我不太清楚 SRAM 的含义是0x0000fff0。 这是 NDK 用户指南的链接。 www.ti.com/.../spru523j.pdf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    未进行优化的 NDK 使用巨型数据包缓冲管理器(Jumbo Packet Buffer Manager, Jumbo PBM)对象
    用于管理我们的应用不需要的大内存段。

    取自 TI 网络开发者套件(NDK) v2.21 API
    参考指南

    "
    NDK OS 抽象层(OS AL)中提供了巨型 PBM 的实现示例。 。
    客户应根据其应用需求和自定义此实现方案
    系统的存储器限制。 存储器段大小、块大小和分配方法都是这样
    进行定制。
    "

    我们不需要巨型 PMB,我们应该如何禁用它?

    过去、我们从 TI 为 Concerto 提供的特殊 NDK 中获得的 NDK 占用空间极小。 现在、我们需要对 TM4C1294XL 执行相同的 TCP 堆栈缩减。 我们能否从您那里获得用于最大限度减小 TM4C1294XL NDK 占用空间的网络设置
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我已将您的问题转发给我们的 TI-RTOS SME。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    TI-RTOS 中用于 TivaC v2.16.01.14的 NDK 版本为 v2.25.00.09、非常接近 NDK 2.25.1.x。 最后一个数字是内部版本号、第三个数字是修补程序号。 主要数字和次要数字保持不变、因此这意味着它向后兼容。

    您可以使用此新 NDK。 您必须在“项目属性”->“常规”->“产品”中选择该版本的 NKD。  

    然后展开 TIRTSTIVAC_REpos 行、并将新 NDK 向上移动到旧的 NDK 上方。 在构建过程中、将使用较新的版本。

    我建议查看此页面以了解有关 NDK 存储器管理的更多详细信息:  

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

    您好!

    我们有所有这些定义、但仍然无法减小 SRAM 大小:使用/不使用 NDK 时使用的是相同的:

     

    我们认为 使用的 NDK 应减小 SRAM 大小。 不正确吗?

     

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

    一些配置会影响全局缓冲区、另一些会影响从堆中分配的项目的大小。 如果减小后者(堆中)中项目的大小、则可以相应地减小堆。 这可以减少 SRAM 的使用。

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

    由于我们的更改,我们看到:

    在我的代码中、我看到更改的值:

    void ti_ndk_config_tcp_init (句柄 hCfg)


    int transmitBufSize = 512
    CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKTCPTXBUF、
    CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&transmitBufSize、0);


    int receiveBufSize = 512
    CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKTCPRXBUF、
    CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&receiveBufSize、0);


    int receiveBufLimit=1024
    CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKTCPRXLIMIT、
    CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&receiveBufLimit、0);




     但我们看不到 SRAM 发生变化。 应进行哪些更改来减少 SRAM 存储器?  请举个例子。

    谢谢、

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

    通过上述更改,映射文件中的大小是相同的,但您可以查看 Tools->ROV->HeapMem->Detailed,您将看到堆中有更多可用内存。

    例如,我在 tcpWorker()函数中的 send()上设置了一个断点,并运行 TCP 回显示例,而不进行任何更改。 我在 tcpSendReceive.exe 工具上使用了-l256。 当我到达断点时、我查看了 HeapMem。 有12640个空闲字节(20480中)。 当我进行了您所做的更改并执行了完全相同的操作时、堆中有13664个空闲字节。

    如果您想以较小的大小回收某些存储器、则需要减小堆大小。

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

    是否可以 降低 SRAM? 现在、TCP 占用25%的 SRAM 大小 ( 从262144字节开始为65520字节)

     删除 UDP 后,我们得到相同的 SRAM 大小....

    我们可以对减少 SRAM 执行什么优化

    谢谢、

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

    请听我说。

     我们可以对减少 SRAM 执行什么优化?

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

    您是否尝试过减小堆大小? 正如我说过的那样、如果你减少一些 NDK 设置、堆使用量将会更小、但是你需要减小堆大小(通过.cfg 文件中的 BIOS.heapSize)。

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

    不、我看不到这些更改。

    根据我们的更改(TCPSend/Receive buffer size = 512) => BIOS.heapSize = 20480;

    无变化(TCPSend/Receive buffer size = 1024):=> BIOS.heapSize = 20480;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要更改它。 打开.cfg 文件、减小大小、保存并重建应用程序。

    可以在目标运行时使用 Tools->ROV->HeapMem 来查看使用了多少堆。 要获得高水位峰值、您可以使用 HeapTrack。 此页面详细介绍了其使用情况: training.ti.com/debugging-common-application-issues-ti-rtos

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    现在看来这是清楚的。 我从20480手动更改了 BIOS.heapSize = 18000。 现在、我看到了变化。 因此,应手动进行更改。 感谢您的帮助!

    tcpEcho 示例不使用 NDK。
    在哪里可以找到 NDK 使用的示例?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    tcpEcho 示例使用 NDK。 NDK 是用于 TivaC 的 TI-RTOS 的一部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的帮助。现在、这种帮助要清晰得多。

    所有安装完成后、我会看到两个不同的 socket.h 文件:

    TI\tirtos_tivac_2_16_00_08\products\NDK_2_25_00_09\packages/ti\NDK\inc\socket.h

    \ti_tirtos_tivac_2_16_00_08\products\NDK_2_25_00_09\packages/ti\NDK\inc\bsd\sys\socket.h

    这些文件是不同的。

    tcpEcho 示例使用.bsd\sys\socket.h

    我的项目使用 NDK\inc\socket.h

    应使用什么文件?  

    在 tcpEcho 示例 NDK 中、网络打开挂钩并 动态创建 tcpHandler 任务。  

    我尝试在我的应用程序中使用相同的机制-在这里、两 个 socket.h 文件之间会发生冲突。

    谢谢、Sabina

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

    ti\NDK\inc\socket.h 文件是 NDK 的 socket.h 文件。 它已经存在很长时间了。 它不是100% BSD 兼容、但它是我们开始使用的。 对于使用它的旧应用程序、或者对于使用它的某些功能不在 BSD 1中的应用程序(例如用于"无复制"的 NC 函数)、我们会保留它。

    ti\ndk\inc \bsd\sys\socket.h 与 BSD 兼容。

    您不能在同一文件中同时包含这两个文件。 您需要选择一个或另一个。

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

    谢谢!