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.

[参考译文] EK-TM4C1294XL:独立集成 NDK

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1560785/ek-tm4c1294xl-integrate-the-ndk-independently

器件型号:EK-TM4C1294XL


工具/软件:

你好!

您好!

我希望将 NDK 集成到我的现有工程中。 我使用 XGCONF 来启用 NDK、我能够进行套接字通信。 然而、使用 XGCONF 则会导致 NDK 的内部控制。 我希望能掌握 NDK 控制、并希望根据我的需求初始化和取消初始化 NDK。

您能帮助我如何实现这一目标吗? 如何将 NDK 的控制从 XGCONF 转移到我的控制?

期待您的答复!

此致、

Siddhi

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

    您好、

     请参阅 NDK 开发者指南 第 2 节“使用 C 代码配置 NDK“作为使用 XGCONF 的替代方法。 您需要调用 CfgNew() 函数和 CfgAddEntry() 函数。  例如、请参阅第 2.1.4.1 节。  

     如果基于.cfg 文件使用 XGCONF、则会根据.cfg 规范自动生成 NDK 代码。 如果您查看 TcpEcho 的 NDK 示例、生成的文件位于工程中的 Debug->configPkg->packages->cfg->tcpEcho_pem4f.c 下 您也可以查看此文件。 查看函数 ti_ndk_config_Global_stackThread ()、了解如何初始化 NDK。  

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

    我在积分 NDK 后收到此误差    

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

    您好、

     我无法在没有上下文的情况下评论这些错误。 我将建议您使用当前的 XGCONF 作为起点和参考、并参考如何在  tcpEcho_pem4f.c 文件中初始化和配置 NDK、然后根据.cfg 文件禁止重新生成 NDK。 我真的没有看到任何人完全使用 NDK 而不使用.cfg 文件、因为它负责 NDK 的所有后端配置和源代码生成。  

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

    你(们)好  

    我使用的方法完全相同。 我完成了 tcpEcho._pem4f.c 文件、并使用 XGCONF 进行源代码的内部生成和链接、但我遇到了这些错误。 请在下面找到我所使用的代码。

    Void
    NDK_start_thread (void)

    内部 RC;
    句柄 hCfg;

    /*这必须是在应用程序中绝对的第一件事!! */
    RC = NC_SystemOpen (NC_PRIORITY_LOW、NC_OPMODE_INTERRUPT);
    if (RC){
    xdc_runtime_System_abort(“NC_SystemOpen 失败 (%d)\n“);
    }

    /*从头开始创建和构建系统配置。 */
    hCfg = CfgNew ();
    if(!hCfg){
    xdc_runtime_System_printf(“无法创建配置\n“);
    //转到 MAIN_EXIT;
    }

    /*添加 IP 模块配置设置。 */
    TI_NDK_CONFIG_IP_INIT (hCfg);

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

    /*添加 NDK 低优先级任务堆栈大小的配置设置。 */
    RC = 1024;
    CfgAddEntry (hCfg、CFGTAG_OS、CFGITEM_OS_TASKSTKLOW、
    CFG_ADDMODE_UNIQUE、sizeof (uint)、(UINT8 *)&RC、0);

    /*添加 NDK 标准优先级任务堆栈大小的配置设置。 */
    RC = 1024;
    CfgAddEntry (hCfg、CFGTAG_OS、CFGITEM_OS_TASKSTKNORM、
    CFG_ADDMODE_UNIQUE、sizeof (uint)、(UINT8 *)&RC、0);

    /*添加 NDK 高优先级任务堆栈大小的配置设置。 */
    RC = 1024;
    CfgAddEntry (hCfg、CFGTAG_OS、CFGITEM_OS_TASKSTKHIGH、
    CFG_ADDMODE_UNIQUE、sizeof (uint)、(UINT8 *)&RC、0);

    应该做

    RC = NC_NetStart (hCfg、ti_DNK_CONFIG_OpenOpen Global_Network、
    TI_NDK_CONFIG_CLOS Global_Network、
    TI_NDK_CONFIG_IPAddr Global_Network);

    } while ( RC > 0 );

    /*删除配置*/
    CfgFree (hCfg);

    /*关闭操作系统*/
    //MAIN_EXIT:
    NC_SystemClose();
    xdc_runtime_System_flush();
    }

    /*
    * ti_ndk_config_OpenOpen Global_Network
    *
    *此函数在配置启动后调用
    */

    static void ti_ndk_config_Open() Global_Network

    // netOpenHook ();(在此处初始化套接字)
    }

    /*
    * ti_ndk_config_Close. Global_Network
    *
    *此函数在网络关闭时调用,
    *或当它不再有任何 IP 地址分配给它。
    */
    static void ti_ndk_config_Close() Global_Network

    }

    /*
    * ti_ndk_config_IPAddr.IPAddr Global_Network
    *
    *每当 IP 地址绑定时调用此函数
    *已从系统中添加或删除。
    */

    静态 void ti_ndk_config_IPAddr Global_Network (ipn ipaddr、uint IfIdx、uint fAdd)

    IPN IPTmp;

    if (fAdd){
    xdc_runtime_System_printf (“网络添加:“);
    }
    否则{
    xdc_runtime_System_printf (“已删除网络:“);
    }

    //打印消息
    IPTmp = ntohl (ipaddr);
    xdc_runtime_System_printf(“if-%d:%d.%d.%d\n“、IfIdx、
    (UINT8)(IPTmp>>24)&0xFF、(UINT8)(IPTmp>>16)&0xFF、
    (UINT8)(IPTmp>>8)&0xFF、(UINT8) IPTmp&0xFF);

    xdc_runtime_System_flush();
    }

    /*
    *服务状态报告
    *
    *用于报告服务状态更新的功能。
    */

    const static char *TASKNAME[]={“Telnet",“,"HTTP"、"HTTP",“,"NAT"“"NAT",、,"DHCPS"“"DHCPS",“,"DHCPC"、"DHCPC",“,"DNS"“"DNS"}、};“;</s>“ 、““
    const static char *ReportStr[]={“",“,"running"、"running",“,"updated"“"updated",、,"complete"“"complete",“,"Fault"、"Fault"}“};“;</s>、 ““
    const static char *StatusStr[]={“禁用“、“等待“、“IPTerm",“,"、"失败“失败“、“启用“};

    void ti_ndk_CONFIG_Global_serviceReport (uint 项、uint 状态、
    UINT 报告、处理 h)

    xdc_runtime_System_printf(“服务状态:%–9s:%–9s:%–9s:%03d\n“、
    TASKNAME[ITEM-1]、StatusStr[Status]、
    ReportStr[Report/256]、Report&0xFF);

    xdc_runtime_System_flush();
    }

    /*
    *========= TI.ndk.config.tcp template ========
    */


    void ti_ndk_config_tcp_init (handle hCfg)


    int transmitBufSize = 1024;
    CfgAddEntry (hCfg、CFGTAG_IP、CFGITEM_IP_SOCKTCPTXBUF)
    CFG_ADDMODE_UNIQUE、sizeof (uint)、(UINT8 *)&transmitBufSize、0);
    }

    int receiveBufSize = 1024;
    CfgAddEntry (hCfg、CFGTAG_IP、CFGITEM_IP_SOCKTCPRXBUF)
    CFG_ADDMODE_UNIQUE、sizeof (uint)、(UINT8 *)&receiveBufSize、0);
    }

    int receiveBufLimit = 2048;
    CfgAddEntry (hCfg、CFGTAG_IP、CFGITEM_IP_SOCKTCPRXLIMIT、
    CFG_ADDMODE_UNIQUE、sizeof (uint)、(UINT8 *)&receiveBufLimit、0);
    }

    }

    /*
    *========= TI.ndk.config.ip template =======
    */

    //#include
    //#include

    void ti_ndk_config_ip_init (handle hCfg)

    /*将我们的全局主机名添加到 hCfg 中(在所有连接的域中均声明)*/
    CfgAddEntry (hCfg、CFGTAG_SYSINFO、CFGITEM_DHCP_HOSTNAME、0、
    strlen (ti_DNK_CONFIG_Name Global_Host)、
    (Uint8 *) ti_ndk_config_UserName Global_Host、0);

    /*在接口 1 上手动配置 IP 地址*/

    CI_IPNet NA;
    ci_route RT;

    /*设置手动 IP 地址*/

    bzero (&NA、sizeof (NA));
    na.ipaddr = inet_addr (LocalIPAddr);
    NA.IPMask = inet_addr (LocalIPMask);
    strcpy (NA.Domain、DomainName);
    NA.NetType = 0;

    CfgAddEntry (hCfg、CFGTAG_IPNet、1、0、
    sizeof (CI_IPNet)、(UINT8 *)&NA、0);

    /*
    *添加默认网关。 由于这是默认值、因此采用了
    *目标地址和掩码都是零(我们继续
    *为了清晰起见,和显示了分配)。
    */
    bzero (&RT、sizeof (RT));
    RT.IPDestAddr = 0;
    RT.IPDestMask = 0;
    RT.IPGateAddr = inet_addr (GatewayIP);

    CfgAddEntry (hCfg、CfgTAG_route、0、0、
    sizeof (CI_route)、(UINT8 *)&RT、0);
    }
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我浏览了 tcpEcho._pem4f.c 文件、并使用 XGCONF 进行源代码的内部生成和链接、但我遇到了这些错误。

    您使用 XGCONF 进行内部生成是什么意思? 您是否说您 使用.cfg 来生成一些基本代码 、然后手动添加其他代码(如这里所示)?

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

    我要通过.cfg 添加 NDK 配置、enableCodegeneration = false。 这就是如何同时使用 NDK 配置和个人 C 代码。

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

    您好、

     也许这些帖子会有所帮助。  

     https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/891734/ccs-tm4c1294ncpdt-what-s-the-correct-way-to-manually-link-ndk-libraries-to-a-project 

    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/2378384#2378384

     我还将建议您首先使用当前基于.cfg 文件工作的 NDK 工程、并在您的应用程序中添加一个  CfgAddEntry 来一次创建新服务、看看每个新服务是否会产生编译问题。