LWIP的socket只能在os下使用?

目前看样子是只能在OS下用。不过估计可以稍微改一改在非OS下也可以用,不过现在不会啊!

本文待后来补充。。。

-----------------------2017.12.14 补充-----------------

把单片机作为UDP SERVER,电脑PC当成UDP CLIENT。

通过单步调试发现recvfrom这个函数调用了函数sys_arch_mbox_fetch,而sys_arch_mbox_fetch函数内部竟然有个wait forever,就是下面这句:

	else // block forever for a message.
	{
		while( pdTRUE != xQueueReceive( *mbox, &(*msg), portMAX_DELAY ) ){} // time is arbitrary
		EndTime = xTaskGetTickCount();
		Elapsed = (EndTime - StartTime) * portTICK_RATE_MS;
		
		return ( Elapsed ); // return time blocked TODO test	
	}

看上面的注释写的是block forever for a message,我在 block与“阻塞(pend)”与“挂起(suspend)”的区别? 里面写到(注意pend就是block):“ 阻塞(pend)就是任务释放CPU,其他任务可以运行,一般在等待某种资源或信号量的时候出现。”

所以这里可以理解为:recvfrom这个函数内发生了阻塞,直到收到a message,就不阻塞了。

(当然这里的 a message是我们期望的udp,如果是arp之类的message,那么照样一直阻塞)


通过以上分析看出文本开头提出的“稍微改一改”可能不行,估计需要很深的功力才行。

============================================

另外:accept和上文中提到的recvfrom函数是一样的道理。


你可能感兴趣的:(rtos/os,ETH基础)