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/TM4C1294NCPDT:保存新 IP 地址时出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/603565/rtos-tm4c1294ncpdt-problem-saving-new-ip-address

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

尝试使用 config.c CfgSave 例程保存新 IP 地址时出现问题。 我已经成功创建了一个新的 IP 地址、并且正在使用 NDK v2.25用户指南第52页上显示的示例保存例程。 我的 Save 例程返回字节计数、但未填充 pBuf。  

如果 AddEntry 例程中的 hCfg 拾取我在*phCfgEntry 参数中提供的新 IP 地址,我会有点困惑。 这就是我要发送到 CfgSave 例程的内容。

如果有任何工作添加新地址/保存地址的示例、我们将不胜感激。

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

    以下是我遇到问题的代码:

    void netIPAddress (void){
    CI_IPNet NewIPAddr;
    uint8 *pBuf;
    Int Size、Size1;
    句柄 hCfgIpAddr;

    /*设置手册 IP 地址*/

    bzero (NewIPAddr、sizeof (NewIPAddr));
    NewIPAddr.ipaddr = inet_addr ("192.168.1381");
    NewIPAddr.IPMask = inet_addr ("255.255.255.0);
    strcpy (NewIPAddr.Domain、"ecam.net");
    NewIPAddr.NetType = 0;

    hCfgIpAddr = CfgNew();
    /*获取当前静态 IP 条目*/


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

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

    大小= 200;

    CfgSave( hCfgIpAddr,&SIZE,0);
    if (size &&(pBuf = malloc(size)))

    Size1 = CfgSave (hCfgIpAddr,&size,pBuf);
    //MyMemorySave( pBuf,size );
    FREE( pBuf );

    正如我在上面提到的、CfgAddEntry 工作正常。 我无法验证的是 hCfgIpAddr 是否包含新地址-也许有一种方法可以在句柄中查看数据、但 CCS 说它不是基元数据类型、所以看不到! CfgSave 看起来工作正常、确实返回104、但线性缓冲器 pBuf 中没有存储任何内容。 一旦我有了包含数据的 pBuf、我将把它存储在外部闪存(MyMemorySave)中。 。

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

    如果能得到任何帮助、我将不胜感激!

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

    抱歉、我在上次提交时使用了非常大的字体。 这是意外的,我的坏人!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉耽误你的时间。 负责查看此内容的工程师是在 PTO 上、我没有意识到。 他在星期一回来。 很抱歉耽误你的时间。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    没关系。 非常感谢您以任何方式提供的帮助。 如果我能在7月5日的85岁生日之前解决这个问题,那将会很好:)。

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

    您好、Michael、

    第一次来,很开心(很早)的生日!

    CfgSave()旨在与 CfgLoad()结合使用。

    我认为您遇到了一个问题、因为该示例假定配置已保存在非易失性存储中(通过 MyMemorySave)。  由于这一假设、pbuf 在该假设之后被释放。  但是、在您的情况下、释放 pbuf 会使您保存的配置消失!

    我将附加一个显示 CfgSave 和 CfgLoad 示例用法的旧 NDK 示例文件。  但是、这个示例不能很容易地与 NDK 2.25一起使用、这主要是因为"StackTest"的代码现在是生成的 C 代码。 (您可以使其正常工作、但需要进行一些调整。 如果您愿意、我可以为您提供指导。  但是、我想说最好坚持您已经拥有的内容、并根据需要使用示例 CfgSave/Load 代码)

    简而言之、该示例执行以下操作:

    //全局变量:
    uint8 MainConfig[512];
    int MainConfigSize = 0;
    int MainConfigValid = 0;
    
    
    //将配置保存到线性缓冲区
    MainConfigSize = 0;
    CfgSave( hCfg,MainConfigSize,0);
    printf ("保存所需的%d 字节"、MainConfigSize);
    if (MainConfigSize > sizeof (MainConfig))
    printf ("致命:config buffer too small\n");
    其他
    {
    CfgSave( hCfg,&MainConfigSize,MainConfig );
    }
    
    (笑声)
    
    //加载配置
    CfgLoad( hCfg、MainConfigSize、MainConfig ); 

    可以试试吗?  只需尝试保存配置、然后重新加载即可。

    Steve

    e2e.ti.com/.../webinfo.h

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

    e2e.ti.com/.../webpage.c

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

    非常感谢您花时间为我提供帮助、并为您的生日祝福!

    实际上、我在将缓冲区内容释放之前将对其进行检查。 我将在保存例程内设置一个断点、并在缓冲区内容被填满后在该处检查缓冲区内容。 最后、我将在外部闪存中对缓冲器进行编程-我们的 PCB 具有1MB 闪存器件、我已经在其中保存了相当多的数据。 然后、在启动时、我打算使用保存的 IP 数据调用加载例程。

    hCfg 中包含的内容给我带来了很大的困惑。 很明显、它似乎必须包含新的 IP 信息、但它如何获得它?  

    BTW、程序与用于侦察的 UAV 连接。 我是这个项目上唯一一个也包含三个 C# GUI 程序的编程器、这些程序通过 RS232和以太网与 RTOS 程序进行通信。

    再次感谢您提供的任何帮助、

    Michael

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

    您好、Michael、

    [引用用户="Michael Antares ]hCfg 中包含的内容给我造成了很大的困惑。 很明显、它似乎必须包含新的 IP 信息、但它如何获得它?  [/报价]

    有一组结构用于保存配置中的值(请参阅 ti/ndk/nettools/config/config.h 中的 struct CFGMAIN、其中包含一组_cfgenry *pCfgEntry[])。

    保存配置时、该数组中每个元素的数据都会复制到另一个类型为 CFGENTRYSAVE 的结构中、然后写入提供的缓冲区中。

    您可以在上面提到的 config.h 文件中看到所有这些内容、在同一目录中可以看到 config.c 源文件。

    [引用 user="Michael Antares ]实际上、我在释放缓冲区之前正在检查缓冲区内容。 我在保存例程内设置一个断点、并在缓冲区内容被填满后检查缓冲区内容

    您是否在缓冲区的内容中看到任何内容?

    您应该尝试在 CCS 表达式窗口(CCS 的"View"菜单下)中查看 pBuf。


    尝试将 pBuf 转换为 CFGENTRYSAVE 结构以进行查看。 即、在表达式窗口中输入以下新表达式(打开后):

       (struct CFGENTRYSAVE) pBuf


    Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Steve、我将尝试您的建议并告诉您结果...