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.

[参考译文] Starterware/processor-SDK-AM335X:BSD 套接字示例

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/612304/starterware-processor-sdk-am335x-bsd-socket-example

器件型号:PROCESSOR-SDK-AM335X

工具/软件:Starterware

您好!

我正在尝试编译一个简单的基于 BSD 套接字的程序。  正如 NDK 文档在第3.3节 (3.3.1.1)中所述、我已将所有单独的 BSD 调用放置在不同的源模块中、并且我正在尝试对其进行编译。

我将使用 CCS 7.2与 PDK_AM335x_1_0_7  和 NDK_2_25_01_11搭配使用

我对"socket ()"的调用始终返回-1。  在创建套接字之前、我似乎需要调用"fdOpenSession"。

该函数不是 BSD 调用、但我在 bsd/sockndk.h 中找到它  接下来、它具有当前任务句柄的参数。  具体而言、示例代码段中的调用是  

fdOpenSession (TaskSelf()); 

嗯、"TaskSelf"来自 osif.h、其中有句柄、UNIT32和其他类似的东西。

为了定义它们、有必要包含 UserType.h  嗯、这有它自己的 IP6N 定义、这给了我一堆错误、重新定义它。

3.1.2.1节明确指出,对 fdSessionOpen 的调用应位于任务内。  小代码列表显示"socket;" 与"dfOpenSession"共存。  但是、没有提到如何#include 报头文件以使数据进行编译(我发现文档中缺少一些因素)  

那么...  当存在跨多个头文件的相同名称类型的冲突时,如果没有#ifdefs 保护,您应该如何使其进行编译?

我找不到基于 BSD 的套接字示例。  我们非常感谢您的建议。

-CSW

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Chris、

    您是否尝试在 CCS Build->GNU Compiler->Symbols 中添加'-D_POSIX_SOURCE? 请参阅此处的 BSD 套接字包含错误讨论:  

    是否可以在此处发布您的项目、以便我重现问题?

    此致、
    Garrett

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

    Garrett、

    这些链接不起作用。  事实上、文本表明这是一个个人账户、我无法打开它。

    添加_posix_source 会使情况更糟。  它从我下面描述的内容变为了50多个未定义 的"uint" 以及其他我不想深入探究的内容。

    我不想发布整个项目、它没有意义。  只需尝试编译以下代码:

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #include 
    
    #include 
    
    #include 
    #include 
    
    #include 

    是的、没有源代码。  不需要、这将生成一组冲突类型。

    换言之、向 TI 发送的消息是:"您的头文件不能与您的头文件一同使用。"

    具体来说 :

    C:/ti/ndk_2_25_01_11/packages/ti/ndk/inc/bsd/sys/socket.h:85:16:错误:重新定义'struct IP6N'
    typedef 结构 IP6N
    ^μ A
    在./HTTP/HttpCxn.cpp 中包含的文件中:20:0:
    C:/ti/ndk_2_25_01_11/packages/ti/ndk/inc/usertype.h:62:16:错误:之前的"struct IP6N"定义
    typedef 结构 IP6N
    ^μ A
    在./HTTP/HttpCxn.cpp:30:0中包含的文件中:
    C:/ti/ndk_2_25_01_11/packages/ti/ndk/inc/bsd/sys/socket.h:93:6:错误:";"标记之前的声明类型无效
    }IP6N;
    ^μ A
    C:/ti/ndk_2_25_01_11/packages/ti/ndk/inc/bsd/sys/socket.h:93:6:错误:声明'typedef int IP6N'冲突
    在./HTTP/HttpCxn.cpp 中包含的文件中:20:0:
    C:/ti/ndk_2_25_01_11/packages/ti/ndk/inc/usertype.h:70:2:注意:先前声明为'typedef struct IP6N IP6N'
    }IP6N;
    ^μ A

    我删除 了#include ,并提供了我自己的几个定义,我可以使其编译。 这是一项黑客攻击任务。 但它让我通过了这个失败。

    -CSW

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

    您好 CSW、

    [引用用户="Christopher Weber"]

    该函数不是 BSD 调用、但我在 bsd/sockndk.h 中找到它  接下来、它具有当前任务句柄的参数。  具体而言、示例代码段中的调用是  

    fdOpenSession (TaskSelf()); 

    嗯、"TaskSelf"来自 osif.h、其中有句柄、UNIT32和其他类似的东西。

    [/报价]

    此时最好的方法是直接调用 SYS/BIOS 内核 API、而不是通过 NDK OSAL:

    #include 
    
    (笑声)
    
    fdOpenSession (Task_self ()); 

    Steve

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

    [引用用户="Steven Connell"]

    您好 CSW、

    Christopher Weber

    该函数不是 BSD 调用、但我在 bsd/sockndk.h 中找到它  接下来、它具有当前任务句柄的参数。  具体而言、示例代码段中的调用是  

    fdOpenSession (TaskSelf()); 

    嗯、"TaskSelf"来自 osif.h、其中有句柄、UNIT32和其他类似的东西。

    此时最好的方法是直接调用 SYS/BIOS 内核 API、而不是通过 NDK OSAL:

    #include 
    
    (笑声)
    
    fdOpenSession (Task_self ()); 

    Steve

    [/报价]

    Steve。 我已经有了该头文件。

    如果我删除"ti/ndk/inc/os/osif.h"、则会得到 "../HTTP/file.cpp:118:24:错误:'TaskSelf'未在此范围内声明"

    这不是头文件的问题。

    问题是"osif.h"需要"uint8"、"UNIT32"、 "handle"和其他东西。

    但是、如果我包含"ti/ndk/inc/UserType.h" 以处理所需的条件、则会从  "socket.h"中获得"错误:重新定义"struct IP6N"

    这是我必须使用的基本接头:

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    void RunThread (UARg a0、UArg A1){ 
    void * m_hTask; INT 结果; m_hTask = TaskSelf(); fdOpenSession (m_hTask);
    //... 其他代码 }

    具体而言、这应该能够在 TI 接头彼此不步进的情况下进行编译。

    此外 、USB 驱动程序已经重写、现在除了 "MSC"之外、没有任何其他内容的构建示例、这只是几个示例、显示该生态系统尚未准备好迎接黄金时代...