工具/软件:
你好!
您好!
我希望将 NDK 集成到我的现有工程中。 我使用 XGCONF 来启用 NDK、我能够进行套接字通信。 然而、使用 XGCONF 则会导致 NDK 的内部控制。 我希望能掌握 NDK 控制、并希望根据我的需求初始化和取消初始化 NDK。
您能帮助我如何实现这一目标吗? 如何将 NDK 的控制从 XGCONF 转移到我的控制?
期待您的答复!
此致、
Siddhi
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.
工具/软件:
你好!
您好!
我希望将 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。
你(们)好
我使用的方法完全相同。 我完成了 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);
}
}
您好、
也许这些帖子会有所帮助。
我还将建议您首先使用当前基于.cfg 文件工作的 NDK 工程、并在您的应用程序中添加一个 CfgAddEntry 来一次创建新服务、看看每个新服务是否会产生编译问题。