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:运行时静态 IP 不会在 ti-RTOS 上发生变化

Guru**** 2562040 points
Other Parts Discussed in Thread: TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/885289/tm4c1294ncpdt-run-time-static-ip-is-not-changing-on-ti-rtos

器件型号:TM4C1294NCPDT

您好,

我正在  TIRTOS 环境中使用 Tiva、TM4C1294NCPDT MCU 进行项目、并将 NDK 模块用于 TCP 客户端应用。 我的应用程序使用静态 IP 连接、我将此地址输入到.cfg 文件中。 TCP-echo 应用程序可以与在.cfg 文件上输入的任何 IP 地址配合使用。

但我想更改要在运行时输入的 IP。 我已经完成了以下操作、这些操作已发布在您的一个门户上、并已尝试、但未与新 IP 连接。 。

  1. 对于'readIPAddr()',使用 NDK 挂钩“网络打开挂钩”而不是“堆栈开始挂钩”
  2. 查找并删除最初添加的静态 IP 地址(从接口取消绑定)
  3. 添加新 IP 地址(绑定新 IP 地址)

这是我用于执行此操作的更新代码(涵盖上面的步骤2 + 3)。  您可以将其更改为读取和使用 ROM 中的 IP 地址:


   CI_IPNet NA;
   句柄     hCfgIpAddr;

   /*设置手册 IP 地址*/
   bzero (不适用、sizeof (不适用));
   na.ipaddr = inet_addr ("172.16.10.2");
   na.ipMask = inet_addr ("255.255.255.0);
   strcpy (na.Domain、"demo.net");
   NA.NetType = 0;

   /*获取当前静态 IP 条目*/
   CfgGetEntry (0、CFGTAG _IPNet、1、1、&hCfgIpAddr);

   /*删除当前静态 IP 条目*/
   CfgRemoveEntry (0、hCfgIpAddr);

   /*添加新的静态 IP 条目*/
   CfgAddEntry (0、CFGTAG _IPNet、1、0、
           sizeof (CI_IPNet)、(uint8 *)&nA、0);

我在 netOpenHook 函数(TCP-eco 示例代码)上添加了上述例程、该函数已是网络开放式挂钩函数。

在控制台上显示以下内容,其中172.16.10.1是.cfg IP 地址,172.16.10.2是新 IP。

网络已添加:if-1:172.16.10.1

网络已删除:if-1:172.16.10.1

网络已添加:if-1:172.16.10.2

奇怪的是、这个新 IP 在 cmd 提示符下获得 ping 命令、但当连接到超级终端时、它未连接。 ACCEPT 函数不返回连接。 为什么会这样? 当上述 routin 是 netOpenHook 函数的注释形式时,它连接到.cfg IP 地址(即172.16.10.1)

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

    尊敬的 Anushka:

    我想澄清一些问题。 您的目标设备具有您在 .cfg 文件中手动分配的 IP。 您希望在运行时分配不同的静态 IP 地址。

    1. "何时连接到未连接的超级终端"是什么意思? 您是否使用超级终端运行 tcpSendReceive 应用程序?
    2. 哪个接听呼叫失败? 它是  tcpEcho.c 中 tcpHandler 内部的调用吗?
      1. 如果是、在使用*。cfg 静态 IP 地址时、您是否说您的 tcpHandler 接受调用成功、并且您可以在 PC 和目标之间成功来回回显消息?

    最棒的
    Brandon

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

    1) 1)"连接到未连接的超级终端时"是什么意思? 您是否使用超级终端运行 tcpSendReceive 应用程序?

    是的、我们将超级终端用作 tcpsendreceiver 应用程序。 在运行时更改 IP 时、客户端和服务器之间不会建立连接。  

    2) 2)哪个接听呼叫失败? 是    tcpEcho.c 中 tcpHandler 内部的调用

    是 tcpecho.c 中的 tcpHandler  

    每次尝试使用新 IP 进行连接时,此接受函数都会接受连接并将连接 ID 返回为 clientfd。 只要 IP 在运行时发生更改、此操作就不会返回任何结果。  

    我已附加  tcpEcho.c tcpechooks.c 文件。 我只想在运行时更改 IP。 我的应用程序是静态客户端基础应用程序、其中 PC 是服务器。(因为我们连接到超级终端)。  

    e2e.ti.com/.../7776.tcpEcho.c

    e2e.ti.com/.../tcpEchoHooks.c

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

    尊敬的 Anushka:

    感谢您提供代码。 您是否在运行时尝试过使用其他 IP 地址?

    只要选择网络中的 IP、我就不会遇到任何问题。 即192.x.x.x 适用于我、而172.x.x.x 不适用于我。
    您可能需要检查网络配置以查看网络中的 IP 地址。

    奇怪的是、您说过可以在运行时将 IP 分配给设备后对其执行 ping 操作、但不能来回回显消息。 下一步是从接受调用开始调试、以准确查看程序失败的位置。

    Brandon