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.

[参考译文] RTOS/SW-EK-TM4C1294XL:在运行时更改静态 IP

Guru**** 2457760 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/646100/rtos-sw-ek-tm4c1294xl-change-static-ip-at-runtime

器件型号:SW-EK-TM4C1294XL

工具/软件:TI-RTOS

如何更改静态 IP?

我从其他帖子中收集了此代码:

句柄 hCfg;
CI_IPNet newIP;
newIP.NetType = 0;
newip.ipaddr = inet_addr ("192.168.0.100");
newip.ipMask = inet_addr ("255.255.255.0);
newip.hBind = 0;

CfgGetEntry (0、CFGTAG _IPNet、1、1、 hCfg);
CfgRemoveEntry (0、hCfg);
int resp = CfgAddEntry (0、CFGTAG _IPNet、1、0、sizeof (CI_IPNet)、 newIP、0); 

这是可行的、但我似乎正在删除一个配置句柄、该配置句柄在 XGCONF 生成的代码中应用了许多设置:

TI_NDK_CONFIG_IP_INIT (hCfg);

//添加 TCP 模块配置设置。 //
ti_ndk_config_tcp_init (hCfg);

//添加 NDK 低优先级任务栈大小的配置设置。 */
RC = 1280;
CfgAddEntry (hCfg、CFGTAG _OS、CFGITEM_OS_TASKLOW、
CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&RC、0); 

此生成的初始化代码使用用于设置 IP 的相同句柄来设置 TCP 和优先级设置。 我是否正在删除 IP 更改代码中的所有这些设置?

我应该给 CfgAddEntry()配置句柄吗? API 参考声明为句柄提供0会更改默认配置。 我不确定是否应该更改。

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

    已为此线程分配了一名工程师。 您应在24小时内收到回复。

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

    [引用 user="Peter Borenstein">我是否应该为 CfgAddEntry()提供配置句柄? API 参考声明为句柄提供0会更改默认配置。 我不确定是否应更改该值。

    通过零应该是可以的。 正如您提到的、这将使用默认配置。 如果您使用多种配置(而不是典型用例 Aafaik)、则可能需要执行不同的操作。

    [引用 user="Peter Borenstein"]这起作用,但我似乎要删除一个配置句柄,该配置句柄在 XGCONF生成的代码中应用了许多设置。

    您的代码中的以下部分以粗体显示可能存在问题:

    句柄 hCfg;
    CI_IPNet newIP;
    newIP.NetType = 0;
    newip.ipaddr = inet_addr ("192.168.0.100");
    newIP.IPMask = inet_addr ("255.255.255.0);
    newip.hBind = 0;

    CfgGetEntry (0、CFGTAG _IPNet、1、1、hCfg);
    CfgRemoveEntry (0、hCfg);
    int resp = CfgAddEntry (0、CFGTAG _IPNet、1、0、sizeof (CI_IPNet)、 newIP、0);

    我想知道这是您拥有的确切代码(逐字记录)、还是您可能拥有以下类似代码?

    句柄 hCfg = CfgGetDefault();

    以上代码(和变量名称)是获取默认配置句柄的方式。 由于您使用的是通常用于将句柄存储到配置(而不是配置条目)的变量名称(hCfg)、因此我想知道您是否会在调用中意外地传递配置句柄:

    CfgGetEntry (0、CFGTAG _IPNet、1、1、hCfg);

    这将覆盖配置。 这是可行的吗?

    如果不是、我建议更改您使用的变量、将其称为不同于"hCfg"的变量、只是为了避免与您将在论坛中看到的其他示例代码相混淆。

    [引用 user="Peter Borenstein">此生成的初始化代码使用用于设置 IP 的相同句柄来设置 TCP 和优先级设置。 我是否要删除 IP 更改代码中的所有这些设置?

    这些设置都不应被删除。 您可以在运行时添加到配置中。 现有配置将是相同的,但您要添加或更改的设置除外。 更改将立即生效。

    Steve

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

    您好 Steven、

    下面是一个包含成功返回值的屏幕截图、用于证明代码"有效":

    但是、我仍然不明白这里发生了什么。 为什么0是作为第一个参数传递给 CfgGetEntry()的可接受句柄?

    编辑:初始化期间使用的默认值和句柄相同。 传递0与传递执行初始化的有效配置句柄相同。

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

    我想我正在将配置句柄与配置条目句柄混用。

    单步执行初始化代码会恢复用于初始化所有内容的句柄与 CfgGetDefault();0x20005C2C 在屏幕截图中返回的值相同。

    "过零应该可以。 正如您提到的、这将使用默认配置。"

    我在 NC_Start()中找到了您的语句的证明。 此函数具有行 CfgSetDefault( hCfg );. 因此、我们保证将自动生成的初始化代码作为默认设置!

    但是、为了理解这一点、假设句柄未设置为默认值、如何获得配置句柄?

    我注意到这个配置句柄正被传递到网络堆栈初始化挂钩、这可能会在安全的地方堆叠该句柄。 这似乎是文件上的矛盾。 NDK 用户指南(SPRU523J)指出"挂钩函数必须使用以下格式定义:void functionName (void)"。 我想、如果本指南永远不存在、我会更快地了解您的堆栈...

    Todd 已经证明 IP 地址挂钩 e2e.ti.com/.../639403的情况是错误的

    有点不相关、我在 Todd 的帮助下找到了一个关于如何创建 HTTP 服务器的电源点、这非常有用。 荣誉。

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

    尊敬的 Peter:

    [引用 user="Peter Borenstein"]但出于透彻的理解,假设句柄未设置为默认值,如何获得配置句柄?

    您可以保存配置并稍后再次加载其设置。

    请找到随附的示例和下面的伪代码。 我尝试在下面的伪代码中总结该示例:

    1. 创建新配置:
      1. hCfg = CfgNew()
    2. 应用一些设置:
      1. CfgAddEntry (hCfg、...);
    3. 获取保存配置设置所需的大小
      1.  Int  MainConfigSize = 0;
      2. CfgSave( hCfg,&MainConfigSize,0);// pData 传递0将导致 CfgSave 计算所需的大小
    4. 将应用的设置保存到 MainConfig[]中
      1. unsigned char MainConfig[512];//用于存储配置设置
      2. CfgSave( hCfg,MainConfigSize,0);
    5. (可选)从默认值取消设置此配置:
      1. CfgExecute (hCfg、0)
    6. 释放配置
      1.  CfgFree (hCfg);
    7. 创建第二个配置
      1. hCfg2 - CfgNew()
    8. 将先前配置中的设置加载到新配置中
      1. CfgLoad( hCfg2, MainConfigSiz, MainConfig );
    9. (可选)将新配置设置为默认值:
      CfgExecute (hCfg2、1)

    Steve

    注意:附加的源文件来自较旧的 NDK、可能无法"按原样"工作(例如、您可能无法将其放入现有应用程序):

    e2e.ti.com/.../3617.cfgdemo.c