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

请教下使用FreeRTOS+LwIP+emWin,LwIP使用socket-udp功能,收发数据...

[复制链接]
hpdell 提问时间:2018-9-30 09:58 /
10ST金币
请教下使用FreeRTOS+LwIP+emWin,LwIP使用socket-udp功能,收发数据丢包非常非常严重,是怎么回事啊 ?

单片机使用 F7x

相关宏定义如下:
#define NO_SYS                  0  //=0使用rtos,否则不使用rtos功能
#define SYS_LIGHTWEIGHT_PROT    1 /* 使用 rtos 的临界区保护 lwip 的线程,以及关键变量 */
#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 1 /* 使用RTOS的信号量和临界区保护内存的分配以及释放等等 */



LwIP 缓存配置:

/* MEM_SIZE: the size of the heap memory. If the application will send
a lot of data that needs to be copied, this should be set high.
内存堆heap大小 */
#define MEM_SIZE                (20*1024)

/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
   sends a lot of data out of ROM (or other static memory), this
   should be set high.
   MEMP_NUM_PBUF:memp结构的pbuf数量,如果应用从ROM或者静
   态存储区发送大量数据时,这个值应该设置大一点 */
#define MEMP_NUM_PBUF           30   // default set 10


#define TCPIP_THREAD_NAME              "TCP/IP"
#define TCPIP_THREAD_STACKSIZE          1000    //内核任务堆栈大小
#define TCPIP_MBOX_SIZE                 6
#define DEFAULT_UDP_RECVMBOX_SIZE       6    // 2000
#define DEFAULT_TCP_RECVMBOX_SIZE       6
#define DEFAULT_ACCEPTMBOX_SIZE         6
#define DEFAULT_THREAD_STACKSIZE        500   // 512
#define TCPIP_THREAD_PRIO               osPriorityHigh

收藏 1 评论7 发布时间:2018-9-30 09:58

举报

7个回答
shenxiaolin_mai 回答时间:2018-10-11 14:19:15
一般在使用LWIP+RTOS的时候都是开启DMA的,不知道你是不是这样的,以前用F4 就是直接移植官方的以太网程序,几乎没出现过丢包的情况,或者你的某个任务有阻塞,才会出现丢包的状况,建议使用状态机,保证猛恶任务都不存在阻塞的状态。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

shanji 回答时间:2018-10-11 16:36:44
丢包严重,先定位下丢包的源头,是freeos任务抢占导致的还是内存分配失败导致的?如果是我,我会把与收发数据无关的任务先屏蔽掉,然后再慢慢找问题。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

hpdell 回答时间:2018-10-11 16:47:03
shanji 发表于 2018-10-11 16:36
丢包严重,先定位下丢包的源头,是freeos任务抢占导致的还是内存分配失败导致的?如果是我,我会把与收发数 ...

已经找到原因了,是我 的输入法造成的,吧输入法屏蔽就好了,

但是目前还没有解决好输入法与 udp 之间的工作协调问题

你们有没有什么比较好点的占用资源不多的输入法啊 ?
shenxiaolin_mai 回答时间:2018-10-11 17:23:07
一般情况下以太网都有单独的任务处理函数,基本上采用DMA操作,不知道楼主是不是这样的,以前用F4 的时候基本都是这种处理方式。
hpdell 回答时间:2018-10-12 14:34:38
xiaoshen-372360 发表于 2018-10-11 17:23
一般情况下以太网都有单独的任务处理函数,基本上采用DMA操作,不知道楼主是不是这样的,以前用F4 的时候基 ...

是的,我的 lwip ,收发都是单独的各自任务处理的,
xiaojie0513 回答时间:2019-1-12 22:09:00
并不会~~
aiherong 回答时间:2019-1-13 20:49:57
我还没开始在STM32上写网络,不过据我在VC++写socket程序经验:
UDP(无连接协议)本身就是比TCP(建立连接)易丢包,Lwip应该也不例外吧!

所属标签

相似问题

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