已有 1387 次阅读2012-6-27 06:36 |系统分类:嵌入式系统
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;
}
}
扫码关注
21ic 官方微信
扫码关注
嵌入式微处理器
扫码关注
21ic项目外包
扫码关注
21ic视频号
扫码关注
21ic抖音号