查看: 5466|回复: 4

[MQX] 新人报道,同时请教MQX下如果判断网络状态,网线插上还是拔出的状态如何判断?

[复制链接]

该用户从未签到

1

主题

13

帖子

0

新手上路

Rank: 1

积分
35
最后登录
1970-1-1
发表于 2011-4-22 11:23:06 | 显示全部楼层 |阅读模式
新人,请教,MQX中如果判断网络是通的还是断的,我的程序运行时,网线拔了很长时间才能判断出网络断了。我程序的初始化代码如下:
 if( RTCS_OK != RTCS_create() )
 {
  InUartPrint( "\nRTCS Create Error!\n", strlen( "\nRTCS Create Error!\n" ) );
  _mqx_exit( -1 );
 }
 if( ENET_OK!= ENET_initialize( BSP_DEFAULT_ENET_DEVICE, m_enetaddress, 0, &m_hEnet ) )
 {
  InUartPrint( "\nEnet Initial Error!\n", strlen( "\nEnet Initial Error!\n" ) );
  _mqx_exit( -1 );
 }
 
 if( RTCS_OK != RTCS_if_add( m_hEnet, RTCS_IF_ENET, &m_hRtcsIf ) )
 {
  InUartPrint( "\nRtcs If Add Error!\n", strlen( "\nRtcs If Add Error!\n" ) );
  _mqx_exit( -1 );
 }
 
 if( RTCS_OK != RTCS_if_bind( m_hRtcsIf, m_ui32IpAddress, m_ui32Mask ) )
 {
  InUartPrint( "\nRtcs If Bind Error!\n", strlen( "\nRtcs If Bind Error!\n" ) );
  _mqx_exit( -1 );
 }
 
 if( RTCS_OK != RTCS_gate_add( m_ui32GateWay, INADDR_ANY, INADDR_ANY ) )
 {
  InUartPrint( "\nRtcs Gate Add Error!\n", strlen( "\nRtcs Gate Add Error!\n" ) );
  _mqx_exit( -1 );
 }
 
 InUartPrint( "Waiting Fec Cable Plug In...\n", strlen( "Waiting Fec Cable Plug In...\n" ) );
 while( !ENET_link_status( m_hEnet ) );   这里面网线插不插都能直接过去,郁闷。。。
 InUartPrint( "Fec Cable connected!\n", strlen( "Fec Cable connected!\n" ) );
 m_hSockServer = socket( PF_INET, SOCK_STREAM, 0 );
 if( m_hSockServer == RTCS_SOCKET_ERROR )
 {
  InUartPrint( "\nServer Socket Create Error!\n", strlen( "\nServer Socket Create Error!\n" ) );
  _mqx_exit( -1 );
 }
 
 m_ui32Temp = 3000; 这里面的值怎么改都没用
 if( RTCS_OK != setsockopt( m_hSockServer, SOL_TCP, OPT_CONNECT_TIMEOUT, &m_ui32Temp, sizeof( m_ui32Temp ) ) )
 {
  InUartPrint( "\nSet Socket Opt OPT_CONNECT_TIMEOUT Error!\n", strlen( "\nSet Socket Opt OPT_CONNECT_TIMEOUT Error!\n" ) );
 }
 
 m_ui32Temp = 0; 这里面的值怎么改也没用
 if( RTCS_OK != setsockopt( m_hSockServer, SOL_TCP, OPT_KEEPALIVE, &m_ui32Temp, sizeof( m_ui32Temp ) ) )
 {
  InUartPrint( "\nSet Socket Opt OPT_KEEPALIVE Error!\n", strlen( "\nSet Socket Opt OPT_KEEPALIVE Error!\n" ) );
 }
再往下就是开读、写、工作线程,读线程在网线断很久后才能返回错误。
    m_ui32RecvDataCount = recv( m_ptrFecData->m_hSockClient, m_ptrFecData->m_ptrReadTempBuffer, sizeof( PcFecDataStyle ), 0 );
    
    if( m_ui32RecvDataCount == RTCS_ERROR )
    {
就是这儿,网络断了很久才能进到这里面,不明白为什么?
     break;
    }
网络芯片用的是ksz8041nl
请版主指教,非常感谢!
我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

2

主题

224

帖子

0

版主

Rank: 7Rank: 7Rank: 7

积分
322
最后登录
1970-1-1
发表于 2011-4-22 13:40:04 | 显示全部楼层

RE:新人报道,同时请教MQX下如果判断网络状态,网线插上还是拔出的状态如何判断?

https://www.nxpic.org.cn/bbs/article_853_103140.html

该用户从未签到

1

主题

13

帖子

0

新手上路

Rank: 1

积分
35
最后登录
1970-1-1
 楼主| 发表于 2011-4-22 16:14:59 | 显示全部楼层

RE:新人报道,同时请教MQX下如果判断网络状态,网线插上还是拔出的状态如何判断?

不好用啊,一直是断开的状态啊

该用户从未签到

2

主题

224

帖子

0

版主

Rank: 7Rank: 7Rank: 7

积分
322
最后登录
1970-1-1
发表于 2011-4-25 11:38:20 | 显示全部楼层

RE:新人报道,同时请教MQX下如果判断网络状态,网线插上还是拔出的状态如何判断?

实际上,RTCS里面是提供我说的检测拔插网线的机制的。
1. 可直接调用ipcfg_task_create()创建监测task
2. 或在用户task中加入查询,调用ipcfg_task_poll()
最终都是定时而调用到ipcfg_get_link_active()。
至于你这个个案为何无效,请自行调试一下bsp中的phy_ksz8041.c里面的 phy_ksz8041_get_link_status()函数。
具体例程可以看mpx安装目录下的\demo\web_hvac
另外,可以把ipcfg.h中的IPCFG_DEBUG_LEVEL改成2,调用ipcfg_task_poll()会在串口输出link状态。(注意重新编译RTCS)

该用户从未签到

1

主题

5

帖子

0

新手上路

Rank: 1

积分
4
最后登录
1970-1-1
发表于 2014-7-29 16:34:17 | 显示全部楼层

回复:新人报道,同时请教MQX下如果判断网络状态,网线插上还是拔出的状态如何判断?

我的可以啊:
           error = ENET_initialize(BSP_DEFAULT_ENET_DEVICE, address, 0, &ehandle);
先初始化,取等enhandle   
  if( ENET_link_status(ehandle))
                  printf("        ipcfg_get_link_active  NET          physical isOOOOOO linking!\n");
          else
                  printf("  ipcfg_get_link_active  NET    physical is unXXXXXlinking!\n");
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-21 06:29 , Processed in 0.099110 second(s), 25 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表