码迷,mamicode.com
首页 > 其他好文 > 详细

lwip之二:带 os

时间:2016-05-11 19:49:09      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

一、os

LwIP 为我们提供了两种应用程序接口( API 函数)来实现 TCP/IP 协议栈,它们分别是:

ØRAW APIlow-level "core" / "callback" or "raw" API

l基于回调函数的 API,运行更快,更省内存。

l不需OS(task/thread),协议栈和app运行在同一个task中,所以无需同步之类的。

l参考Main.c (ports\unix\proj\minimal)中的echo srvecho_init()

Øsequential API higher-level "sequential" API

l需要OS(task/thread),协议栈和app运行在不同的task中,所以需要同步之类的。

l参考Simhost.c (ports\unix\proj\unixsim)tcpip_init()

l需要实现对应OSmbox/semaphore/thread,如Sys_arch.c (ports\unix)

参考下面的代码。

技术分享 

 

tcpip_init会创建tcpip_thread线程。

技术分享技术分享 

 

ØLinux的实现

技术分享 

l信号量,详细的就不说了。在LWIP中用来线程之间同步(告知)

技术分享 

l邮箱,看struct中的void *msgs[SYS_MBOX_SIZE]LWIP中用来线程之间数据交互。

其实和TLS原理一样的,例如pjsip里模拟的TLS就有一样的二维指针(或指针数组)static void *tls_values[MAX_TLS_ID];

struct sys_mbox {

  int first, last;

  void *msgs[SYS_MBOX_SIZE];

  struct sys_sem *not_empty;

  struct sys_sem *not_full;

  struct sys_sem *mutex;

  int wait_send;

};

Sender post

Recver fetch/pend

LWIP中,

tcpip_thread(void *arg)

{

......

while (1) {                          /* MAIN Loop */

{

......

sys_timeouts_mbox_fetch(&mbox, (void **)&msg);//其他线程post

......

}

......

}





lwip之二:带 os

标签:

原文地址:http://www.cnblogs.com/freezlz/p/5483092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!