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.

[参考译文] AM2434:am2434

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1499877/am2434-am2434

器件型号:AM2434
主题中讨论的其他器件:SysConfig

工具/软件:

我是否可以更改 enet_cpsw_udpclient_am243x-lp_r5fss0-0_freertos_ti-arm-clang 示例以从一个 IP 地址接收所有端口地址? 我尝试将端口号更改为0 (所有端口)、但不起作用。

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

    尊敬的 

    感谢您的查询。

    你能提供更多的细节吗?

    此致

    Ashwani

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

    嗨、Goel

    我将套接字绑定到我的静态 IP、这样就可以正常工作、直到我在 python UDP 服务器中更改端口号。

    这是我添加到 UDP 客户端示例中的代码:

    结构体 sockaddr_in local_addr;// 10042025

    local_addr.sin_family = AF_iNet;
    local_addr.sin_port = htons (0);
    local_addr.sin_addr.s_addr = inet_addr ("192.168.1.200");//我的静态 IP  

    if (lwip_bind (sock、(struct sockaddr*)&local_addr、sizeof (local_addr))< 0){
    printf ("绑定失败\n");
    while (1);
    }

    请您就以下问题提供指导:

    如何将 lwIP 配置为使用单个 IP 地址跨多个端口与 UDP 配合使用、并在接收和发送操作之间实现明确的分离?

    这是我问题的核心。 提前感谢您的支持。

    此致、
    Baruch

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

    尊敬的  Baruch:

     

    如果您假定将从任何端口号接收到绑定套接字到0、这将不起作用。 0是保留的端口号。

    是否要打开单个套接字并接收任何与 IP 地址匹配的 UDP 数据包、而不考虑端口号?

    、在接收和发送操作之间有明确的区分?

    您能详细说明一下吗?  

    此致、

    Thilak

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

    您好、 Thilak Karanam

    这正是我想要做的。

    谢谢  

    Baruch

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

    尊敬的 Baruch:

    套接字的概念基于 IP 地址和端口号。 但与广播 MAC 地址和 IP 地址不同、我们不支持广播端口号。 要侦听来自 IP 地址的流量、只要应用程序充当客户端、它就应侦听给定的端口号。

    单个套接字从客户端的给定 IP 接收来自所有端口号的数据包的想法看起来像一种非常规的方法。 您能帮助我更好地了解用例吗、以便我们可以了解替代方法吗?

    此致、

    Teja。

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

    尊敬的 Teja

    在单个以太网 IP 地址上使用 UDP 时、我目前只能一次接收一条消息。 理想情况下、如果我可以同时从所有端口捕获消息、我可以通过软件高效地筛选和管理它们。 现有的解决方案需要为每个端口创建一个单独的线程、对于我的 AM243x LP 卡来说、这种解决方案占用的资源太多。

    我尝试使用 PCB 通过回调例程处理输入接收、但遗憾的是、我尚未成功。 这一问题的原因仍不清楚。 我已经在 E2E 论坛上提出了这个问题、但到目前为止尚未收到任何有用的回复。

    最好的照顾

    Baruch

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

    尊敬的 Baruch:

    会议结束后、我知道您需要接收给定 IP 地址的 UDP 流量、并通过共享内存将基于端口的后续数据传递给多个内核。 如果每个核心都具有唯一的 IP (如果要在每个核心上运行的进程数量必须是可扩展的)、我建议这样做会更好。 您可以在此处查看一个示例、该示例演示了类似的功能: https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/latest/exports/docs/api_guide_am64x/EXAMPLES_ENET_INTERCORE_ICSSG.html

    或者、 当您 使用并行运行的更多线程时、可以增加任务大小。 您可以在以下位置增加可用于 FreeRTOS 的栈大小。 请查找 MAIN_TASK_SIZE: source/networking/enet/core/examples/lwip/enet_cpsw_udpclient/am243x-lp/r5fss0-0_freertos/main.c

    同时、让我来评估您可以在不 增加每个新端口的开销的情况下使用的其他选项。

    此致、
    Teja。

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

    尊敬的 Teja:

    我不接受运行 lwIP 和 FreeRTOS 的两个实例的想法、因为在使用 AM243X-LP 的当前工作环境中、我受到内存限制的严重限制。

    为了有效地管理我的内存限制、我已将应用程序配置为仅使用核心 R00来处理四个具有单个 IP 地址的端口上的 UDP 通信。 您的建议涉及使用两个 IP 地址和一个端口、但遗憾的是、这与我的要求不符。

    R01来处理 UART 接口。

    我遇到的主要问题是,在我的线程中添加额外的代码后,它会在后续系统调用时中止lwip_recvfrom,例如(仅成功执行一次)、IpcNotify_sendMsgSemaphoreP_post。 当我尝试调试时、线程会在重新进入循环或到达lwip_recvfrom调用处设置的断点时立即崩溃。

    我已经尝试增加MAIN_TASK_SIZE,但这带来了更多的问题,我目前正在进一步调查.

    您能告诉我如何才能最好地继续吗?

    谢谢您、

    Baruch

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

    尊敬的 Teja:

    增加 MAIN_TASK_SIZE 更改并将 default_thread_STACKSIZE 减少 为3K 可解决我的4个线程的问题现在、我将尝试激活5个线程和5个套接字

    谢谢

    Baruch.  

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

    尊敬的 Baruch:

    这是在 LwIP 库中设置的配置。 默认情况下、我们支持4个并行活动连接。 您可以通过调整 lwipopts.h 文件中的参数"MEMP_NUM_UDP_PCB"来增大该限值。 您可以在<($MCU_PLUS_SDK)/source/networking/lwip/lwip-config/am243x/lwipopts.h >处找到此文件

    /* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
       per active UDP "connection". */
    #define MEMP_NUM_UDP_PCB        4 // Increase this to the required number

    通过将此数字增加到所需的数字、可以一次打开超过4个套接字、这是默认值

    此致、
    Teja。

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

    尊敬的 Tega:

    我尝试了两个建议的更改、但我仍然无法声明更多套接字。 我附上了我为您的评论所做的修改。

    以下是我的相关章节lwipopts.h

    #define MEMP_NUM_RAW_PCB 6 // One per active UDP connection #define MEMP_NUM_UDP_PCB 6 // Previously: 5 // Number of simultaneously active TCP connections #define MEMP_NUM_TCP_PCB 6 // Previously: 5

    而从我的开始main.c:

    #define MAIN_TASK_SIZE (49152U / sizeof(configSTACK_DEPTH_TYPE)) // Previously: #define MAIN_TASK_SIZE (16384U / sizeof(configSTACK_DEPTH_TYPE))

    尽管进行了这些更改、但当我尝试创建第5个套接字时、软件会返回错误。

    此致、
    Baruch

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

    尊敬的 Baruch:


    理想情况下、您所做的更改应能解决该问题。 我尝试在设置中重新创建它。 由于我现在正在作出另一项承诺、我将在5月12日之前向你们提供最新情况。

    谢谢。此致、
    Teja。

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

    尊敬的 Baruch:

    我已经测试了应用程序打开4个以上的与 UDP 并行连接。 除了将 MEMP_NUM_UDP_PCB 增加到6之外、我还必须增加堆大小以满足额外的动态存储器要求。 您可以通过 syscfg-GUI 工具增加 FreeRTOS 堆栈大小。 请查找 Memory Configurator> General> Stack Size 和 Heap Size。 请更新栈和堆大小、重新编译库和示例。

    如果您遇到任何其他问题、请告知我们。

    此致、
    Teja。

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

    尊敬的 Teja:

    尝试增加MEMP_NUM_UDP_PCB6个、我已达到 SysConfig 中设置的最大内存限制、并且无法 FreeRTOS 分配额外的内存。 尝试增加和堆大小,尝试创建第五个套接字,失败了,错误。

    目前、只处理客户端的4个套接字我正在等待一种解决方案要么使用 DDR4在下一个电路板上支持10个以上的插座、要么采用一种 PCB 用于回调例程的有效方法。

    此致、
    Baruch


    知道您是否希望它的措辞具技术性、正式性或随意性。

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

    尊敬的 Baruch:

    系统中是否没有可用的 MSRAM 内存? 如果是,那么它将是一个更好的调用等待,直到你可以工作的板与 DDR 因为我已经验证了打开超过5个插座的可行性在一个时间.

    但我仍然建议您考虑是否可以为每个内核分配唯一的 IP、因为这是获得可扩展性的更好选择、并且内存影响较小。 在 MCU+ SDK 中、通过内核之间的共享存储器路由以太网流量的驱动程序已提供、但您必须为 AM243x 启用该驱动程序、因为该示例开箱即用。

    此致、
    Teja。

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

    尊敬的 Teja:

    下个月我将迎来一个重要的里程碑。 目前、我使用一个 IP 地址管理五个以上的套接字、尽管我目前使用四个。 以太网处理由内核 R00管理、我正在高效利用共享内存(MSRAM 的一部分)用于所有以太网 UDP 缓冲区、而无需额外的复制。

    我采用 IP Notify 来传输28位数据、其中包括存储的缓冲区索引  8.每个位。  在共享、不可缓存的存储器中、以及专用于参数的额外12位。 同时、内核 R01管理 UART 通信、每个通信都具有专用的64字节缓冲器、支持高达3Mbps 的数据速率、并且响应时间非常短。

    我现在准备向我的客户端演示 AM2434的功能。 我对保护一个重要项目感到乐观、这将使我能够设计自己的包含 DDR4内存的硬件解决方案。 到目前为止、我的共享存储器策略和 IPC Notify 消息传递概念已被证明非常有效。

    此致、  

    Baruch

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

    尊敬的 Baruch:

    我现在准备向我的客户端演示 AM2434的功能。 我对保护一个重要项目感到乐观、这将使我能够设计自己的包含 DDR4内存的硬件解决方案。 到目前为止,我的共享内存策略和 IPC Notify 消息传递概念已经证明非常有效。[/报价]

    感谢您的更新、我希望在演示过程中您不会再遇到其他问题。 如果您遇到任何问题、请告诉我。

    谢谢。此致、
    Teja。