LWIP的law api编程

lwip协议栈,使用由TCP/ip协议栈提供的服务有两种方式;一种是直接调用在TCP和UDP模块中的函数,另一种就是使用lwip API

TCP 和UDP 模块提供一个网络服务的基本接口。 该接口基于回调,因此使用它的应用程序可能因此不必以连续方式进行操作。 这使应用程序的编程更加困难并且应用代码更难理解。 为了接受数据,应用程序登记一个协议栈的回调函数。 回调函数同一个特定的连接联系在一起,当该连接的包到达时, 回调函数被协议栈调用。
此外, 与TCP 和UDP 模块直接接口地应用程序,必须(至少部份地)保留在像TCP/IP协议栈这样的处理过程中。 这归结于回调函数无法横跨处理界限调用的事实。 这既有好处也有不足。好处是应用程序和TCP/IP 协议是在同一个处理过程中, 发送和接收包时不用上下文切换。 主要不足是,在任何长的连续计算过程中应用程序无法介入自己,因为TCP/IP 处理无法与计算平行发生, 因而丧失通讯性能。 通过把应用程序分成两部分可以克服这一缺点, 一部分应付通信一部分应付计算。 负责通讯的部分驻留在TCP/IP 过程中,负责计算的部份将是一个单独的过
程。 将要在下一节介绍的lwIP API 提供了一个结构化的方式,用这样方式来划分应用程序。
TCP/IP的处理不应该与其他运算并行处理,这样将会降低通讯的性能,所以我们把应用程序分解为两个部分,一部分专注于处理通讯,另一部分做其他的运算。通讯的部分将包含在TCP/IP进层中,而其他的繁杂运算则作为一个独立的进程。下一节将介绍LWIP 的 API 提供的分开的结构来应用的办法。

 

是不是说,在不跑操作系统的情况下,只能调用TCP和UDP模块中的函数?而在多线程的情况下可以用lwip API 函数呢?

 

 

12.1 基本概念
从应用程序去看,BSD SOCKET API的数据处理都是在一个连续的内存区域完成的。这是因为应用程序通常也是在这样的一个连续大内存块中完成数据处理的。 LWIP采用这样的机制是没有优势的,因为IWIP通常处理的数据缓存都被分割成了小的内存块。在通过应用程序前这些数据就会不得不要复制到一个连续的内存区,这将浪费双方的处理时间和内存,因此LWIP API允许应用程序巧妙地直接处理分离的缓存去避免额外的拷贝。
LWIP API 尽管非常类似 BSD SOCKET API,可是却有着值得注意的不同的地方,应用程序使用BSD SOCKET API 时候不需要知道普通文件和网络连接之间的差别,但使用LWIP API的时候就必须要知道确实在使用网络连接。
网络数据被接收到分离的内存块的时候是以缓存的形式出现的,由于很多应用程序都希望在一个连续的内存区域处理数据,这就要有个函数去把这些缓存碎片复制到连续的内存空间中。
发送出去的网络数据根据是TCP连接还是UDP是不同地处理的。在TCP连接时,数据通过一个指向连续内存区的指针发送,TCP/IP协议为传送区分适当大小的数据包和数据队列。在发送UDP数据的时候,应用程序将明确地分配缓存并填充数据,在输出函数被调用的时候由TCP/IP协议栈马上发送出去。
12.2 API的执行
API是分做两个部分执行的,在图12中我们可以看到,一部分位于在TCP/IP的进程模块中,一部分当作连接库在应用程序中执行,这两部分的API通过由操作系统仿真层提供的进程间通讯(IPC)传达信息.当前使用的IPC机制有以下3种:
共享内存
消息
信号
当操作系统支持这些IPC类型的时候,并不意味着他它们得到了操作系统的最底层的
支持,因为操作系统并不是一开始就支持它们,只是操作系统的的仿真层仿真了它们。

 

图示12 . 分开为两部分的API执行
一般的设计原理都是尽可能地提高TCP/IP进程里的API的工作能力更胜于应用程序里API.这很重要,因为大部分的进程都用TCP/IP进程进行它们的TCP/IP通讯。遵循API部分的代码足迹,和应用程序连接的这部分并不是很重要.这些代码可以在进程间共享,即使操作系统并不支持共享连接库。这些代码还可以保存在ROM中,嵌入系统一般尽管处理能力不高却拥有很大的ROM空间。
缓存管理器位于API执行库里,buffer在应用程序进程中被建立,复制和分配.应用程序和TCP/IP进程间使用共享内存来传递buffer,应用程序中用于通讯的buffer数据类型是一种提取于pbuf的类型。
buffer传输引用到的内存,和分配的内存不同,它是可以利用共享内存的.所以可以进程间共享引用的内存.运行LWIP的嵌入式操作系统一般有意不做任何形式的内存保护,所以不会有问题。
操作网络连接的函数位于TCP/IP进程的API中.应用程序的API函数会通过一个简单的通讯协议传递一个信息个TCP/IP进程的API,这信息包含操作的类型,和操作的相关变量.这个操作由TCP/IP的API传输后用信息给应用程序一个返回值。

你可能感兴趣的:(编程,api,socket,buffer,通讯,嵌入式操作系统)