h0610001210的笔记 https://passport2.21ic.com/?646421 [收藏] [复制] [RSS]

日志

lwip的初始化sys_init()(转载)

已有 1387 次阅读2012-6-27 06:36 |系统分类:嵌入式系统




lwip的初始化sys_init()  





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];//消息队列
} TQ_DESCR, *PQ_DESCR;
typedef PQ_DESCR  sys_mbox_t;//可见lwip中的mbox其实是ucos的消息队列
static char pcQueueMemoryPool[MAX_QUEUES * sizeof(TQ_DESCR) ];


struct sys_timeouts lwip_timeouts[LWIP_TASK_MAX];//定时事件链表


struct sys_timeouts {
  struct sys_timeout *next;
}


typedef void (* sys_timeout_handler)(void *arg)//定时时间到处理函数指针


struct sys_timeout {
  struct sys_timeout *next;//指向下一个节点
  u32_t time;//定时时间
  sys_timeout_handler h;//定时时间到处理函数
  void *arg;//处理函数参数
};


//每个和tcp/ip相关的任务的一系列定时事件组成一个单向链表.每个链表的起始指针存在lwip_timeouts的对应表项中//函数sys_arch_timeouts返回对应于当前任务的指向定时事件链表的起始指针.该指针存在lwip_timeouts[MAX_LWIP_TASKS]中
void sys_init(void)//系统初始化函数
{
    u8_t i;
    u8_t   ucErr;


    //为消息队列分配内存,使用ucos的内存管理函数
    pQueueMem = OSMemCreate( (void*)pcQueueMemoryPool, MAX_QUEUES, sizeof(TQ_DESCR), &ucErr );
    curr_prio_offset = 0;


    //初始化lwip定时事件表
    for(i=0;i<LWIP_TASK_MAX;i++){
     lwip_timeouts.next = NULL;
    }
}


路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)