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.

[参考译文] PROCESSOR-SDK-AM64X:<sys/select.h>标头和 LwIP

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1060094/processor-sdk-am64x-sys-select-h-header-and-lwip

器件型号:PROCESSOR-SDK-AM64X

您好!

我们在使用标头时遇到了一些问题  标头。 如果将其与处理器 SDK 的 LwIP 协议栈结合使用、则定义了结构时间列表多个结构。

错误消息:

/-sdk-path-/source/networking/lwip/lwip-stack/src/include/lwip/sockets:h:522:8:错误:重新定义'timeval'
struct timeval{
^μ A
/home/-user-/ti/ti-cgt-armllvm_1.3.0.ls/include/c/sys/_timeval.h:49:8:注:先前的定义在此处
struct timeval{
^μ A

是否不应使用此标题?

这也可能是 AM243 SDK 的问题。

大家好  

Fabian

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

    您好 Fabian、

    在 MCU_PLUS_SDK_am64x_08_01_00_36\source\networking\lwip\lwip-stack\src\include\lwip\sockets.h 中、进行以下更改。 它应该可以解决您的问题。

    /** LWIP_TIMEVAL_PRIVATE:如果要使用提供的结构时间值
    *由您的系统将其设置为0并包含 请访问 cc.h *
    #ifndef LWIP_TIMEVAL_PRIVATE
    #define LWIP_TIMEVAL_PRIVATE 1 --> 0
    #endif

    此致、

    Ming

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

    您好、Ming、

    这将包含在下一个 SDK 版本中吗?  

    此致  

    Fabian

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

    您好 Fabian、

    它意味着由用户自定义。 如果我们将其更改为0、则如果没有 sys/select.h、它将不适用于该情况

    此致、

    Ming  

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

    您好、Ming、

    对我来说、这还是有点令人困惑的。 所有选项是否都应包含在 lwipopts.h 文件中?  

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

    Ming、您好、很遗憾、我刚才注意到、它没有解决问题。 更改定义后、我无法再构建库。  

    source/networking/lwip/lwip-stack/src/include/lwip/sockets.h:601:24: error: declaration of 'struct timeval' will not be visible outside of this function [-Werror,-Wvisibility]
                    struct timeval *timeout);
                           ^
    1 error generated.

    有什么想法吗?  

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

    您好 Fabian、

    这实际上是一个东西、因为 lwip 库和您的示例是单独构建的、因此必须包含在 lwip 库和您的应用代码中。 以下是 sockets.h 中的一个权变措施:

    /** LWIP_TIMEVAL_PRIVATE:如果要使用提供的结构时间值
    *由您的系统将其设置为0并包含 请访问 cc.h *
    #ifndef LWIP_TIMEVAL_PRIVATE
    #define LWIP_TIMEVAL_PRIVATE 1.
    #endif

    #if LWIP_TIMEVAL_PRIVATE
    #ifndef _SYS_TIMEVAL_H_
    #define _SYS_TIMEVAL_H_
    struct timeval{
    长 tV_sec;/*秒*/
    long tv_usec;/*和微秒*/
    };
    #endif
    #endif /* LWIP_TIMEVAL_PRIVATE */

    它将消除 val 重新定义问题、但 会弹出 FD_SET。 解决该问题的唯一方法是在 sys/select.h 中注释掉以下行

    //typedef struct fd_set{
    //__FD_MASK __FDS_Bits[_howmany (FD_SETSIZE,_NFDBITS )];
    //}fd_set;

    我已经使用 MCU+ SDK 08.01.00.36对其进行了测试。 它确实通过了库和应用的构建。

    我知道它看起来很丑,但不幸的是,它似乎是唯一的途径。

    此致、

    Ming

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

    您好、Ming、

    但 sys/select.h 头文件随编译器一起提供、并且不存在于 SDK 中。 我们无法在您的设备的每个开发计算机上更改此标头。  

    遗憾的是、我们无法将其用作临时解决方法。

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

    您好 Fabian、

    明白。 以下是不更改 sys/select.h 中的另一种变通办法:

    在 MCU_PLUS_SDK_am64x_08_01_00_36\source\networking\lwip\lwip-stack\src\include\lwip\sockets.h 中进行以下更改:

    #include //mw (第42行)

    (笑声)

    //mw typedef struct fd_set (第483行- 486行)
    ///兆瓦{
    //mw unsigned char FD_bits [(FD_SETSIZE + 7)/8];
    //mw}FD_SET;  

    (笑声)

    #define LWIP_TIMEVAL_PRIVATE 0 //MW (第520行)

    此致、

    Ming

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

    您好、Ming、

    昨天 、我找到了与您建议的类似的修复方法。

    但您无需注释 FD_SET。

    您可以将其保留  

    /* FD_SET used for lwip_select */
    #ifndef FD_SET  //from line 466 in sockets.h
    #undef  FD_SETSIZE
    
    .... // all the fd_set, FD_SET, ...
    
    #endif

    如果已经提供了 ifndef、则不会定义所有 FD_set 内容。

    (我们还会保留您的更改以将时间值结构私有化)

    我们在 lwipopts.h 头文件中包含了 sys/select.h。  

    我认为下一个 SDK 版本应提供类似的修复。

    此致  

    Fabian

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

    您好 Fabian、

    明白了。 我将针对它提交一个 TT。

    此致、

    Ming