lwip协议栈在linux运行,LwIP协议栈在uCOS II下的实现

本文详细介绍了LwIP协议栈在Linux和uCOS II上的移植过程,涉及CPU、编译器相关定义、操作系统相关部分、库函数实现、网络设备驱动以及应用实例的建立和测试。LwIP通过结构体和函数的封装,适应不同的操作系统和硬件平台,确保其在不同环境下的正常运行。
摘要由CSDN通过智能技术生成

1、概述:

LwIP协议栈在设计时就考虑到了将来的移植问题,因此把所有与硬件、OS、编译器相关的部份独立出来,放在ucosii&LwIPsource etlwiparch目录下。因此LwIP在uCOS II上的实现就是修改这个目录下的文件,其它的文件一般不应该修改。下面分几部份分别说明相应文件的实现原理和过程。

2、与CPU或编译器相关的include文件:

ucosii&LwIPsource etlwiparchucosIIincludearch目录下cc.h、cpu.h、perf.h中有一些与CPU或编译器相关的定义,如数据长度,字的高低位顺序等。这应该与用户实现µC/OS II时定义的数据长度等参数是一致的。

#define BYTE_ORDER LITTLE_ENDIAN  //C33209默认为小端存储系统

//数据类型长度的定义

typedef unsigned char   u8_t;

typedef signed char     s8_t;

typedef unsigned short  u16_t;

typedef signed short    s16_t;

typedef unsigned int    u32_t;

typedef signed int      s32_t;

此外还有一点:一般情况下C语言的结构体struct是4字节对齐的,但是在处理数据包的时候,LwIP使用的是通过结构体中不同数据的长度来读取相应的数据的,所以,一定要在定义struct的时候使用_packed关键字,让编译器放弃struct的字节对齐。LwIP也考虑到了这个问题,所以,在它的结构体定义中有几个PACKED_FIELD_xxx宏,默认的时候这几个宏都是空的,可以在移植的时候添加不同的编译器所对应的_packed关键字。比如在Skyeye(C33209)上对应gcc编译器的定义:

#define PACK_STRUCT_FIELD(x) x __attribute__((packed))

#define PACK_STRUCT_STRUCT __attribute__((packed))

#define PACK_STRUCT_BEGIN

#define PACK_STRUCT_END

3、sys_arch操作系统相关部份:

sys_arch.[ch]中的内容是与OS相关的一些结构和函数,主要可以分为四个部份:

(1)    sys_sem_t 信号量

LwIP中需要使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值