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.

[参考译文] 编译器/TM4C129XNCZAD:LWIP 和 EEPROM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/589514/compiler-tm4c129xnczad-lwip-and-eeprom

器件型号:TM4C129XNCZAD

工具/软件:TI C/C++编译器

您好!  

在将器件的 IP 地址保存到 EEPROM 中时、我遇到了一些问题。 我正在使用 lwIP 的示例代码、根据我的需要进行一些更改。 问题是 我想将 IP 地址保存在 EEPROM 中、我从 DHCP 获取、并将函数的返回值分配给 EEPROM 变量、它从 "lwIPLocalIPAddrGet ()"(即0xFFFFFFFF)保存 ELSE 语句的返回地址。 我尝试了但没有成功。 如果有人对此有了解、请帮助我。

此致、

Faizan Ahsan

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

    您好,Faizan,

     您如何知道它正在接受 Else 语句? 如果 EEPROM 编程不成功、EEPROM 将保留原始的已擦除值、也是0xFFFFFFFF。 下面是 TivaWare Driverlib 用户指南中显示的一个示例。 这与您对 EEPROM 进行编程时使用的方法是否相似?

    uint32_t ui32EEPROMInit;
    uint32_t pui32Data[2];
    uint32_t pui32Rad[2];
    //
    启用 EEPROM 模块。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_EEPROM0);
    //
    等待 EEPROM 模块准备就绪。
    //
    while (!SysCtlPeripheralReady (SYSCTL_Periph_EEPROM0))
    }{
    //
    
    //等待 EEPROM 初始化完成
    //
    ui32EEPROMInit = EEPROMInit();
    //
    //检查 EEPROM 初始化是否返回错误
    //并通知应用
    //
    if (ui32EEPROMInit!= EEPROM_INIT_OK)
    {
    while (1)
    {
    }
    //
    
    //将一些数据编程到地址0x400的 EEPROM 中。
    //
    pui32Data[0]= 0x12345678;
    pui32Data[1]= 0x56789abc;
    EEPROMProgram (pui32Data、0x400、sizeof (pui32Data));
    //
    //读回它。
    //
    EEPROMRead (pui32Read、0x400、sizeof (pui32Read)); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、
    我按照相同的示例编写代码、并通过写入另一个变量值进行验证、因为我定义了一个由两个数字组成的数组。 我还可以通过更改"lwIPLocalIPAddrGet ()"函数中的返回值来检查它,我从该函数中读取的值与我更改的值相同。

    此致、
    法赞
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    法赞
    尝试隔离问题的两个方面:
    -确保将有效的 IP 地址存储在变量中。 仔细检查变量大小、类型等...
    -通过参阅上述 Charles 的代码、确保您成功地将其他内容写入 EEPROM (并读回)。
    一旦这两种方法都正常、EEPROM 写入就不会出现任何错误。
    此致
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Fizan。
    假设已将 IP 地址的各个部分转换为4个不同的字节并放入 my_IP[4]数组、则可以使用以下代码

    #define IP_Location 32 // EEPROM 的第32个寻址位置(第9个字)-或任何其他合适的位置


    void changeIP (字节 my_IP[4])

    for (int i=0;i < 4;i++)

    EEPROM.write (IP_Location + I、my_IP[i]);
    延迟(50);

    下面是一个链接、用于下载经过细微修改的 TIVAWARE EEPROM 版本。 阅读文档。 非常方便!

    www.dropbox.com/.../EEPROM_code.rar

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

    您好、Bruno、

    我有有效的 IP 地址、我的 EEPROM 代码没有问题、 我使用断点再次调试代码、我意识到必须使用中断处理程序作为在 EEPROMProgram 执行后执行获取 IP 地址的函数。我将放置中断、然后我将检查是否存在相同的问题。 感谢你们的帮助:)

    此致、
    法赞

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    John Piliounis、您好!
    我有有效的 IP 地址、我的 EEPROM 代码没有问题、 我使用断点再次调试代码、我意识到必须使用中断处理程序作为在 EEPROMProgram 执行后执行获取 IP 地址的函数。我将放置中断、然后我将检查是否存在相同的问题。 感谢你们的帮助:)

    此致、
    法赞
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题已解决:)只需为 while (condition ==0){SysCtlDelay (120000000);}放置 while 循环
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请小心使用这种类型的解决方案。 如果您的连接/网络有问题、并且您的"状况"从未从0更改、则您的产品将冻结。