搜索
查看: 2111|回复: 5

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

[复制链接]

该用户从未签到

227

主题

828

帖子

32

蝴蝶豆

金牌会员

最后登录
2021-1-15
发表于 2018-10-3 15:58:15 | 显示全部楼层 |阅读模式
本帖最后由 hpdell 于 2018-10-3 16:01 编辑

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

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

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

udp.png

回复

使用道具 举报

该用户从未签到

9

主题

285

帖子

66

蝴蝶豆

金牌会员

最后登录
2020-11-17
发表于 2018-10-5 23:29:23 | 显示全部楼层
用的哪款芯片,UDP只发一次,中断接收怎么处理的?
回复 支持 反对

使用道具 举报

该用户从未签到

227

主题

828

帖子

32

蝴蝶豆

金牌会员

最后登录
2021-1-15
 楼主| 发表于 2018-10-7 18:05:58 | 显示全部楼层
衔胆栖冰 发表于 2018-10-5 23:29
用的哪款芯片,UDP只发一次,中断接收怎么处理的?

我使用 f777
回复 支持 反对

使用道具 举报

该用户从未签到

227

主题

828

帖子

32

蝴蝶豆

金牌会员

最后登录
2021-1-15
 楼主| 发表于 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);  //打印接收到的数据
                }  
      }
  }
}









回复 支持 反对

使用道具 举报

该用户从未签到

227

主题

828

帖子

32

蝴蝶豆

金牌会员

最后登录
2021-1-15
 楼主| 发表于 2018-10-10 09:06:51 | 显示全部楼层
终于找到问题了,是我的输入法造成的,但是这个输入法不知道该如何解决 ???????
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

196

帖子

0

蝴蝶豆

高级会员

最后登录
2020-11-3
发表于 2018-12-7 09:18:04 | 显示全部楼层
支持一下,学习中
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-25 21:54 , Processed in 0.181390 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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