大家好、
我使用了 TM4C 处理器、我的项目也在使用 XGCONF 配置来实现 DHCP 分辨率。
它工作正常、IP 很快就能获得、这种方法我没有问题。
现在我有一个请求、需要实施支持来按需选择 IP 分辨率类型、我的意思是、使用可以访问配置面板(通常、我使用套接字或 UART 进行配置)。
但我在尝试动态设置 DHCP 或 IPaddress 时遇到问题。 NC_NetStart 不起作用、我不知道如何修复它。
我正在使用 tcpEcho 尝试修复它、然后将解决方案放在我的项目上。
我使用的是 TI-RTOS 2.16.1.14。
我遇到的错误如下:
启动 TCP 回显示例
系统提供商设置为 SysMin。 停止目标以查看 ROV 中的任何 SysMin 内容。
服务状态:DHCP:已启用:000
服务状态:DHCP:已启用:正在运行:000
NetworkConfig 配置-初始化
NC_SystemOpen
CONFIGURANDO DHCP
CfgAddEntry ret = 0
NC_NetStart
000 ExecStart:已打开
00000.000 DHCPOpen:NIMUIOCTL (NIMU_GET_DEVICE_MAC)失败、错误代码为-22
NetStop 回叫
FSR = 0x0000
HFSR = 0x40000000
DFSR = 0x0000000b
MMAR = 280bbbbbbf4
BFAR = 280bbbbbf4
AFSR = 0x00000000
正在终止执行...
在我的文件 tcpEcho.c 中,NetworkConfig()
void NetStart(){System_printf("NetStart Callback\r\n");System_flush();} void netStop(){ System_printf("NetStop Callback\r\n");System_flush();} void ServiceeReport(uint a, uint b, uint c, handle cfg);{/udp_eDP_eDP0=uint()}
int NetworkConfig (void)
{
int ret;
CI_IPNet NA;
CI_route RT;
CI_SERVICE_DHCPc dhcpc;
handle hCfg;
System_printf ("\r\nNetworkConfig Configuracion - Initialization\r\n);
System_flush ();
ret = NC_SystemOpen (NC_Priority_Low、NC_OPDE_INTERRUPT);
if (nc_printf
)("NC_SystemOpen Failed (%d)\n"System_printf"(nC
);
unt (n_unt)
;unt =系统配置(n_unt);unt (n_unt);unt (n_unt);(
如果无法创建系统配置)(n_unt);
//在接口1
bzero (&dhcpc、sizeof (dhcpc))上指定 DHCP 服务;
dhcpc.cisargs.Mode = CIS_FLG_IFIDXVALID;
dhcpc.cisargs.IfIdx = 1;
dhcpc.cisargs.pCbSrv =&serviceReport;
dhcpc.param.pOptions = DHCP_OPTIONS;
dhcpc.param.len = 2;
ret = CfgAddEntry (hCfg、CFGTAG 服务、CFGITEM_SERVICE_DHCPLIENT、0、sizeof (dhcpc)、 (uint8 *)&dhcpc、0);
System_printf ("CfgAddEntry ret =%d\r\n"、ret);
System_flush ();
//添加我们的主机名
CfgAddEntry (hCfg、CFGFO_SYSINtag、CFGITEM_DHCP_HOSTNAME、0、strttttt8)("uremota"、"uintttag"(uintttta) 0);
}
否则{
System_printf ("CONFIGURANDO static IP\r\n");
System_printf ("Configurando IP e Netmask\r\n");
System_flush();
//手动配置本地 IP 地址
bzero (&nA、sizeof (nA));
na.ipadinet = 192.168.0.0nA
("r_adinet = na";"r.pna"("10.na"); "scientts.com);
NA.NetType = 0;
//将地址添加到接口1
ret = CfgAddEntry (hCfg、CFGTAG _IPNet、1、0、sizeof (CI_IPNet)、 (uint8 *)&nA、0);
//添加我们的主机名
CfgAddEntry (hCfg、CFGTAG _SYSINFO、CFGITEM_DHCP_HOSTNAME、0、strlen ("equip")、(uint8 *)"equip"、 0);
bzero (&RT,sizeof (RT));
RT.IPDestAddr = 0;
RT.IPDestMask = 0;
rt.IPGateAddr = inet_addr ("192.168.0.1");
//添加路由
ret = CfgAddEntry (hCfg、CFGTAG _route、0、0、sizeof (CI_route)、 (uint8 *)&RT, 0);
}
// TCP 发送缓冲区大小
int 值= 2048;
CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKTCPTXBUF、
CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&value、0);
// TCP 接收缓冲区大小(复制模式)
值= 2048;
CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKTCPRXBUF、
CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&value、0);
// TCP 接收限制(非复制模式)
值= 2048;
CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKTCPRXLIMIT、
CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&value、0);
// UDP 接收限制
值= 2048;
CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKUDPRXLIMIT、
CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&value、0);
//
//使用此配置启动系统
//
////我们一直启动,直到函数返回1以下。 这允许
//我们有一个“reboot”命令。
//
System_printf ("NC_NetStart\r\n");
System_flush();
do
{
ret = NC_NetStart( hCfg、NetStart、netStop、netOpenHook );
}while (
fg > 0);System_printf ("NC_NetStart retCode =%d\r\n"、
Finishing);// System_printf
(nc > 0);System_printf
(nc);System_print_printf (nc (close [关闭系统配置](n'_print])
空 startupTask (UArg0、UArgarg1){
NetworkConfig();
}
startupTask 由 BIOS 作为任务调用。
有线索吗? 我已经看了几篇文章、但没有找到修复方法。
是否有任何人可以共享具有手动配置的项目 tcpEcho?
提前通知 Tks
莱安德罗
void NetStart(){System_printf("NetStart Callback\r\n");System_flush();}
void netStop(){System_printf("NetStop Callback\r\n");System_flush();}
void serviceReport (uint a、uint b、uint c、handle cfg){//debug ("ServiceReport\r\n");}
int isDhcp = 1;uint8 dhcp_options[]={DHCPPT_SERVER_identifier、DHCPPT_router};void netOpenHook (IPN ipaddr、uint IfIdx、uint fADD);int NetworkConfig (void){int 配置;CI_IPNet NA;CI_route RT;CI_SERVICE_DHCPc;DHCPc 处理 DHCPc
System_printf ("\r\nNetworkConfig 配置-初始化\r\nNC_SystemOpen\r\n");System_flush ();
RET = NC_SystemOpen (NC_Priority_Low、NC_OPMODE_INTERRUPT);if (ret){ System_printf ("NC_SystemOpen Failed (%d)\n"、ret);System_flush ();return -1;}
hCfg = CfgNew();if (!hCfg){ System_printf("无法创建配置\n");System_flush();转到 main_exit;}
if (isDhcp){System_printf ("CONFIGURANDO DHCP\r\n");
//在接口1 bzero (&dhcpc、sizeof (dhcpc))上指定 DHCP 服务;dhcpc.cisargs.Mode = CIS_FLG_IFIDXVALID;dhcpc.cisargs.IfIdx = 1;dhcpc.cisargs.pCbSrv =&serviceReport; dhcpc.param.pOptions = DHCP_OPTIONS; dhcpc.param.len = 2;ret = CfgAddEntry (hCfg、CFGTAG 服务、CFGITEM_SERVICE_DHCPLIENT、0、sizeof (dhcpc)、 (uint8 *)&dhcpc、0);
system_printf ("CfgAddEntry ret =%d\r\n"、ret);System_flush ();
//添加我们的主机名 CfgAddEntry (hCfg、CFGTAG _SYSINFO、CFGITEM_DHCP_HOSTNAME、0、strlen ("remotta")、(uint8 *)"remotta"、 0);}否则{System_printf ("CONFIGURANDO 静态 IP\r\n");
system_printf ("Configurando IP e Netmask\r\n");System_flush ();//手动配置本地 IP 地址 bzero (&nA,sizeof (nA));na.ipaddr = inet_addr ("192.168.0.10");na.ipMask = inet_addr ("255.255.255.0);strcpy (na.Domain) "scientts.com);NA.NetType = 0;//将地址添加到接口1 ret = CfgAddEntry (hCfg、CFGTAG _IPNet、1、0、sizeof (CI_IPNet)、 (uint8 *)不适用、0);
//添加我们的主机名 CfgAddEntry (hCfg、CFGTAG _SYSINFO、CFGITEM_DHCP_HOSTNAME、0、strlen ("equip")、(UINT8 *)"equip"、 0);
bzero (&RT,sizeof (RT));rt.IPDestAddr = 0;rt.IPDestMask = 0;rt.IPGateAddr = inet_addr ("192.168.0.1");
//添加路由 ret = CfgAddEntry (hCfg、CFGTAG _route、0、sizeof (CI_route)、 (uint8 *)&RT, 0);}
// TCP 发送缓冲区大小 int 值= 2048; CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKTCPTXBUF、 CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&value、0);
// TCP 接收缓冲区大小(复制模式) 值= 2048; CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKTCPRXBUF、 CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&value、0);
// TCP 接收限制(非复制模式) 值= 2048; CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKTCPRXLIMIT、 CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&value、0);
// UDP 接收限制 值= 2048; CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_SOCKUDPRXLIMIT、 CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&value、0);
#if 0 // TCP 保持空闲(10秒) RC = 100; // 这是 TCP 探测 CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_TCPKEEPIDLE、 CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&RC、0);
// TCP 保持间隔(1秒) // 这是 TCP 保持探测 RC = 10; CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_TCPKEEPINTVL、 CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&RC、0);
// TCP 最大保持空闲时间(5秒) // 这是 TCP 保留将在断开连接 RC = 50之前进行探测; CfgAddEntry (hCfg、CFGTAG _IP、CFGITEM_IP_TCPKEEPMAXIDLE、 CFG_ADDMODE_UNIQUE、sizeof (uint)、(uint8 *)&RC、0);#endif
CfgSetDefault (hCfg);////使用此配置引导系统//////我们继续引导,直到函数返回小于1。 这允许//我们有一个“reboot”命令。 // System_printf ("NC_NetStart\r\n");System_flush();do { ret = NC_NetStart( hCfg、NetStart、netStop、netOpenHook );} while (ret >0);
System_printf ("NC_NetStart retCode =%d\r\n"、ret);
//删除配置 CfgFree( hCfg );
System_printf ("NetworkConfig Configuracion - Finishing \r\n);System_flush ();
//关闭 OS MAIN_EXIT:NC_SystemClose ();
return (0);}
空 startupTask (UArg0、UArgarg1){NetworkConfig();}