移植lwip

在STM32上移植lwip遇到包括中断信号量初始化错误、程序无法运行及ping延迟增加等问题。解决方案涉及OS配置修改,如增加最大消息队列数和最大socket数量。同时,对于长数据发送,需要适当延时以避免丢包。
AI助手已提取文章相关产品:

OS下要包含3个任务,

1、ethernetif_input    用于从中断接收数据包,处理之后转发给tcoip任务。

2、tcpip_thread         收到处理过的数据包进行解析和其他操作

3、用户自定义应用程序



遇到的问题:

1、等待中断数据包进入硬件错误,中断信号量没有初始化。

2、程序不运行,调试模式不能进入main,因为use microLib没有勾选。

3、ping一段时间后延时不断增加,查到如下解决方案 http://blog.sina.com.cn/s/blog_a4e2465a0102ws39.html

void ethernetif_input(void *p_arg)
{
  uint8_t err;
  struct pbuf *p;
	struct netif *netif;
	
	netif = (struct netif *)p_arg;
	
	while(1)
	{
			OSSemPend(ethSem, 0, &err);
				
			while(1)
			{
					p = low_level_input(netif);

					if (p == NULL) 
					{
							break;
					}

					if (netif->input(p, netif) != ERR_OK)
					{
							LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
							pbuf_free(p);
							p = NULL;
					}
					OSTimeDly(1);
			}
	}
}
low_level_input中修改
  frame = ETH_RxPkt_ChainMode();
	
	if(frame.length == ETH_ERROR)
	{
	return p;
	}

  /* Obtain the size of the packet and put it into the "len"
     variable. */
  len = frame.length;



其他:

#define MEM_SIZE                (10*1024)

这个是占用的内存,根据实际情况修改


20170924

今天想把stm32作为TCP服务器,却最多只能 建立2个连接,解决方式如下

1、ucosii的os_cfg.h文件中的 #define OS_MAX_QS                      4

     这个值表示最大消息队列数,改成6就可以建立3个连接。

     参考 http://www.openedv.com/posts/list/45353.htm

2、还有opt.h文件中的#define MEMP_NUM_NETCONN                5

      这个值表示最大socket数值,每个连接都会分配一个socket

3、为每个连接分配一个任务,另一个任务是判断accept然后将socket传入不同的任务中,

      当第四个连接进来时,先accept,然后马上关闭连接。多连接时会有很多任务要建立,暂时没想到其他方式。


20170926

1、当发送网络数据较长时,每次发送结束要有一定延时等待,不然丢包比较严重,这可能和lwip的缓存空间有关系。




您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值