目前看样子是只能在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函数是一样的道理。