打印

学习uIP的笔记

[复制链接]
1075|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
su_mj000|  楼主 | 2016-5-5 01:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
工作关系,有幸接触uIP。的确,uIP非常小巧,容易移植到内存匮乏的小型MCU上。
uIP尽管小巧,一般而言,它在任何时刻只能支持对某一远端进行通讯,这是它与
其他TCP/IP协议栈的关键区别。但对于大多数小型嵌入式应用而言,这不是障碍。
相反,由于uIP简单、小巧,代码中出错概率应该较低,运行应该较快。
沙发
su_mj000|  楼主 | 2016-5-5 07:01 | 只看该作者
网上有关uIP的移植的帖子很多,但大都属于传统的例行例子(如http服务器、Telnet服务器)。
下载免费的uIP代码包中,其中含有多个应用例子(app)。初次接触者往往不知如何运用到
自己的实际应用之中。尤其是打算作为客户端的应用。
(1) uIP代码包中uip目录下的源文件一般都可以导入自己的应用之中,可以设立一个文件目录。
(2) 应该加入两个用于配置文件:uip_conf.h和uipopt.h。其中的设置项可以参见网上的例子。
         作为客户端,应该启用UIP_UDP_CONF。
(3) 作为客户端应用,初始化一般要解决两个问题。一,获得局域网的ip地址;二,获得远程
         服务端的英特网地址。前者将使用到uIP栈中的dhcpc.c/dhcpc.h;而后者将使用solve.c/solve.h。
         初学者会发现:dhcpc.h和solve.h中都使用了同名宏定义"#define UIP_APPCALL”。所以要将两者
         合并(uIP协议栈会自动调节、使用各自的功能)。

使用特权

评论回复
板凳
su_mj000|  楼主 | 2016-5-15 23:21 | 只看该作者
三个基本支持函数:
tapdev_init() - 网络芯片(PHY)以及uIP本身的初始化.
tapdev_read() - 从网络层读取数据包.
tapdev_send() - 向网络层输出数据包.

后两个函数就是连接层与传输层的唯一接口,极其简洁.一般不会发生问题.

应用移植中所出现的问题,麻烦都是传输层与应用层的衔接.这种衔接就是所谓的回调函数(call back)的使用.

这里的回调函数就是所谓的appcall().有两类回调函数:(1)uip_udp_appcall -用于dhcp和dns的任务;(2)
uip_appcall -tcp/ip应用的接口.前者很简单,用户只需添加少量的处理便可截取所需的信息(局域网路由其分配的ip,远端服务器的英特网ip).而后者才是移植过程中的工作重点.

回调的产生由所谓的'事件'激发.所以回调函数必须检测激发事件(uip_newdata(), uip_connected(), uip_closed(), uipuip_acked(), _rexmit(), uip_aborted(), ...)并根据应用的需要作出对应的处理.


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

286

帖子

1

粉丝