你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教下,使用FreeRTOS+LwIP+emWin 组合,目前接收有时不够灵敏

[复制链接]
hpdell 提问时间:2018-10-3 15:58 /
本帖最后由 hpdell 于 2018-10-3 16:01 编辑

请教下,使用FreeRTOS+LwIP+emWin 组合,目前接收有时不够灵敏

使用的 是 socket udp ,开发版发送数据 到电脑端貌似没有问题,但是 电脑端 使用 网络调试助手V4.2.1 这个工具发送数据给开发板,

有时会丢失数据 ?? 电脑端是 每s 发送一次
FreeRTOS+LwIP 是参考官方的历程修改,emwin 是我自己加上去的,正常来说,emwin 应该也不会影响到 FreeRTOS+LwIP的功能吧 ?

udp.png

收藏 1 评论5 发布时间:2018-10-3 15:58

举报

5个回答
衔胆栖冰 回答时间:2018-10-5 23:29:23
用的哪款芯片,UDP只发一次,中断接收怎么处理的?
hpdell 回答时间:2018-10-7 18:05:58
衔胆栖冰 发表于 2018-10-5 23:29
用的哪款芯片,UDP只发一次,中断接收怎么处理的?

我使用 f777
hpdell 回答时间:2018-10-7 21:02:27
衔胆栖冰 发表于 2018-10-5 23:29
用的哪款芯片,UDP只发一次,中断接收怎么处理的?

你好, 中断处理方法如下:这个方法是st 历程里面提供的,我也是参考这个方法来改的程序

在中断接收里面发送信息
void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth)
{
  osSemaphoreRelease(s_xSemaphore);   //发送信号量
}


任务接收到发送来的信号量函数处理:
/**
* This function should be called when a packet is ready to be read
* from the interface. It uses the function low_level_input() that
* should handle the actual reception of bytes from the network
* interface. Then the type of the received packet is determined and
* the appropriate input function is called.
*
* @param netif the lwip network interface structure for this ethernetif
*/
void ethernetif_input( void const * argument )
{
  struct pbuf *p;
  struct netif *netif = (struct netif *) argument;

  for( ;; )
  {
    if (osSemaphoreWait( s_xSemaphore, TIME_WAITING_FOR_INPUT) ==osOK)
    {
      do
      {
        p = low_level_input( netif );
        if   (p != NULL)
        {
          if (netif->input( p, netif) != ERR_OK )
          {
            pbuf_free(p);
                                                p = NULL;
          }
        }
      }  while(p != NULL);
    }
  }
}



单独建立了一个任务,用于不停的查询接收到的数据,然后使用串口输出:
是不是我的这个任务的处理方法不对啊 ????????????????????????????????????????????
void socket_demo_RxDataProcess(void)
{
  if(ReadConnectStatus())  // 如果连接成功才运行程序
  {
        int   _s;
        {
                _s = recvfrom(xClientSocket.s,Socket_RecvBuf,TCP_RX_BUFSIZE,0,(struct sockaddr*)&ServerAddr,&addrlen);
                if(_s > 0)  //接收的数据
                {
                        Socket_RecvBuf[_s] = '\0';
                        USART_OS_Printf("%s\r\n",Socket_RecvBuf);  //打印接收到的数据
                }  
      }
  }
}









hpdell 回答时间:2018-10-10 09:06:51
终于找到问题了,是我的输入法造成的,但是这个输入法不知道该如何解决 ???????
访客1989 回答时间:2018-12-7 09:18:04
支持一下,学习中

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版