OPERATING SYSTEM EMULATION LAYER的原代码在…/LWIP/SRC/CORE/SYS.C中.而和具体的操作系统相关的代码在../LWIP/SRC/ARCH/SYS_ARCH.C中.
操作系统封装层的主要函数如下:
VOID SYS_INIT(VOID)//系统初始化
SYS_THREAD_T SYS_THREAD_NEW(VOID (* FUNCTION)(VOID *ARG), VOID *ARG,INT PRIO)//创建一个新进程
SYS_MBOX_T SYS_MBOX_NEW(VOID)//创建一个邮箱
VOID SYS_MBOX_FREE(SYS_MBOX_T MBOX)//释放并删除一个邮箱
VOID SYS_MBOX_POST(SYS_MBOX_T MBOX, VOID *DATA) //发送一个消息到邮箱
VOID SYS_MBOX_FETCH(SYS_MBOX_T MBOX, VOID **MSG)//等待邮箱中的消息
SYS_SEM_T SYS_SEM_NEW(U8_T COUNT)//创建一个信号量
VOID SYS_SEM_FREE(SYS_SEM_T SEM)//释放并删除一个信号量
VOID SYS_SEM_SIGNAL(SYS_SEM_T SEM)//发送一个信号量
VOID SYS_SEM_WAIT(SYS_SEM_T SEM)//等待一个信号量
VOID SYS_TIMEOUT(U32_T MSECS, SYS_TIMEOUT_HANDLER H, VOID *ARG)//设置一个超时事件
VOID SYS_UNTIMEOUT(SYS_TIMEOUT_HANDLER H, VOID *ARG)//删除一个超时事件
…
关于操作系统封装层的信息可以阅读LWIP的DOC目录下面的SYS_ARCH.TXT.文件.
2.2 LWIP在UCOS上的移植.
2.2.1 系统初始化
SYS_INT必须在TCPIP协议栈任务TCPIP_THREAD创建前被调用.
#DEFINE MAX_QUEUES 20
#DEFINE MAX_QUEUE_ENTRIES 20
TYPEDEF STRUCT {
OS_EVENT* PQ;//UCOS中指向事件控制块的指针
VOID* PVQENTRIES[MAX_QUEUE_ENTRIES];//消息队列
//MAX_QUEUE_ENTRIES消息队列中最多消息数
} TQ_DESCR, *PQ_DESCR;
TYPEDEF PQ_DESCR SYS_MBOX_T;//可见LWIP中的MBOX其实是UCOS的消息队列
STATIC CHAR PCQUEUEMEMORYPOOL[MAX_QUEUES * SIZEOF(TQ_DESCR) ];
VOID SYS_INIT(VOID)
{
U8_T I;
S8_T UCERR;
PQUEUEMEM = OSMEMCREATE( (VOID*)PCQUEUEMEMORYPOOL, MAX_QUEUES, SIZEOF(TQ_DESCR), &UCERR );//为消息队列创建内存分区
//INIT LWIP TASK PRIO OFFSET
CURR_PRIO_OFFSET = 0;
//INIT LWIP_TIMEOUTS FOR EVERY LWIP TASK
//初始化LWIP定时事件表,具体实现参考下面章节
FOR(I=0;I LWIP_TIMEOUTS[I].NEXT = NULL;
