一直想写点什么,又不知道要写什么,总是感觉学的很多,用的很少,学的很慢,忘得很快,但是学还是要学的,以前在学FreeRTOS的时候就学一点然后用文档记录一点,整理了点东西,当时没发出来,这会再去发出来还要重新往博客上整理,感觉比较麻烦,等到以后LWIP移植FreeRTOS的时候在一并发出来吧。所以这次学习LWIP就直接记录发出来好了,也能告诫下自己的进度,希望能坚持写下去,刚刚接触LWIP,相关介绍就不多说了,百度一大堆,v1.4.1看了两周(进度比较慢)也没看多少,后来就直接切到了v2.1.0上了,总的来说这两个版本的宽度还是有点大的,不仅协议栈中修个、新增了很多东西,而且文件结构体也发生了变化,所以在移植的时候就大致看了,做了点对比。
LWIP从1.4.1到2.1.0不仅在协议栈上有了很大的改变,增加了许多功能,具体没用过所以也没去太了解,同时也还专门为FreeRTOS增加了相关函数;而且在文件结构上也有了一些调整,这里主要说下src文件夹下的调整:
2.1.0的src文件夹目录:
apps文件夹相对1.4.1的是新增的,apps中实现了许多应用层协议的代码如http,snmp等,更加方便用户使用上层协议,这个文件夹其实应该是从1.4.1中的core下独立出来的一个文件夹,只不过以前只有一个snmp协议的文件夹,现在实现了更多应用层协议,所有就以apps文件夹单独出现了;
api文件夹下的文件没有添加,还是那几个,但是代码有所调整;
core文件下的文件下把snmp文件夹剥离出去了,但是下面的文件大多数是原来的名称,新增和删除了以下文件:altcp.c/altcp_alloc.c/altcp_tcp.c:这三个文件看注释说是(application layered TCP connection API; to be used from TCPIP thread)自行百度翻译,由于刚开始学习LWIP没有用过所以不知道是干嘛的,以后用到再补充。(我还会回来的。。。。灰太狼金典语录)。
ip.c:这个文件是新增的,主要是用来管理ipv4和ipv6数据包的分派以及ip地址转成字符串或者字符串转为ip地址等公共函数;
inet_chksum.c:是把1.4.1中在src\core\ipv4下的校验和文件通过修改放到src\core目录下;
timeouts.c:文件是由原本1.4.1中的timers.c修改内容后改名的,本质还是实现各种超时管理;
dhcp.c:这个文件是被分别放到了src\core\ipv4和ivp6文件夹下了,同时修改了文件名称变成了dhcp4.c和dhcp6.c
core\ipv4文件夹下的文件没有添加,只不过换了名称,打上了ipv4的标记,换了马甲还是要认识的嘛。。。。
core\ipv6文件夹中添加了很多不懂ipv6所以不管。好像很有道理的样子。。。。
include文件夹中也改动了一些,但是这里都是些头文件,没什么好说的。
netif文件夹着文件夹增加了很多LWPAN6的东西,包括对蓝牙BLE的以及Zigbee的支持,但是不懂怎么用,以后再说。
以上是一点对于v1.4.1 和 v2.1.0的一些对比,但是有两点我很困惑:1、在doc\文件夹下一般是有sys_arch.txt这个协议栈用户文档的,布吉岛怎么官网下载的2.1.0中没有;2、在src\netif\文件夹下原本应该是有一个ethernetif.c 文件用以实现网卡底层驱动函数的编写的,但是布吉岛为神马也没有的。对于以上两点我严重怀疑是不是他们漏了。。。。(神奇的四个句号)